From: choochter <choochter>
Date: Wed, 23 Jul 2003 12:01:59 +0000 (+0000)
Subject: updating SQL plugin with latest Quantum code
X-Git-Url: http://secure.phpeclipse.com

updating SQL plugin with latest Quantum code
---

diff --git a/archive/net.sourceforge.phpeclipse.sql/.classpath b/archive/net.sourceforge.phpeclipse.sql/.classpath
index ee42d2f..d8f18b1 100644
--- a/archive/net.sourceforge.phpeclipse.sql/.classpath
+++ b/archive/net.sourceforge.phpeclipse.sql/.classpath
@@ -1,32 +1,33 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-    <classpathentry kind="src" path="src"/>
+    <classpathentry kind="src" path="src/"/>
     <classpathentry kind="var"
-        path="ECLIPSE_HOME/plugins/org.eclipse.core.boot_2.1.0/boot.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.core.boot_2.1.0/bootsrc.zip"/>
+        path="ECLIPSE_HOME/plugins/org.eclipse.core.boot_2.1.1/boot.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.core.boot_2.1.1/bootsrc.zip"/>
     <classpathentry kind="var"
-        path="ECLIPSE_HOME/plugins/org.eclipse.core.runtime_2.1.0/runtime.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.core.runtime_2.1.0/runtimesrc.zip"/>
+        path="ECLIPSE_HOME/plugins/org.eclipse.core.runtime_2.1.1/runtime.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.core.runtime_2.1.1/runtimesrc.zip"/>
     <classpathentry kind="var"
-        path="ECLIPSE_HOME/plugins/org.eclipse.core.resources_2.1.0/resources.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.core.resources_2.1.0/resourcessrc.zip"/>
+        path="ECLIPSE_HOME/plugins/org.eclipse.core.resources_2.1.1/resources.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.core.resources_2.1.1/resourcessrc.zip"/>
     <classpathentry kind="var"
-        path="ECLIPSE_HOME/plugins/org.eclipse.swt.win32_2.1.0/ws/win32/swt.jar" sourcepath="ORG_ECLIPSE_PLATFORM_WIN32_SOURCE_SRC/org.eclipse.swt.win32_2.1.0/ws/win32/swtsrc.zip"/>
+        path="ECLIPSE_HOME/plugins/org.eclipse.swt.win32_2.1.1/ws/win32/swt.jar" sourcepath="ORG_ECLIPSE_PLATFORM_WIN32_SOURCE_SRC/org.eclipse.swt.win32_2.1.1/ws/win32/swtsrc.zip"/>
     <classpathentry kind="var"
-        path="ECLIPSE_HOME/plugins/org.eclipse.ui_2.1.0/ui.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.ui_2.1.0/uisrc.zip"/>
+        path="ECLIPSE_HOME/plugins/org.eclipse.ui_2.1.1/ui.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.ui_2.1.1/uisrc.zip"/>
     <classpathentry kind="var"
         path="ECLIPSE_HOME/plugins/org.eclipse.text_2.1.0/text.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.text_2.1.0/textsrc.zip"/>
     <classpathentry kind="var"
-        path="ECLIPSE_HOME/plugins/org.eclipse.jface_2.1.0/jface.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.jface_2.1.0/jfacesrc.zip"/>
+        path="ECLIPSE_HOME/plugins/org.eclipse.jface_2.1.1/jface.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.jface_2.1.1/jfacesrc.zip"/>
     <classpathentry kind="var"
         path="ECLIPSE_HOME/plugins/org.eclipse.jface.text_2.1.0/jfacetext.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.jface.text_2.1.0/jfacetextsrc.zip"/>
     <classpathentry kind="var"
         path="ECLIPSE_HOME/plugins/org.eclipse.ui.views_2.1.0/views.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.ui.views_2.1.0/viewssrc.zip"/>
     <classpathentry kind="var"
-        path="ECLIPSE_HOME/plugins/org.eclipse.ui.workbench_2.1.0/workbench.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.ui.workbench_2.1.0/workbenchsrc.zip"/>
+        path="ECLIPSE_HOME/plugins/org.eclipse.ui.workbench_2.1.1/workbench.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.ui.workbench_2.1.1/workbenchsrc.zip"/>
     <classpathentry kind="var"
         path="ECLIPSE_HOME/plugins/org.eclipse.ui.win32_2.1.0/workbenchwin32.jar" sourcepath="ORG_ECLIPSE_PLATFORM_WIN32_SOURCE_SRC/org.eclipse.ui.win32_2.1.0/workbenchwin32src.zip"/>
     <classpathentry kind="var"
         path="ECLIPSE_HOME/plugins/org.eclipse.ui.workbench.texteditor_2.1.0/texteditor.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.ui.workbench.texteditor_2.1.0/texteditorsrc.zip"/>
     <classpathentry kind="var"
         path="ECLIPSE_HOME/plugins/org.eclipse.ui.editors_2.1.0/editors.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.ui.editors_2.1.0/editorssrc.zip"/>
-    <classpathentry kind="var" path="JRE_LIB" sourcepath="JRE_SRC"/>
+    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+    <classpathentry kind="lib" path="D:/bin/eclipse/Plugins/org.eclipse.jdt.junit_2.1.1/junitsupport.jar"/>
     <classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/archive/net.sourceforge.phpeclipse.sql/icons/greentable.gif b/archive/net.sourceforge.phpeclipse.sql/icons/greentable.gif
new file mode 100644
index 0000000..6fc3743
Binary files /dev/null and b/archive/net.sourceforge.phpeclipse.sql/icons/greentable.gif differ
diff --git a/archive/net.sourceforge.phpeclipse.sql/icons/key.gif b/archive/net.sourceforge.phpeclipse.sql/icons/key.gif
new file mode 100644
index 0000000..6ab7f34
Binary files /dev/null and b/archive/net.sourceforge.phpeclipse.sql/icons/key.gif differ
diff --git a/archive/net.sourceforge.phpeclipse.sql/icons/php.gif b/archive/net.sourceforge.phpeclipse.sql/icons/php.gif
new file mode 100644
index 0000000..f01f87e
Binary files /dev/null and b/archive/net.sourceforge.phpeclipse.sql/icons/php.gif differ
diff --git a/archive/net.sourceforge.phpeclipse.sql/icons/sequence.gif b/archive/net.sourceforge.phpeclipse.sql/icons/sequence.gif
new file mode 100644
index 0000000..4425e30
Binary files /dev/null and b/archive/net.sourceforge.phpeclipse.sql/icons/sequence.gif differ
diff --git a/archive/net.sourceforge.phpeclipse.sql/icons/subset.gif b/archive/net.sourceforge.phpeclipse.sql/icons/subset.gif
new file mode 100644
index 0000000..ae12ef2
Binary files /dev/null and b/archive/net.sourceforge.phpeclipse.sql/icons/subset.gif differ
diff --git a/archive/net.sourceforge.phpeclipse.sql/icons/view.gif b/archive/net.sourceforge.phpeclipse.sql/icons/view.gif
new file mode 100644
index 0000000..649207f
Binary files /dev/null and b/archive/net.sourceforge.phpeclipse.sql/icons/view.gif differ
diff --git a/archive/net.sourceforge.phpeclipse.sql/icons/xml.gif b/archive/net.sourceforge.phpeclipse.sql/icons/xml.gif
new file mode 100644
index 0000000..1dff550
Binary files /dev/null and b/archive/net.sourceforge.phpeclipse.sql/icons/xml.gif differ
diff --git a/archive/net.sourceforge.phpeclipse.sql/plugin.properties b/archive/net.sourceforge.phpeclipse.sql/plugin.properties
index db877f1..28f7f65 100644
--- a/archive/net.sourceforge.phpeclipse.sql/plugin.properties
+++ b/archive/net.sourceforge.phpeclipse.sql/plugin.properties
@@ -8,4 +8,6 @@ bookmarkview.name = Database Bookmarks
 bookmarkview.importboomarks = Import Bookmarks
 bookmarkview.exportbookmarks = Export Bookmarks
 phpsourceconsoleview.name = PHP Source Generator Console
+category.name = PHPEclipseSQL
+subsetview.name = Subsets
 category.name = PHPEclipseSQL
\ No newline at end of file
diff --git a/archive/net.sourceforge.phpeclipse.sql/plugin.xml b/archive/net.sourceforge.phpeclipse.sql/plugin.xml
index 5574791..54a295d 100644
--- a/archive/net.sourceforge.phpeclipse.sql/plugin.xml
+++ b/archive/net.sourceforge.phpeclipse.sql/plugin.xml
@@ -3,7 +3,7 @@
    id="net.sourceforge.phpeclipse.sql"
    name="%phpsql.name"
    version="1.0.2"
-   provider-name="eclipseproject.de"
+   provider-name="PHPEclipse Project"
    class="net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin">
 
    <runtime>
@@ -15,6 +15,7 @@
       <import plugin="org.eclipse.core.resources"/>
       <import plugin="org.eclipse.swt"/>
       <import plugin="org.eclipse.ui"/>
+      <import plugin="org.apache.xerces"/>
    </requires>
 
 
@@ -104,13 +105,13 @@
             name="Connecting"
             category="net.sourceforge.phpdt.sql.preferences.PreferencesPage"
             class="net.sourceforge.phpdt.sql.preferences.PHPSQLConnectionPreferencePage"
-            id="net.sourceforge.phpdt.sql.preferences.PHPSQLConnectionPreferencePage">        
+            id="net.sourceforge.phpdt.sql.preferences.PHPSQLConnectionPreferencePage">
       </page>
       <page
             name="Templates"
             category="net.sourceforge.phpdt.sql.preferences.PreferencesPage"
             class="net.sourceforge.phpdt.sql.preferences.PHPSQLTemplatesPreferencePage"
-            id="net.sourceforge.phpdt.sql.preferences.PHPSQLTemplatesPreferencePage">        
+            id="net.sourceforge.phpdt.sql.preferences.PHPSQLTemplatesPreferencePage">
       </page>
    </extension>
 <!-- Menu for Bookmark View -->
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/IConstants.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/IConstants.java
index 5902380..21987a7 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/IConstants.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/IConstants.java
@@ -6,4 +6,8 @@ package net.sourceforge.phpdt.sql;
  */
 public interface IConstants {
   public boolean DEBUG = false;
+  public final String PHPFILEHEADER = "<?php%%NL%%echo '<html>';%%NL%%echo '<head>';%%NL%%echo '<meta name=\"PHPEclipse-generated\" content=\"PHPEclipse\">';%%NL%%echo '<title>Database access</title>';%%NL%%echo '</head><body>';%%NL%%?>%%NL%%";
+  public final String PHPDBCONNHEADER = "%%NL%%$dbconn = mysql_connect(%%CONNLIST%%) or die(\"Could not connect to database\");%%NL%%$db = mysql_select_db(%%DBNAME%%, $dbconn) or die(\"Database not found\");%%NL%%";
+  public final String PHPDBRESULTHEADER = "$result = mysql_query(%%QUERY%%);%%NL%%";
+  public final String PHPDBCLOSEHEADER = "mysql_close($dbconn);%%NL%%exit;%%NL%%?>%%NL%%";
 }
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/Messages.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/Messages.java
similarity index 92%
rename from archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/Messages.java
rename to archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/Messages.java
index 32024db..b2b84a6 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/Messages.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/Messages.java
@@ -1,4 +1,4 @@
-package net.sourceforge.phpdt.sql.actions;
+package net.sourceforge.phpdt.sql;
 
 import java.util.MissingResourceException;
 import java.util.ResourceBundle;
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/PHPEclipseSQLPlugin.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/PHPEclipseSQLPlugin.java
index a08b9e0..7d3cbec 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/PHPEclipseSQLPlugin.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/PHPEclipseSQLPlugin.java
@@ -1,9 +1,17 @@
 package net.sourceforge.phpdt.sql;
 
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
 import java.net.URL;
-import java.util.ResourceBundle;
 
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.apache.crimson.tree.XmlDocument;
 import org.eclipse.core.resources.ISaveContext;
 import org.eclipse.core.resources.ISaveParticipant;
 import org.eclipse.core.resources.ISavedState;
@@ -18,203 +26,295 @@ import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.graphics.FontData;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.graphics.RGB;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.w3c.dom.Element;
+import org.xml.sax.SAXException;
 
-import net.sourceforge.phpdt.sql.sql.MultiSQLServer;
 import net.sourceforge.phpdt.sql.view.bookmark.BookmarkContentProvider;
+import net.sourceforge.phpdt.sql.view.bookmark.SubsetContentProvider;
 
 /**
  * @author 
  */
 public class PHPEclipseSQLPlugin
-  extends AbstractUIPlugin
-  implements IConstants {
-
-  private static final String BUNDLE_NAME =
-    "net.sourceforge.phpdt.sql.PHPEclipseSQLResources";
-  private static final ResourceBundle RESOURCE_BUNDLE =
-    ResourceBundle.getBundle(BUNDLE_NAME);
-
-  private static PHPEclipseSQLPlugin plugin;
-  public final static String PLUGIN_ID = "net.sourceforge.phpeclipse.sql";
-
-  public PHPEclipseSQLPlugin(IPluginDescriptor descriptor) {
-    super(descriptor);
-    plugin = this;
-  }
-
-  public static PHPEclipseSQLPlugin getDefault() {
-    return plugin;
-  }
-  protected void readStateFrom(File target) {
-    BookmarkContentProvider.getInstance().load(target);
-  }
-
-  public void startup() throws CoreException {
-    super.startup();
-    ISaveParticipant saveParticipant = new PHPSQLSaveParticipant();
-    ISavedState lastState =
-      ResourcesPlugin.getWorkspace().addSaveParticipant(this, saveParticipant);
-    if (lastState == null)
-      return;
-    IPath location = lastState.lookup(new Path("save"));
-    if (location == null)
-      return;
-    // the plugin instance should read any important state from the file. 
-    File f = getStateLocation().append(location).toFile();
-    readStateFrom(f);
-  }
-  protected void writeImportantState(File target) {
-    BookmarkContentProvider.getInstance().save(target);
-  }
-  public static ImageDescriptor getImageDescriptor(String name) {
-    ImageDescriptor descriptor = null;
-    try {
-      URL installURL =
-        PHPEclipseSQLPlugin.getDefault().getDescriptor().getInstallURL();
-      URL url = new URL(installURL, "icons/" + name);
-      descriptor = ImageDescriptor.createFromURL(url);
-    } catch (Exception e) {
-      e.printStackTrace();
-    }
-    return descriptor;
-  }
-  public static Image getImage(String name) {
-    return getImageDescriptor(name).createImage();
-  }
-
-  public void dispose() throws CoreException {
-    MultiSQLServer.getInstance().shutdown();
-  }
-
-  protected void initializeDefaultPluginPreferences() {
-    RGB BACKGROUND = new RGB(255, 255, 255);
-    RGB COMMENT = new RGB(88, 148, 64);
-    RGB IDENTIFIER = new RGB(0, 0, 0);
-    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,
-      "phpeclipse.sql.background.color",
-      BACKGROUND);
-    PreferenceConverter.setDefault(store, "phpeclipse.sql.text.color", DEFAULT);
-    PreferenceConverter.setDefault(
-      store,
-      "phpeclipse.sql.keyword.color",
-      KEYWORD);
-    PreferenceConverter.setDefault(
-      store,
-      "phpeclipse.sql.comment.color",
-      COMMENT);
-    PreferenceConverter.setDefault(
-      store,
-      "phpeclipse.sql.string.color",
-      STRING);
-    PreferenceConverter.setDefault(
-      store,
-      "phpeclipse.sql.numeric.color",
-      NUMERIC);
-    getPreferenceStore().setDefault("phpeclipse.sql.text.bold", false);
-    getPreferenceStore().setDefault("phpeclipse.sql.keyword.bold", true);
-    getPreferenceStore().setDefault("phpeclipse.sql.string.bold", false);
-    getPreferenceStore().setDefault("phpeclipse.sql.comment.bold", false);
-    getPreferenceStore().setDefault("phpeclipse.sql.numeric.bold", false);
-
-    getPreferenceStore().setDefault(
-      "phpeclipse.sql.select.template",
-      "$results = mysql_query(\"SELECT {0} FROM {1} WHERE {2} \");");
-
-    getPreferenceStore().setDefault(
-      "phpeclipse.sql.insert.template",
-      "$results = mysql_query(\"INSERT INTO {0} ({1}) VALUES {2} \");");
-
-    getPreferenceStore().setDefault(
-      "phpeclipse.sql.update.template",
-      "$results = mysql_query(\"UPDATE {0} SET {1} WHERE {2} \");");
-
-    getPreferenceStore().setDefault(
-      "phpeclipse.sql.delete.template",
-      "$results = mysql_query(\"DELETE FROM {0} WHERE {1} \");");
-
-    getPreferenceStore().setDefault("phpeclipse.sql.username.connect", "root");
-
-    getPreferenceStore().setDefault(
-      "phpeclipse.sql.connect.connect",
-      "jdbc:mysql://localhost/test");
-
-    getPreferenceStore().setDefault(
-      "phpeclipse.sql.driver.connect",
-      "com.mysql.jdbc.Driver");
-
-    getPreferenceStore().setDefault("phpeclipse.sql.type.connect", "MySQL");
-
-    getPreferenceStore().setDefault(
-      "phpeclipse.sql.filename.connect",
-      "C:\\apache\\mysql\\lib\\mysql-connector-java-2.0.14-bin.jar");
-
-    PreferenceConverter.setDefault(
-      getPreferenceStore(),
-      "phpeclipse.sql.font",
-      (FontData) null);
-  }
+extends AbstractUIPlugin
+implements IConstants {
+
+	private static PHPEclipseSQLPlugin plugin;
+	public final static String PLUGIN_ID = "net.sourceforge.phpeclipse.sql";
+
+	public PHPEclipseSQLPlugin(IPluginDescriptor descriptor) {
+		super(descriptor);
+		plugin = this;
+	}
+
+	public static PHPEclipseSQLPlugin getDefault() {
+		return plugin;
+	}
+	/**
+	 * Reads the PHPEclipseSQL Plugin state from a file. The file has been created with writeImportantState
+	 * @param target
+	 */
+	protected void readStateFrom(File target) {
+		String fileName = target.getName();
+		if (!fileName.endsWith("ext")) { //$NON-NLS-1$
+			// It's the 2.0 format for preferences
+			BookmarkContentProvider.getInstance().load(target);
+		} else {
+			//It's the 2.1 format for preferences and subsets
+			XmlDocument doc = new XmlDocument();
+			FileInputStream source = null;
+			try {
+				source = new FileInputStream(target);
+			} catch (FileNotFoundException e1) {
+				e1.printStackTrace();
+				return;
+			}
+			DocumentBuilderFactory factory =
+			DocumentBuilderFactory.newInstance();
+			DocumentBuilder parser;
+			try {
+				parser = factory.newDocumentBuilder();
+				doc = (XmlDocument) parser.parse(source);
+			} catch (ParserConfigurationException e) {
+				e.printStackTrace();
+				return;
+			} catch (SAXException e) {
+				e.printStackTrace();
+				return;
+			} catch (IOException e) {
+				e.printStackTrace();
+				return;
+			}
+			Element root = doc.getDocumentElement();
+			BookmarkContentProvider.getInstance().importXML(root);
+			SubsetContentProvider.getInstance().importXML(root);
+		}
+	}
+
+	public void startup() throws CoreException {
+		super.startup();
+		ISaveParticipant saveParticipant = new PHPSQLSaveParticipant();
+		ISavedState lastState =
+		ResourcesPlugin.getWorkspace().addSaveParticipant(
+														 this,
+														 saveParticipant);
+		if (lastState == null)
+			return;
+		IPath location = lastState.lookup(new Path("save"));
+		if (location == null)
+			return;
+		// the plugin instance should read any important state from the file. 
+		File f = getStateLocation().append(location).toFile();
+		readStateFrom(f);
+	}
+
+	protected void writeImportantState(File target) {
+		XmlDocument doc = new XmlDocument();
+		FileOutputStream out = null;
+		try {
+			out = new FileOutputStream(target);
+		} catch (FileNotFoundException e1) {
+			e1.printStackTrace();
+			return;
+		}
+		Element root = (Element) doc.appendChild(doc.createElement(Messages.getString("ExportXMLAction.SavedData"))); //$NON-NLS-1$
+
+		BookmarkContentProvider.getInstance().exportXML(root);
+		SubsetContentProvider.getInstance().exportXML(root);
+
+		try {
+			doc.write(out);
+			out.close();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+
+	}
+
+	/**
+	 *  Gets an image descriptof from a file in the icons directory 
+	 * @param name of the file to get
+	 * @return ImageDescriptor or null if not found
+	 */
+	public static ImageDescriptor getImageDescriptor(String name) {
+		ImageDescriptor descriptor = null;
+		try {
+			URL installURL =
+			PHPEclipseSQLPlugin
+			.getDefault()
+			.getDescriptor()
+			.getInstallURL();
+			URL url = new URL(installURL, "icons/" + name);
+			descriptor = ImageDescriptor.createFromURL(url);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return descriptor;
+	}
+	public static Image getImage(String name) {
+		return getImageDescriptor(name).createImage();
+	}
+
+	public void dispose() throws CoreException {
+	}
+
+	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,
+									  "phpeclipse.sql.background.color",
+									  BACKGROUND);
+		PreferenceConverter.setDefault(
+									  store,
+									  "phpeclipse.sql.text.color",
+									  DEFAULT);
+		PreferenceConverter.setDefault(
+									  store,
+									  "phpeclipse.sql.keyword.color",
+									  KEYWORD);
+		PreferenceConverter.setDefault(
+									  store,
+									  "phpeclipse.sql.comment.color",
+									  COMMENT);
+		PreferenceConverter.setDefault(
+									  store,
+									  "phpeclipse.sql.string.color",
+									  STRING);
+		PreferenceConverter.setDefault(
+									  store,
+									  "phpeclipse.sql.numeric.color",
+									  NUMERIC);
+		getPreferenceStore().setDefault("phpeclipse.sql.text.bold", false);
+		getPreferenceStore().setDefault("phpeclipse.sql.keyword.bold", true);
+		getPreferenceStore().setDefault("phpeclipse.sql.string.bold", false);
+		getPreferenceStore().setDefault("phpeclipse.sql.comment.bold", false);
+		getPreferenceStore().setDefault("phpeclipse.sql.numeric.bold", false);
+		PreferenceConverter.setDefault(getPreferenceStore(), "phpeclipsesql.font", (FontData) null); //$NON-NLS-1$
+	}
+
+	public boolean showView(String view) {
+		IWorkbench workbench = getWorkbench();
+		IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
+		IWorkbenchPage page = window.getActivePage();
+		IViewPart viewPart = null;
+		try {
+			viewPart = page.showView(view);
+		} catch (PartInitException e) {
+			e.printStackTrace();
+			return false;
+		}
+
+		getPreferenceStore().setDefault(
+									   "phpeclipse.sql.select.template",
+									   "$results = mysql_query(\"SELECT {0} FROM {1} WHERE {2} \");");
+
+		getPreferenceStore().setDefault(
+									   "phpeclipse.sql.insert.template",
+									   "$results = mysql_query(\"INSERT INTO {0} ({1}) VALUES {2} \");");
+
+		getPreferenceStore().setDefault(
+									   "phpeclipse.sql.update.template",
+									   "$results = mysql_query(\"UPDATE {0} SET {1} WHERE {2} \");");
+
+		getPreferenceStore().setDefault(
+									   "phpeclipse.sql.delete.template",
+									   "$results = mysql_query(\"DELETE FROM {0} WHERE {1} \");");
+
+		getPreferenceStore().setDefault(
+									   "phpeclipse.sql.username.connect",
+									   "root");
+
+		getPreferenceStore().setDefault(
+									   "phpeclipse.sql.connect.connect",
+									   "jdbc:mysql://localhost/test");
+
+		getPreferenceStore().setDefault(
+									   "phpeclipse.sql.driver.connect",
+									   "com.mysql.jdbc.Driver");
+
+		getPreferenceStore().setDefault("phpeclipse.sql.type.connect", "MySQL");
+
+		getPreferenceStore().setDefault(
+									   "phpeclipse.sql.filename.connect",
+									   "C:\\apache\\mysql\\lib\\mysql-connector-java-2.0.14-bin.jar");
+
+		PreferenceConverter.setDefault(
+									  getPreferenceStore(),
+									  "phpeclipse.sql.font",
+									  (FontData) null);
+		return(viewPart != null);
+	}
 
 }
 class PHPSQLSaveParticipant implements ISaveParticipant, IConstants {
-  /**
-   * @see org.eclipse.core.resources.ISaveParticipant#doneSaving(ISaveContext)
-   */
-  public void doneSaving(ISaveContext context) {
-  }
-
-  /**
-   * @see org.eclipse.core.resources.ISaveParticipant#prepareToSave(ISaveContext)
-   */
-  public void prepareToSave(ISaveContext context) throws CoreException {
-  }
-
-  /**
-   * @see org.eclipse.core.resources.ISaveParticipant#rollback(ISaveContext)
-   */
-  public void rollback(ISaveContext context) {
-  }
-
-  /**
-   * @see org.eclipse.core.resources.ISaveParticipant#saving(ISaveContext)
-   */
-  public void saving(ISaveContext context) throws CoreException {
-    switch (context.getKind()) {
-      case ISaveContext.FULL_SAVE :
-        PHPEclipseSQLPlugin sqlPluginInstance =
-          PHPEclipseSQLPlugin.getDefault();
-        // save the plug in state 
-        if (BookmarkContentProvider.getInstance().hasChanged()) {
-          int saveNumber = context.getSaveNumber();
-          String saveFileName = "save " + Integer.toString(saveNumber);
-          File f =
-            sqlPluginInstance.getStateLocation().append(saveFileName).toFile();
-          // if we fail to write, an exception is thrown and we do not update the path 
-          sqlPluginInstance.writeImportantState(f);
-          context.map(new Path("save"), new Path(saveFileName));
-          context.needSaveNumber();
-        } else {
-          if (DEBUG) {
-            System.out.println("Not saving unchanged bookmarks");
-          }
-        }
-        break;
-      case ISaveContext.PROJECT_SAVE :
-        // get the project related to this save operation 
-        //IProject project = context.getProject(); 
-        // save its information, if necessary 
-        break;
-      case ISaveContext.SNAPSHOT :
-        // This operation needs to be really fast because 
-        // snapshots can be requested frequently by the 
-        // workspace. 
-        break;
-    }
-  }
+	/**
+	 * @see org.eclipse.core.resources.ISaveParticipant#doneSaving(ISaveContext)
+	 */
+	public void doneSaving(ISaveContext context) {
+	}
+
+	/**
+	 * @see org.eclipse.core.resources.ISaveParticipant#prepareToSave(ISaveContext)
+	 */
+	public void prepareToSave(ISaveContext context) throws CoreException {
+	}
+
+	/**
+	 * @see org.eclipse.core.resources.ISaveParticipant#rollback(ISaveContext)
+	 */
+	public void rollback(ISaveContext context) {
+	}
+
+	/**
+	 * @see org.eclipse.core.resources.ISaveParticipant#saving(ISaveContext)
+	 */
+	public void saving(ISaveContext context) throws CoreException {
+		switch (context.getKind()) {
+		case ISaveContext.FULL_SAVE :
+			PHPEclipseSQLPlugin sqlPluginInstance =
+			PHPEclipseSQLPlugin.getDefault();
+			// save the plug in state 
+			if (BookmarkContentProvider.getInstance().hasChanged()) {
+				int saveNumber = context.getSaveNumber();
+				String saveFileName =
+				"save " + Integer.toString(saveNumber);
+				File f =
+				sqlPluginInstance
+				.getStateLocation()
+				.append(saveFileName)
+				.toFile();
+				// if we fail to write, an exception is thrown and we do not update the path 
+				sqlPluginInstance.writeImportantState(f);
+				context.map(new Path("save"), new Path(saveFileName));
+				context.needSaveNumber();
+			} else {
+				if (DEBUG) {
+					System.out.println("Not saving unchanged bookmarks");
+				}
+			}
+			break;
+		case ISaveContext.PROJECT_SAVE :
+			// get the project related to this save operation 
+			//IProject project = context.getProject(); 
+			// save its information, if necessary 
+			break;
+		case ISaveContext.SNAPSHOT :
+			// This operation needs to be really fast because 
+			// snapshots can be requested frequently by the 
+			// workspace. 
+			break;
+		}
+	}
 }
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/PHPEclipseSQLResources.properties b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/PHPEclipseSQLResources.properties
index 1959397..a347ea8 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/PHPEclipseSQLResources.properties
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/PHPEclipseSQLResources.properties
@@ -7,14 +7,24 @@ bookmarkview.deleteBookmark = Delete Bookmark...
 bookmarkview.refresh = Refresh
 bookmarkview.viewTable = View Table
 bookmarkview.viewTableDetails = View Table Details
+bookmarkview.exportXML = Export XML
 bookmarkview.nextSequence = Next Sequence Value
 bookmarkview.noSequence = Database type does not support sequences
 bookmarkview.noViews = Database type does not support views
 bookmarkview.noTables = Database type does not support tables
+bookmarkview.retrieveTableData = Retrieving table data...
+bookmarkview.retrieveViewData = Retrieving view data...
+bookmarkview.retrieveSeqData = Retrieving sequence data...
+bookmarkview.done = Done
+bookmarkview.metaDataError = Error while retrieving metadata
+bookmarkview.confirm = Are you sure you want to delete bookmark 
+bookmarkview.disconnect = Disconnecting from 
 sqlqueryview.executeQuery = Execute Query
 sqlqueryview.importQuery = Import Query
 sqlqueryview.exportQuery = Export Query
+sqlqueryview.generatePHP = Generate Query as PHP
 sqlqueryview.clear = Clear
+sqlqueryview.commit = Commit
 sqlqueryview.copy = Copy
 sqlqueryview.paste = Paste
 sqlqueryview.done = Done
@@ -25,27 +35,17 @@ tableview.close = Close Table
 tableview.update = Update...
 tableview.insert = Insert...
 tableview.delete = Delete...
-tableview.phpselect = PHP Select...
-tableview.phpupdate = PHP Update...
-tableview.phpinsert = PHP Insert...
-tableview.phpdelete = PHP Delete...
 tableview.filterSort = Sort or Filter Table...
 tableview.showAll = Toggle Show All Table Rows
 tableview.defaultEncoding = Set Default Encoding
 tableview.UTF8Encoding = Set UTF-8
 tableview.UTF16Encoding = Set UTF-16
-bookmarkview.retrieveTableData = Retrieving table data...
-bookmarkview.retrieveViewData = Retrieving view data...
-bookmarkview.retrieveSeqData = Retrieving sequence data...
-bookmarkview.done = Done
-bookmarkview.metaDataError = Error while retrieving metadata
-bookmarkview.deleteBookmark = Delete Bookmark
-bookmarkview.confirm = Are you sure you want to delete bookmark 
-bookmarkview.disconnect = Disconnecting from 
 filedialog.preferences = Preferences (*.ini)
 filedialog.allfiles = All Files (*.*)
 filedialog.sqlFiles = SQL query (*.sql)
 filedialog.ddlFiles = SQL query (*.ddl)
+filedialog.xmlFiles = XML files (*.xml)
+filedialog.phpFiles = PHP files (*.php)
 adapters.generic = Generic JDBC
 adapters.oracle = Oracle
 adapters.postgres = Postgres
@@ -53,5 +53,153 @@ adapters.mysql = MySQL
 adapters.db2 = DB2
 adapters.db2as400 = DB2 for AS400
 adapters.adabasd = Adabas-D
-
-sqlconsole.viewopeningproblem = Problems while opening the PHP source console
\ No newline at end of file
+PHPEclipseSQLPlugin.save_2=save
+PHPEclipseSQLPlugin.icons_3=icons/
+PHPEclipseSQLPlugin.PHPEclipseSQL.keyword.color_6=PHPEclipseSQL.keyword.color
+PHPEclipseSQLPlugin.PHPEclipseSQL.string.bold_12=PHPEclipseSQL.string.bold
+PHPEclipseSQLPlugin.save_espace=save 
+PHPEclipseSQLPlugin.Not_saving_unchanged_bookmarks_18=Not saving unchanged bookmarks
+PHPEclipseSQLPlugin.iconsDir=icons/
+PHPEclipseSQLPlugin.saveDir=save
+PHPEclipseSQLPlugin.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
+ExecuteAction.Done=Done
+ExecuteAction.RowUpdated=\ rows updated, 
+ExecuteAction.ResultsDisplayed=\ results displayed, 
+ExportXMLAction.XMLExporting=XML struct: Exporting to file: 
+ExportXMLAction.Metadata=Metadata
+ExportXMLAction.Author=Author
+ExportXMLAction.PHPEclipseSQL=PHPEclipseSQL
+ExportXMLAction.Version=Version
+ExportXMLAction.XMLVersionNumber=0.4
+ExportXMLAction.Table=TABLE
+ExportXMLAction.View=VIEV
+ExportXMLAction.TableName=NAME
+ExportXMLAction.BookmarkName=BOOKMARK
+ExportXMLAction.Subsets=SUBSETS
+ExportXMLAction.Subset=SUBSET
+ExportXMLAction.SubsetName=NAME
+ExportXMLAction.SavedData=SAVED_DATA
+ExportXMLAction.TableColumn=COLUMN
+ExportXMLAction.ColumnName=NAME
+ExportXMLAction.UNKNOWN=UNKNOWN
+ExportXMLAction.NO=NO
+ExportXMLAction.YES=YES
+ExportXMLAction.ColumnNullable=Nullable
+ExportXMLAction.ColumnAutoIncrement=Auto_Increment
+ExportXMLAction.PrimaryKey=Primary_Key
+ExportXMLAction.PKName=Name
+ExportXMLAction.PKColumn=Column
+ExportXMLAction.PKColumnName=Name
+ExportXMLAction.PKSequence=Sequence
+ExportXMLAction.ForeignKey=Foreign_Key
+ExportXMLAction.FKName=Name
+ExportXMLAction.FKType=Type
+ExportXMLAction.FKImported=Imported
+ExportXMLAction.FKExported=Exported
+ExportXMLAction.FKCascadeUpdate=Cascade_Update
+ExportXMLAction.FKCascadeDelete=Cascade_Delete
+ExportXMLAction.FKColumn=Column
+ExportXMLAction.FKSequence=Sequence
+ExportXMLAction.FKPrimarySchema=Primary_Schema
+ExportXMLAction.FKPrimaryTable=Primary_Table
+ExportXMLAction.FKPrimaryColumn=Primary_Column
+ExportXMLAction.FKForeignSchema=Foreign_Schema
+ExportXMLAction.FKForeignTable=Foreign_Table
+ExportXMLAction.FKForeignColumn=Foreign_Column
+SetSchemaAction.SetSchema=Set Schema
+SetSchemaAction.PleaseEnterName=Please enter the name of new schema:
+MetaDataKey=METADATA
+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.PHPEclipseSQL.keyword.color_26=PHPEclipseSQL.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: 
+BookmarkLabelProvider.TablePrefix=T 
+BookmarkLabelProvider.ViewPrefix=V 
+BookmarkLabelProvider.SequencePrefix=S 
+ExportXMLAction.CannotOpenFile=Cannot open file
+ExportXMLAction.CannotOpenFileMessage=Cannot open file: 
+ExportXMLAction.CannotOpenFileExplain=\nProbably is\'t read-only or owned by another user.
+DeleteColumnAction.DeleteColumns=Delete Columns...
+DeleteColumnAction.ConfirmDeleteColumns=Are you sure you want to delete the selected columns? 
+DeleteObjectAction.DeleteSubset=Delete Subset...
+DeleteObjectAction.ConfirmDeleteSubset=Are you sure you want to delete the selected subset ?
+DeleteObjectAction.DeleteItems=Delete items...
+DeleteObjectAction.ConfirmDeleteItems=Are you sure you want to delete the selected tables/views? 
+DeleteSubsetAction.DeleteSubset=Delete Subset...
+DeleteSubsetAction.ConfirmDeleteSubset=Are you sure you want to delete the selected subset?
+NewSubsetAction.CreatingNewSubset=Creating new subset..
+NewSubsetAction.NameOfNewSubset=Name of the new Subset
+NewSubsetAction.PleaseEnterName=Please enter name
+OracleAdapter.._3=.
+BookmarkView.ShowTableSizes=Show Table Sizes
+BookmarkView.Paste=Paste
+BookmarkView.Copy=Copy
+BookmarkView.CopyOf=Copy of 
+SQLLogView.ClearLog=Clear Log
+SQLQueryView.Commit=Commit
+SQLQueryView.RollBack=RollBack
+SQLQueryView.AutoCommit=AutoCommit
+SubsetView.Paste=Paste
+SubsetView.Delete=Delete
+SubsetView.CreatesANewEmptySubset=Creates a new empty subset
+SubsetView.DeletesTheSelectedColumns=Deletes the selected column
+SubsetView.DeletesTheSelectedObject=Deletes the selected object
+SubsetView.DeletesTheSelectedSubset=Deletes the selected subset
+TableView.FilterAndSort=Filter and Sort
+TableView.UpdateRow=Update Row
+TableView.InsertRow=Insert Row
+TableView.DeleteRow=Delete Row
+TableAdapter.to=\ to 
+TableAdapter.of=\ of 
+TableAdapter.full=\ (FULL)
+BookmarkWizard.NewBookmark=New Bookmark
+BookmarkWizard.Testing=Testing...
+BookmarkWizard.JarFiles=Jar Files (*.jar)
+BookmarkWizard.ZipFiles=Zip Files (*.zip)
+BookmarkWizard.AllFiles=All Files (*.*)
+BookmarkWizard.BookmarkNameAst=*Bookmark Name
+BookmarkWizard.UsernameAst=*Username
+BookmarkWizard.PasswordAst=*Password
+BookmarkWizard.Schema=Schema (optional)
+BookmarkWizard.ConnectAst=*Connect
+BookmarkWizard.DriverAst=*Driver
+BookmarkWizard.TypeAst=*Type
+BookmarkWizard.DriverFilenameAst=*Driver Filename
+BookmarkWizard.Browse=Browse...
+DeleteRowPage.ColumnName=Column Name
+DeleteRowPage.Value=Value
+DeleteRowPage.IncludeIn=Include in?
+DeleteRowPage.WhereClause=Where clause
+DeleteRowPage.UpdatingQuery=Updating query
+DeleteRowPage.WarningNoWhere=Warning: no \"where clause\" columns selected, all rows will be deleted
+InsertRowPage.ColumnName=Column Name
+InsertRowPage.Value=Value
+UpdateRowPage.ColumnName=Column Name
+UpdateRowPage.OldValue=Old Value
+UpdateRowPage.NewValue=New Value
+UpdateRowPage._13=
+UpdateRowPage.SetValue=Set Value
+ConnectAction.ConnectingTo=Connecting to 
+ConnectAction.ErrorConnecting=Error while connecting to 
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/CloseTableAction.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/CloseTableAction.java
index 6296a13..c2e5e0d 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/CloseTableAction.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/CloseTableAction.java
@@ -11,10 +11,6 @@ import net.sourceforge.phpdt.sql.view.TableView;
 /**
  * @author root
  *
- * To change this generated comment edit the template variable "typecomment":
- * Window>Preferences>Java>Templates.
- * To enable and disable the creation of type comments go to
- * Window>Preferences>Java>Code Generation.
  */
 public class CloseTableAction extends Action implements IViewActionDelegate {
 	TableView view;
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ConnectAction.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ConnectAction.java
index e58acec..f104552 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ConnectAction.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ConnectAction.java
@@ -1,5 +1,7 @@
 package net.sourceforge.phpdt.sql.actions;
 
+import java.sql.Connection;
+
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.viewers.ISelection;
@@ -7,13 +9,11 @@ import org.eclipse.ui.IViewActionDelegate;
 import org.eclipse.ui.IViewPart;
 import org.eclipse.ui.IWorkbenchPart;
 
-import net.sourceforge.phpdt.sql.sql.MultiSQLServer;
-import net.sourceforge.phpdt.sql.sql.SQLHelper;
+import net.sourceforge.phpdt.sql.Messages;
 import net.sourceforge.phpdt.sql.view.BookmarkView;
 import net.sourceforge.phpdt.sql.view.bookmark.BookmarkNode;
 
 public class ConnectAction extends Action implements IViewActionDelegate {
-	private SQLHelper helper = new SQLHelper();
 	private BookmarkView view;
 	/**
 	 * Constructor for Action1.
@@ -52,15 +52,14 @@ public class ConnectAction extends Action implements IViewActionDelegate {
 	 * @see org.eclipse.jface.action.IAction#run()
 	 */
 	public void run() {
-		view.disconnect();
 		BookmarkNode current = view.getCurrentBookmark();
-		view.setStatus("Connecting to " + current.getName() + "..."); //$NON-NLS-1$ //$NON-NLS-2$
-		boolean status = MultiSQLServer.getInstance().connect(current);
-		if (status) {
+		view.setStatus(Messages.getString("ConnectAction.ConnectingTo") + current.getName() + "...");  //$NON-NLS-2$ //$NON-NLS-1$
+		Connection con = current.getConnection();
+		if (con != null) {
 			view.refreshBookmarkData();
 			view.expandCurrent(current);
 		} else {
-			view.setStatus("Error while connecting to " + current.getName()); //$NON-NLS-1$
+			view.setStatus(Messages.getString("ConnectAction.ErrorConnecting") + current.getName());  //$NON-NLS-1$
 		}
 	}
 }
\ No newline at end of file
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/DeleteAllRowsAction.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/DeleteAllRowsAction.java
new file mode 100644
index 0000000..357ce3a
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/DeleteAllRowsAction.java
@@ -0,0 +1,60 @@
+package net.sourceforge.phpdt.sql.actions;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+
+import net.sourceforge.phpdt.sql.Messages;
+import net.sourceforge.phpdt.sql.model.Table;
+import net.sourceforge.phpdt.sql.view.BookmarkView;
+import net.sourceforge.phpdt.sql.view.bookmark.TableNode;
+
+/**
+ * @author root
+ *
+ */
+public class DeleteAllRowsAction extends Action implements IViewActionDelegate  {
+    BookmarkView view;
+    
+	/**
+	 * @see org.eclipse.ui.IViewActionDelegate#init(IViewPart)
+	 */
+	public void init(IViewPart view) {
+		this.view = (BookmarkView) view;
+	}
+
+	/**
+	 * @see org.eclipse.ui.IActionDelegate#run(IAction)
+	 */
+	public void run(IAction action) {
+		run();
+	}
+	
+	public void run() {
+		Object selection = view.getCurrent();
+		if (selection instanceof TableNode) {
+			TableNode node = (TableNode) selection;
+			if (node != null) {
+                Table table = (Table) node.getTable();
+System.out.println("==>" + table.getQualifiedName());
+				boolean flag = MessageDialog.openConfirm(
+                    view.getSite().getShell(), 
+                    Messages.getString("bookmarkview.deleteAllRows")  + table.getQualifiedName(), 
+                    Messages.getString("bookmarkview.confirmDeleteAllRows"));
+				if (flag) {
+					table.deleteAllRows();
+				}
+			}
+		}
+	}
+
+	/**
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(IAction, ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+	}
+
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/DeleteBookmarkAction.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/DeleteBookmarkAction.java
index 26bc204..964730d 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/DeleteBookmarkAction.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/DeleteBookmarkAction.java
@@ -7,16 +7,13 @@ import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.ui.IViewActionDelegate;
 import org.eclipse.ui.IViewPart;
 
+import net.sourceforge.phpdt.sql.Messages;
 import net.sourceforge.phpdt.sql.view.BookmarkView;
 import net.sourceforge.phpdt.sql.view.bookmark.BookmarkNode;
 
 /**
  * @author root
  *
- * To change this generated comment edit the template variable "typecomment":
- * Window>Preferences>Java>Templates.
- * To enable and disable the creation of type comments go to
- * Window>Preferences>Java>Code Generation.
  */
 public class DeleteBookmarkAction extends Action implements IViewActionDelegate  {
     BookmarkView view;
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/DeleteColumnAction.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/DeleteColumnAction.java
new file mode 100644
index 0000000..350560a
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/DeleteColumnAction.java
@@ -0,0 +1,63 @@
+package net.sourceforge.phpdt.sql.actions;
+
+import java.util.Iterator;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+
+import net.sourceforge.phpdt.sql.Messages;
+import net.sourceforge.phpdt.sql.view.SubsetView;
+import net.sourceforge.phpdt.sql.view.bookmark.ColumnMetaData;
+
+/**
+ * Deletes the selected columns from the Subset items (Tables)
+ * @author root
+ *
+ */
+public class DeleteColumnAction extends Action implements IViewActionDelegate  {
+   	SubsetView view;
+	/**
+	 * @see org.eclipse.ui.IViewActionDelegate#init(IViewPart)
+	 */
+	public void init(IViewPart view) {
+		this.view = (SubsetView) view;
+	}
+
+	/**
+	 * @see org.eclipse.ui.IActionDelegate#run(IAction)
+	 */
+	public void run(IAction action) {
+		run();
+	}
+	
+	public void run() {
+		StructuredSelection selection = view.getSelection();
+		Iterator iter = selection.iterator();
+		if (! MessageDialog.openConfirm(view.getSite().getShell(), 
+						Messages.getString("DeleteColumnAction.DeleteColumns"),  //$NON-NLS-1$
+						Messages.getString("DeleteColumnAction.ConfirmDeleteColumns") )) //$NON-NLS-1$
+			return;
+		
+		while (iter.hasNext()) {
+			Object current = iter.next();
+			if (current instanceof ColumnMetaData) {
+				ColumnMetaData column = (ColumnMetaData) current;
+				if (column != null) {
+						view.deleteColumn(column);
+				}
+			}
+		}
+	}
+
+	/**
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(IAction, ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+	}
+
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/DeleteObjectAction.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/DeleteObjectAction.java
new file mode 100644
index 0000000..41b1ff0
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/DeleteObjectAction.java
@@ -0,0 +1,77 @@
+package net.sourceforge.phpdt.sql.actions;
+
+import java.util.Iterator;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+
+import net.sourceforge.phpdt.sql.Messages;
+import net.sourceforge.phpdt.sql.view.SubsetView;
+import net.sourceforge.phpdt.sql.view.bookmark.ObjectNode;
+import net.sourceforge.phpdt.sql.view.bookmark.SubsetNode;
+
+/**
+ * Deletes an entire object (Table) from the SubsetView
+ * @author root
+ *
+ */
+public class DeleteObjectAction extends Action implements IViewActionDelegate  {
+   	SubsetView view;
+	/**
+	 * @see org.eclipse.ui.IViewActionDelegate#init(IViewPart)
+	 */
+	public void init(IViewPart view) {
+		this.view = (SubsetView) view;
+	}
+
+	/**
+	 * @see org.eclipse.ui.IActionDelegate#run(IAction)
+	 */
+	public void run(IAction action) {
+		run();
+	}
+	
+	public void run() {
+		Object selection = view.getCurrent();
+		if (selection instanceof SubsetNode) {
+			SubsetNode node = (SubsetNode) selection;
+			if (node != null) {
+				boolean flag = MessageDialog.openConfirm(view.getSite().getShell(), 
+								Messages.getString("DeleteObjectAction.DeleteSubset"),  //$NON-NLS-1$
+								Messages.getString("DeleteObjectAction.ConfirmDeleteSubset") + node.getName()); //$NON-NLS-1$
+				if (flag) {
+					view.deleteCurrent();
+				}
+			}
+		} else if (selection instanceof ObjectNode) {
+			StructuredSelection allSelected = view.getSelection();
+			Iterator iter = allSelected.iterator();
+			if (! MessageDialog.openConfirm(view.getSite().getShell(), 
+							Messages.getString("DeleteObjectAction.DeleteItems"),  //$NON-NLS-1$
+							Messages.getString("DeleteObjectAction.ConfirmDeleteItems") )) //$NON-NLS-1$
+				return;
+		
+			while (iter.hasNext()) {
+				Object current = iter.next();
+				if (current instanceof ObjectNode) {
+					ObjectNode node = (ObjectNode) current;
+					if (node != null) {
+							view.deleteObject(node);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(IAction, ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+	}
+
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/DeleteSubsetAction.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/DeleteSubsetAction.java
new file mode 100644
index 0000000..e93952d
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/DeleteSubsetAction.java
@@ -0,0 +1,55 @@
+package net.sourceforge.phpdt.sql.actions;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+
+import net.sourceforge.phpdt.sql.Messages;
+import net.sourceforge.phpdt.sql.view.SubsetView;
+import net.sourceforge.phpdt.sql.view.bookmark.SubsetNode;
+
+/**
+ * @author root
+ *	Deletes a complete subset from the subset view
+ */
+public class DeleteSubsetAction extends Action implements IViewActionDelegate  {
+   	SubsetView view;
+	/**
+	 * @see org.eclipse.ui.IViewActionDelegate#init(IViewPart)
+	 */
+	public void init(IViewPart view) {
+		this.view = (SubsetView) view;
+	}
+
+	/**
+	 * @see org.eclipse.ui.IActionDelegate#run(IAction)
+	 */
+	public void run(IAction action) {
+		run();
+	}
+	
+	public void run() {
+		Object selection = view.getCurrent();
+		if (selection instanceof SubsetNode) {
+			SubsetNode node = (SubsetNode) selection;
+			if (node != null) {
+				boolean flag = MessageDialog.openConfirm(view.getSite().getShell(), 
+								Messages.getString("DeleteSubsetAction.DeleteSubset"),  //$NON-NLS-1$
+								Messages.getString("DeleteSubsetAction.ConfirmDeleteSubset") + node.getName()); //$NON-NLS-1$
+				if (flag) {
+					view.deleteCurrent();
+				}
+			}
+		}
+	}
+
+	/**
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(IAction, ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+	}
+
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/DisconnectAction.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/DisconnectAction.java
index b806dc2..2f7922a 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/DisconnectAction.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/DisconnectAction.java
@@ -10,11 +10,7 @@ import net.sourceforge.phpdt.sql.view.BookmarkView;
 
 /**
  * @author root
- *
- * To change this generated comment edit the template variable "typecomment":
- * Window>Preferences>Java>Templates.
- * To enable and disable the creation of type comments go to
- * Window>Preferences>Java>Code Generation.
+ *	Disconnects from the database
  */
 public class DisconnectAction extends Action implements IViewActionDelegate {
 	BookmarkView view;
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/EditBookmarkAction.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/EditBookmarkAction.java
index 7d204fe..901fc34 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/EditBookmarkAction.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/EditBookmarkAction.java
@@ -1,10 +1,5 @@
 package net.sourceforge.phpdt.sql.actions;
 
-import net.sourceforge.phpdt.sql.IConstants;
-import net.sourceforge.phpdt.sql.view.BookmarkView;
-import net.sourceforge.phpdt.sql.view.bookmark.BookmarkNode;
-import net.sourceforge.phpdt.sql.wizards.BookmarkWizard;
-
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.viewers.ISelection;
@@ -12,15 +7,16 @@ import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.ui.IViewActionDelegate;
 import org.eclipse.ui.IViewPart;
 
+import net.sourceforge.phpdt.sql.view.BookmarkView;
+import net.sourceforge.phpdt.sql.view.bookmark.BookmarkNode;
+import net.sourceforge.phpdt.sql.wizards.BookmarkWizard;
+
 /**
  * @author root
  *
- * To change this generated comment edit the template variable "typecomment":
- * Window>Preferences>Java>Templates.
- * To enable and disable the creation of type comments go to
- * Window>Preferences>Java>Code Generation.
+ *	Edits a bookmark
  */
-public class EditBookmarkAction extends Action  implements IViewActionDelegate, IConstants {
+public class EditBookmarkAction extends Action  implements IViewActionDelegate {
    IViewPart view;
 	/**
 	 * @see org.eclipse.ui.IViewActionDelegate#init(IViewPart)
@@ -37,9 +33,7 @@ public class EditBookmarkAction extends Action  implements IViewActionDelegate,
 		run();
 	}
 	public void run() {
-    if (DEBUG) {
-		System.out.println("Wizard..");
-    }
+		System.out.println("Wizard.."); //$NON-NLS-1$
 		BookmarkWizard wizard = new BookmarkWizard();
 		
 		BookmarkNode b = BookmarkView.getInstance().getCurrentBookmark();
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ExecuteAction.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ExecuteAction.java
index cac0de1..9e1294b 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ExecuteAction.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ExecuteAction.java
@@ -1,122 +1,103 @@
 package net.sourceforge.phpdt.sql.actions;
 
+import java.sql.Connection;
 import java.util.Vector;
 
-import net.sourceforge.phpdt.sql.IConstants;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+
+import net.sourceforge.phpdt.sql.Messages;
 import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
 import net.sourceforge.phpdt.sql.sql.MultiSQLServer;
 import net.sourceforge.phpdt.sql.sql.SQLParser;
 import net.sourceforge.phpdt.sql.sql.SQLResults;
+import net.sourceforge.phpdt.sql.view.BookmarkView;
 import net.sourceforge.phpdt.sql.view.QueryHistoryView;
 import net.sourceforge.phpdt.sql.view.SQLQueryView;
 import net.sourceforge.phpdt.sql.view.TableView;
+import net.sourceforge.phpdt.sql.view.bookmark.BookmarkNode;
 import net.sourceforge.phpdt.sql.view.tableview.DefaultSizes;
 
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.ui.IViewActionDelegate;
-import org.eclipse.ui.IViewPart;
-
-public class ExecuteAction
-  extends Action
-  implements IViewActionDelegate, IConstants {
-  SQLQueryView view;
-  boolean flag = false;
-  String execute1 = "Executing Query...";
-  String execute2 = "Executing Query..";
-  public void init(IViewPart view) {
-    this.view = (SQLQueryView) view;
-  }
+/**
+ * @author panic
+ *
+ *	Executes a query from the QueryView
+ */
+public class ExecuteAction extends Action implements IViewActionDelegate {
+	SQLQueryView view;
+	boolean flag = false;
+	String execute1 = Messages.getString("ExecuteAction.Executing_Query3"); //$NON-NLS-1$
+	String execute2 = Messages.getString("ExecuteAction.Executing_Query2"); //$NON-NLS-1$
+	public void init(IViewPart view) {
+		this.view = (SQLQueryView) view;
+	}
 
-  public void run(IAction action) {
-    run();
-  }
+	public void run(IAction action) {
+		run();
+	}
 
-  public void run() {
-    view.setStatus(execute1);
-    MultiSQLServer server = MultiSQLServer.getInstance();
-    view.setStatus("Parsing sql script...");
-    Vector queries = new Vector();
-    String viewQuery = view.getQuery();
-    queries = SQLParser.parse(viewQuery);
-    for (int i = 0; i < queries.size(); i++) {
-      String query = (String) queries.elementAt(i);
-      if (DEBUG) {
-        System.out.println(query);
-      }
-    }
-    int resultCount = 0;
-    int resultUpdateCount = 0;
-    int errorCount = 0;
-    int resultsDisplayed = 0;
-    for (int i = 0; i < queries.size(); i++) {
-      if (flag) {
-        view.setStatus(execute1);
-      } else {
-        view.setStatus(execute2);
-      }
-      String query = (String) queries.elementAt(i);
-      if (DEBUG) {
-        System.out.println(">" + query + "<");
-      }
-      if (!query.equals("")) {
-        SQLResults results =
-          server.execute(
-            query,
-            1,
-            DefaultSizes.PAGE_SIZE,
-            DefaultSizes.MAX_COLUMN_SIZE);
-        resultCount++;
-        if (results.isResultSet()) {
-          TableView.getInstance().loadQuery(results);
-          resultsDisplayed++;
-        } else {
-          int count = results.getUpdateCount();
-          if (count > 0) {
-            resultUpdateCount += results.getUpdateCount();
-          }
-        }
-        if (results.isError()) {
-          errorCount++;
-        }
-      }
-      flag = !flag;
-      view.setProgress(i + 1, queries.size());
-    }
-    if (errorCount > 0) {
-      Image error = PHPEclipseSQLPlugin.getImage("stop.gif");
-      view.setStatus(
-        error,
-        "Done ("
-          + resultCount
-          + " queries executed, "
-          + resultUpdateCount
-          + " rows updated, "
-          + resultsDisplayed
-          + " results displayed, "
-          + errorCount
-          + " errors)");
-    } else {
-      Image success = PHPEclipseSQLPlugin.getImage("success.gif");
-      view.setStatus(
-        success,
-        "Done ("
-          + resultCount
-          + " queries executed, "
-          + resultUpdateCount
-          + " rows updated, "
-          + resultsDisplayed
-          + " results displayed, "
-          + errorCount
-          + " errors)");
-    }
-    view.setProgress(0, 1);
-    QueryHistoryView history = QueryHistoryView.getInstance();
-    history.addQuery(viewQuery);
-  }
+	public void run() {
+		view.setStatus(execute1);
+		MultiSQLServer server = MultiSQLServer.getInstance();
+	    view.setStatus(Messages.getString("ExecuteAction.Parsing_sql_script3")); //$NON-NLS-1$
+	    Vector queries = new Vector();
+	    String viewQuery = view.getQuery();
+		queries = SQLParser.parse(viewQuery);
+		for (int i = 0; i < queries.size(); i++) {
+			String query = (String) queries.elementAt(i);
+			System.out.println(query);
+		}
+		int resultCount = 0;
+		int resultUpdateCount = 0;
+		int errorCount = 0;
+		int resultsDisplayed = 0;
+		for (int i = 0; i < queries.size(); i++) {
+			if (flag) {
+				view.setStatus(execute1);
+			} else {
+				view.setStatus(execute2);
+			}
+		   BookmarkNode current = BookmarkView.getInstance().getCurrentBookmark();
+		   Connection con = current.getConnection();
+		   
+		   String query = (String) queries.elementAt(i);
+		   System.out.println(">" + query + "<"); //$NON-NLS-1$ //$NON-NLS-2$
+		   if (con != null && !query.equals("")) { //$NON-NLS-1$
+			   SQLResults results = server.execute(con, query, 1, DefaultSizes.PAGE_SIZE, DefaultSizes.MAX_COLUMN_SIZE);
+			   resultCount++;
+			   if (results.isResultSet()) {
+				 PHPEclipseSQLPlugin phpesqlPluginInstance = PHPEclipseSQLPlugin.getDefault();
+				 phpesqlPluginInstance.showView("net.sourceforge.phpdt.sql.view.tableview"); //$NON-NLS-1$
+			   	 TableView.getInstance().loadQuery(current, results);
+			   	 resultsDisplayed++;
+			   } else {
+			   	 int count = results.getUpdateCount();
+			   	 if (count > 0) {
+			   	 	resultUpdateCount += results.getUpdateCount();
+			   	 }
+			   }
+			   if (results.isError()) {
+			   	errorCount++;
+			   }
+		   }
+		   flag = !flag;
+		   view.setProgress(i + 1, queries.size());
+	    }
+		Image statImage = PHPEclipseSQLPlugin.getImage((errorCount > 0) ? "stop.gif" : "success.gif"); //$NON-NLS-1$ //$NON-NLS-2$
+		view.setStatus(statImage, Messages.getString("ExecuteAction.Done") + "(" + //$NON-NLS-1$ //$NON-NLS-2$
+						resultCount + Messages.getString("ExecuteAction.QueriesExecuted") +  //$NON-NLS-1$
+						resultUpdateCount + Messages.getString("ExecuteAction.RowsUpdated") +  //$NON-NLS-1$
+						resultsDisplayed + Messages.getString("ExecuteAction.ResultsDisplayed") +  //$NON-NLS-1$
+						errorCount + Messages.getString("ExecuteAction.Errors") + ")");  //$NON-NLS-1$ //$NON-NLS-2$
+		view.setProgress(0, 1);
+		QueryHistoryView history = QueryHistoryView.getInstance();
+		if (history != null) history.addQuery(viewQuery);
+	}
 
-  public void selectionChanged(IAction action, ISelection selection) {
-  }
+	public void selectionChanged(IAction action, ISelection selection) {
+	}
 }
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ExportBookmarksAction.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ExportBookmarksAction.java
index dfaf550..b709b76 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ExportBookmarksAction.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ExportBookmarksAction.java
@@ -1,24 +1,26 @@
 package net.sourceforge.phpdt.sql.actions;
 
 import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
 
+import org.apache.crimson.tree.XmlDocument;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.FileDialog;
 import org.eclipse.ui.IViewActionDelegate;
 import org.eclipse.ui.IViewPart;
+import org.w3c.dom.Element;
 
+import net.sourceforge.phpdt.sql.Messages;
 import net.sourceforge.phpdt.sql.view.BookmarkView;
 import net.sourceforge.phpdt.sql.view.bookmark.BookmarkContentProvider;
 
 /**
  * @author root
- *
- * To change this generated comment edit the template variable "typecomment":
- * Window>Preferences>Java>Templates.
- * To enable and disable the creation of type comments go to
- * Window>Preferences>Java>Code Generation.
+ * Asks the user for a file name and saves there the bookmarks in xml format 
  */
 public class ExportBookmarksAction
 	implements IViewActionDelegate {
@@ -32,8 +34,8 @@ public class ExportBookmarksAction
 	public void init(IViewPart view) {
 		this.view = (BookmarkView) view;
 		dialog = new FileDialog(view.getSite().getShell(), SWT.SAVE);
-		dialog.setFilterExtensions(new String[]{"*.ini","*.*"}); //$NON-NLS-1$ //$NON-NLS-2$
-		dialog.setFilterNames(new String[]{Messages.getString("filedialog.preferences"),Messages.getString("filedialog.allfiles")}); //$NON-NLS-1$ //$NON-NLS-2$
+		dialog.setFilterExtensions(new String[]{"*.xml","*.*"}); //$NON-NLS-1$ //$NON-NLS-2$
+		dialog.setFilterNames(new String[]{Messages.getString("filedialog.xmlFiles"),Messages.getString("filedialog.xmlFiles")}); //$NON-NLS-1$ //$NON-NLS-2$
 	}
 
 	/**
@@ -42,8 +44,34 @@ public class ExportBookmarksAction
 	public void run(IAction action) {
 		String filename = dialog.open();
 		if (filename != null) {
-			File exportFile = new File(filename);
-			BookmarkContentProvider.getInstance().save(exportFile);
+			/*Check for the presence of a "." - either indicates an
+			 * extension has been provided or that a filename with a '.'
+			 * has been specified - if the latter, it is assumed the user
+			 * knows what they're doing - could be dangerous! :-)
+			 */
+			if (filename.indexOf(".") ==0) filename += ".xml";
+						
+			File target = new File(filename);
+			XmlDocument doc = new XmlDocument();
+			FileOutputStream out = null;
+			try {
+				out = new FileOutputStream(target);
+			} catch (FileNotFoundException e1) {
+				e1.printStackTrace();
+				return;
+			}
+			Element root = (Element) doc.appendChild(doc.createElement(Messages.getString("ExportXMLAction.SavedData"))); //$NON-NLS-1$
+		
+			BookmarkContentProvider.getInstance().exportXML(root);
+		
+			try {
+				doc.write(out);
+				out.close();
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+
+
 		}
 	}
 	
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ExportQueryAction.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ExportQueryAction.java
index c374b27..df683c3 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ExportQueryAction.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ExportQueryAction.java
@@ -14,6 +14,7 @@ import org.eclipse.swt.widgets.FileDialog;
 import org.eclipse.ui.IViewActionDelegate;
 import org.eclipse.ui.IViewPart;
 
+import net.sourceforge.phpdt.sql.Messages;
 import net.sourceforge.phpdt.sql.view.LogProxy;
 import net.sourceforge.phpdt.sql.view.SQLLogView;
 import net.sourceforge.phpdt.sql.view.SQLQueryView;
@@ -43,11 +44,17 @@ public class ExportQueryAction extends Action implements IViewActionDelegate  {
 		String filename = dialog.open();
 		if (filename != null) {
 			try {
-				File exportFile = new File(filename);
+				/*Check for the presence of a "." - either indicates an
+			 * extension has been provided or that a filename with a '.'
+			 * has been specified - if the latter, it is assumed the user
+			 * knows what they're doing - could be dangerous! :-)
+			 */
+			if (filename.indexOf(".") >0) filename += ".sql";
+			File exportFile = new File(filename);
 				FileWriter fileWriter = new FileWriter(exportFile);
 				PrintWriter writer = new PrintWriter(fileWriter);
 				String output = view.getQuery();
-				StringTokenizer tokenizer = new StringTokenizer(output, "\n");
+				StringTokenizer tokenizer = new StringTokenizer(output, "\n"); //$NON-NLS-1$
 				while (tokenizer.hasMoreElements()) {
 					String line = (String) tokenizer.nextElement();
 					writer.println(line);
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ExportXMLAction.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ExportXMLAction.java
new file mode 100644
index 0000000..43df92c
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ExportXMLAction.java
@@ -0,0 +1,168 @@
+package net.sourceforge.phpdt.sql.actions;
+
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Iterator;
+
+import org.apache.crimson.tree.XmlDocument;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+import org.w3c.dom.Element;
+
+import net.sourceforge.phpdt.sql.Messages;
+import net.sourceforge.phpdt.sql.sql.metadata.MetaDataXMLInterface;
+import net.sourceforge.phpdt.sql.sql.metadata.ObjectMetaData;
+import net.sourceforge.phpdt.sql.view.BookmarkView;
+import net.sourceforge.phpdt.sql.view.SubsetView;
+import net.sourceforge.phpdt.sql.view.bookmark.BookmarkNode;
+import net.sourceforge.phpdt.sql.view.bookmark.ObjectNode;
+import net.sourceforge.phpdt.sql.view.bookmark.SubsetNode;
+import net.sourceforge.phpdt.sql.view.bookmark.TableNode;
+import net.sourceforge.phpdt.sql.view.bookmark.TreeNode;
+import net.sourceforge.phpdt.sql.view.bookmark.ViewNode;
+
+/**
+ * @author root
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class ExportXMLAction extends Action implements IViewActionDelegate {
+	IViewPart view;
+	/**
+	 * @see org.eclipse.ui.IViewActionDelegate#init(IViewPart)
+	 */
+	public void init(IViewPart view) {
+		this.view = view;
+	}
+
+	/**
+	 * @see org.eclipse.ui.IActionDelegate#run(IAction)
+	 */
+	public void run(IAction action) {
+		run();
+	}
+		
+	public void run() {
+		
+		FileDialog dialog = new FileDialog(view.getSite().getShell(), SWT.SAVE);
+		dialog.setFilterExtensions(new String[]{"*.xml","*.*"}); //$NON-NLS-1$ //$NON-NLS-2$
+		dialog.setFilterNames(new String[]{Messages.getString("filedialog.xmlFiles"),Messages.getString("filedialog.xmlFiles")}); //$NON-NLS-1$ //$NON-NLS-2$
+		
+		String filename = dialog.open();
+		if (filename == null) return;
+		/*Check for the presence of a "." - either indicates an
+		 * extension has been provided or that a filename with a '.'
+		 * has been specified - if the latter, it is assumed the user
+		 * knows what they're doing - could be dangerous! :-)
+		 */
+		if (filename.indexOf(".") ==0) filename += ".xml";
+		File file = new File(filename);
+		System.out.println(Messages.getString("ExportXMLAction.XMLExporting") + file); //$NON-NLS-1$
+		FileOutputStream out = null;
+		try {
+			out = new FileOutputStream(file);
+		} catch (FileNotFoundException e1) {
+			MessageDialog.openConfirm(view.getSite().getShell(), Messages.getString("ExportXMLAction.CannotOpenFile"), //$NON-NLS-1$
+						Messages.getString("ExportXMLAction.CannotOpenFileMessage") + filename+ //$NON-NLS-1$ 
+						Messages.getString("ExportXMLAction.CannotOpenFileExplain"));  //$NON-NLS-1$ 
+			e1.printStackTrace();
+			return;
+		}
+		XmlDocument doc = new XmlDocument();
+		StructuredSelection selection = null;
+		if (view instanceof BookmarkView){
+			BookmarkView bookmarkView = (BookmarkView) view;
+			selection = bookmarkView.getSelection(); 
+		} else if (view instanceof SubsetView){
+			SubsetView subsetView = (SubsetView) view;
+			selection = subsetView.getSelection();
+		}
+
+		ExportXMLSelection(doc, selection);
+		try {
+			doc.write(out);
+			out.close();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+
+		
+	}
+
+	public static void ExportXMLSelection(XmlDocument doc, StructuredSelection selection) {
+		Element root = (Element) doc.appendChild(doc.createElement(Messages.getString("ExportXMLAction.Metadata"))); //$NON-NLS-1$
+		MetaDataXMLInterface.createElementText(root, Messages.getString("ExportXMLAction.Author"), //$NON-NLS-1$
+									Messages.getString("ExportXMLAction.PHPEclipseSQL")); //$NON-NLS-1$
+		MetaDataXMLInterface.createElementText(root, Messages.getString("ExportXMLAction.Version"), //$NON-NLS-1$
+									Messages.getString("ExportXMLAction.XMLVersionNumber")); //$NON-NLS-1$
+		Iterator iter = selection.iterator();
+		while (iter.hasNext()) {
+			TreeNode current = (TreeNode) iter.next();
+			if (current instanceof SubsetNode){
+				SubsetNode subset = (SubsetNode) current;
+				MetaDataXMLInterface.createElementText(root, Messages.getString("ExportXMLAction.Subset"), //$NON-NLS-1$
+												subset.getName()); //$NON-NLS-1$
+				Object[] children = subset.getChildren();
+				for (int i = 0; i < children.length; i++) {
+					TreeNode objectNode = (TreeNode) children[i];
+					ExportXMLAction.exportObject(root, objectNode);					
+				}
+			}
+			ExportXMLAction.exportObject(root, current);
+		}
+		
+	}
+
+	/**
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(IAction, ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+	}
+
+	/**
+	 * Exports a TreeNode metadata representation to an XmlDocument, based on a an already-created root Element
+	 * @param doc The XmlDocument to receive the metadata representation
+	 * @param node The node with the metadata to export
+	 * @param root The root element (already present in the XmlDocument) that will hold the metadata
+	 */
+	public static void exportObject(Element root, TreeNode node) {
+		
+		XmlDocument doc = (XmlDocument) root.getOwnerDocument();
+		String name = node.getName();
+		Element table = null;
+		if (node instanceof TableNode)
+			table = (Element) root.appendChild(doc.createElement(Messages.getString("ExportXMLAction.Table"))); //$NON-NLS-1$
+		else if (node instanceof ViewNode)
+			table = (Element) root.appendChild(doc.createElement(Messages.getString("ExportXMLAction.View"))); //$NON-NLS-1$
+		else if (node instanceof ObjectNode)
+			table = (Element) root.appendChild(doc.createElement(Messages.getString("ExportXMLAction.View"))); //$NON-NLS-1$
+		else
+			return;
+		MetaDataXMLInterface.createElementText(table,Messages.getString("ExportXMLAction.TableName"), name); //$NON-NLS-1$
+		
+		if (node instanceof TableNode || node instanceof ViewNode){
+			BookmarkNode bookmark = (BookmarkNode) node.getParent();
+			if (bookmark != null){
+				MetaDataXMLInterface.createElementText(table,Messages.getString("ExportXMLAction.BookmarkName"), bookmark.getName()); //$NON-NLS-1$
+			}
+		}
+		
+		ObjectMetaData objMetaData = node.getMetaData();
+		if (objMetaData != null)
+			MetaDataXMLInterface.metaDataToXML(objMetaData, doc, table);
+	}
+
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ImportBookmarksAction.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ImportBookmarksAction.java
index cafeece..237e6a8 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ImportBookmarksAction.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ImportBookmarksAction.java
@@ -1,14 +1,25 @@
 package net.sourceforge.phpdt.sql.actions;
 
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
 
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.apache.crimson.tree.XmlDocument;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.FileDialog;
 import org.eclipse.ui.IViewActionDelegate;
 import org.eclipse.ui.IViewPart;
+import org.w3c.dom.Element;
+import org.xml.sax.SAXException;
 
+import net.sourceforge.phpdt.sql.Messages;
 import net.sourceforge.phpdt.sql.view.BookmarkView;
 import net.sourceforge.phpdt.sql.view.bookmark.BookmarkContentProvider;
 
@@ -29,8 +40,8 @@ public class ImportBookmarksAction implements IViewActionDelegate {
 	public void init(IViewPart view) {
 		this.view = (BookmarkView) view;
 		dialog = new FileDialog(view.getSite().getShell(), SWT.OPEN);
-		dialog.setFilterExtensions(new String[]{"*.ini","*.*"}); //$NON-NLS-1$ //$NON-NLS-2$
-		dialog.setFilterNames(new String[]{Messages.getString("filedialog.preferences"),Messages.getString("filedialog.allfiles")}); //$NON-NLS-1$ //$NON-NLS-2$
+		dialog.setFilterExtensions(new String[]{"*.xml","*.*"}); //$NON-NLS-1$ //$NON-NLS-2$
+		dialog.setFilterNames(new String[]{Messages.getString("filedialog.xmlFiles"),Messages.getString("filedialog.xmlFiles")}); //$NON-NLS-1$ //$NON-NLS-2$
 	}
 
 	/**
@@ -40,8 +51,36 @@ public class ImportBookmarksAction implements IViewActionDelegate {
 		String filename = dialog.open();
 		if (filename != null) {
 			File importFile = new File(filename);
-			BookmarkContentProvider.getInstance().importBookmarks(importFile);
-			view.refresh();
+			
+			XmlDocument doc = new XmlDocument();
+			FileInputStream source = null;
+			try {
+				source = new FileInputStream(importFile);
+			} catch (FileNotFoundException e1) {
+				e1.printStackTrace();
+				return;
+			}
+			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+			DocumentBuilder parser;
+			try {
+				parser = factory.newDocumentBuilder();
+				doc = (XmlDocument) parser.parse(source);
+			} catch (ParserConfigurationException e) {
+				e.printStackTrace();
+				return;
+			} catch (SAXException e) {
+				e.printStackTrace();
+				return;
+			} catch (IOException e) {
+				e.printStackTrace();
+				return;
+			}
+			Element root = doc.getDocumentElement();
+		
+			BookmarkContentProvider.getInstance().importXML(root);
+		
+			view.refresh();		
+
 		}
 	}
 
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ImportQueryAction.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ImportQueryAction.java
index e17dc98..45ca404 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ImportQueryAction.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ImportQueryAction.java
@@ -13,6 +13,7 @@ import org.eclipse.swt.widgets.FileDialog;
 import org.eclipse.ui.IViewActionDelegate;
 import org.eclipse.ui.IViewPart;
 
+import net.sourceforge.phpdt.sql.Messages;
 import net.sourceforge.phpdt.sql.view.LogProxy;
 import net.sourceforge.phpdt.sql.view.SQLLogView;
 import net.sourceforge.phpdt.sql.view.SQLQueryView;
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/NewBookmarkAction.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/NewBookmarkAction.java
index 7eb7294..422a0e7 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/NewBookmarkAction.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/NewBookmarkAction.java
@@ -1,8 +1,5 @@
 package net.sourceforge.phpdt.sql.actions;
 
-import net.sourceforge.phpdt.sql.IConstants;
-import net.sourceforge.phpdt.sql.wizards.BookmarkWizard;
-
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.viewers.ISelection;
@@ -10,6 +7,8 @@ import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.ui.IViewActionDelegate;
 import org.eclipse.ui.IViewPart;
 
+import net.sourceforge.phpdt.sql.wizards.BookmarkWizard;
+
 /**
  * @author root
  *
@@ -18,7 +17,7 @@ import org.eclipse.ui.IViewPart;
  * To enable and disable the creation of type comments go to
  * Window>Preferences>Java>Code Generation.
  */
-public class NewBookmarkAction extends Action implements IViewActionDelegate, IConstants {
+public class NewBookmarkAction extends Action implements IViewActionDelegate {
    IViewPart view;
 	/**
 	 * @see org.eclipse.ui.IViewActionDelegate#init(IViewPart)
@@ -35,9 +34,7 @@ public class NewBookmarkAction extends Action implements IViewActionDelegate, IC
 		run();
 	}
 	public void run() {
-    if (DEBUG) {
-		System.out.println("Wizard..");
-    }
+		System.out.println("Wizard.."); //$NON-NLS-1$
 		BookmarkWizard wizard = new BookmarkWizard();
 		
 		wizard.init();
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/NewSubsetAction.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/NewSubsetAction.java
new file mode 100644
index 0000000..d7f94ac
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/NewSubsetAction.java
@@ -0,0 +1,53 @@
+package net.sourceforge.phpdt.sql.actions;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+
+import net.sourceforge.phpdt.sql.Messages;
+import net.sourceforge.phpdt.sql.view.SubsetView;
+import net.sourceforge.phpdt.sql.view.bookmark.SubsetNode;
+
+/**
+ * @author root
+ *
+ */
+public class NewSubsetAction extends Action implements IViewActionDelegate {
+   IViewPart view;
+	/**
+	 * @see org.eclipse.ui.IViewActionDelegate#init(IViewPart)
+	 */
+	public void init(IViewPart view) {
+		this.view = view;
+		
+	}
+
+	/**
+	 * @see org.eclipse.ui.IActionDelegate#run(IAction)
+	 */
+	public void run(IAction action) {
+		run();
+	}
+	public void run() {
+		System.out.println(Messages.getString("NewSubsetAction.CreatingNewSubset")); //$NON-NLS-1$
+		InputDialog dialog = new InputDialog(view.getSite().getShell(), 
+			Messages.getString("NewSubsetAction.NameOfNewSubset"), Messages.getString("NewSubsetAction.PleaseEnterName"), null, null); //$NON-NLS-1$ //$NON-NLS-2$
+		dialog.open();
+		String value = dialog.getValue();
+		if (value != null) {
+			SubsetNode subset = new SubsetNode(value);
+			((SubsetView) view).addNewSubset(subset);
+		}
+			
+	}
+
+	/**
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(IAction, ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+	}
+
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/NextSequenceAction.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/NextSequenceAction.java
index 0b6cddd..1d4b96a 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/NextSequenceAction.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/NextSequenceAction.java
@@ -8,7 +8,6 @@ import org.eclipse.ui.IViewPart;
 
 import net.sourceforge.phpdt.sql.adapters.AdapterFactory;
 import net.sourceforge.phpdt.sql.adapters.DatabaseAdapter;
-import net.sourceforge.phpdt.sql.adapters.NoSuchAdapterException;
 import net.sourceforge.phpdt.sql.sql.MultiSQLServer;
 import net.sourceforge.phpdt.sql.sql.SQLResults;
 import net.sourceforge.phpdt.sql.view.BookmarkView;
@@ -31,18 +30,16 @@ public class NextSequenceAction extends Action implements IViewActionDelegate {
 	public void run() {
 		TreeNode node = (TreeNode) view.getCurrent();
 		String name = null;
-		try {
-			if (node instanceof SequenceNode) {
-				SequenceNode sequence = (SequenceNode) node;
-				BookmarkNode parent = (BookmarkNode) sequence.getParent();
-				DatabaseAdapter adapter = AdapterFactory.getInstance().getAdapter(parent.getType());
-				name = sequence.getName();
-				String query = adapter.getNextValue(name);
-				MultiSQLServer server = MultiSQLServer.getInstance();
-				SQLResults results = server.execute(query);
-				TableView.getInstance().loadQuery(results);
-			}
-		} catch (NoSuchAdapterException e) {
+		if (node instanceof SequenceNode) {
+			SequenceNode sequence = (SequenceNode) node;
+			BookmarkNode parent = (BookmarkNode) sequence.getParent();
+			DatabaseAdapter adapter = AdapterFactory.getInstance().getAdapter(parent.getType());
+			if (adapter == null) return;
+			name = sequence.getName();
+			String query = adapter.getNextValue(name);
+			MultiSQLServer server = MultiSQLServer.getInstance();
+			SQLResults results = server.execute(parent.getConnection(), query);
+			TableView.getInstance().loadQuery(parent, results);
 		}
 	}
 
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/RefreshTableAction.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/RefreshTableAction.java
index 7ea112d..57999f5 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/RefreshTableAction.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/RefreshTableAction.java
@@ -10,11 +10,7 @@ import net.sourceforge.phpdt.sql.view.TableView;
 
 /**
  * @author root
- *
- * To change this generated comment edit the template variable "typecomment":
- * Window>Preferences>Java>Templates.
- * To enable and disable the creation of type comments go to
- * Window>Preferences>Java>Code Generation.
+ * Implements the "Refresh Table" action for the TableView view
  */
 public class RefreshTableAction extends Action implements IViewActionDelegate {
 	TableView view;
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/SetSchemaAction.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/SetSchemaAction.java
index 0b6b425..04febd1 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/SetSchemaAction.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/SetSchemaAction.java
@@ -7,6 +7,7 @@ import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.ui.IViewActionDelegate;
 import org.eclipse.ui.IViewPart;
 
+import net.sourceforge.phpdt.sql.Messages;
 import net.sourceforge.phpdt.sql.bookmarks.Bookmark;
 import net.sourceforge.phpdt.sql.view.BookmarkView;
 
@@ -23,7 +24,7 @@ public class SetSchemaAction extends Action implements IViewActionDelegate {
 	public void run() {
 		Bookmark bookmark = view.getCurrentBookmark();
 		InputDialog dialog = new InputDialog(view.getSite().getShell(), 
-		    "Set Schema", "Please enter the name of new schema:",
+		    Messages.getString("SetSchemaAction.SetSchema"), Messages.getString("SetSchemaAction.PleaseEnterName"), //$NON-NLS-1$ //$NON-NLS-2$
 		    bookmark.getSchema(), null);
 		dialog.open();
 		String value = dialog.getValue();
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ViewTableAction.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ViewTableAction.java
index f61a384..9c917f6 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ViewTableAction.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ViewTableAction.java
@@ -1,66 +1,72 @@
 package net.sourceforge.phpdt.sql.actions;
 
-import net.sourceforge.phpdt.sql.view.BookmarkView;
-import net.sourceforge.phpdt.sql.view.TableView;
-import net.sourceforge.phpdt.sql.view.bookmark.TableNode;
-import net.sourceforge.phpdt.sql.view.bookmark.TreeNode;
-import net.sourceforge.phpdt.sql.view.bookmark.ViewNode;
-
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.ui.IViewActionDelegate;
 import org.eclipse.ui.IViewPart;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
+
+import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
+import net.sourceforge.phpdt.sql.sql.MultiSQLServer;
+import net.sourceforge.phpdt.sql.view.BookmarkView;
+import net.sourceforge.phpdt.sql.view.SubsetView;
+import net.sourceforge.phpdt.sql.view.TableView;
+import net.sourceforge.phpdt.sql.view.bookmark.BookmarkContentProvider;
+import net.sourceforge.phpdt.sql.view.bookmark.BookmarkNode;
+import net.sourceforge.phpdt.sql.view.bookmark.ObjectNode;
+import net.sourceforge.phpdt.sql.view.bookmark.TreeNode;
 
 /**
  * @author root
- *
- * To change this generated comment edit the template variable "typecomment":
- * Window>Preferences>Java>Templates.
- * To enable and disable the creation of type comments go to
- * Window>Preferences>Java>Code Generation.
- */
+ * Implements action for "View Table"
+*/
 public class ViewTableAction extends Action implements IViewActionDelegate {
-  BookmarkView view;
-  /**
-   * @see org.eclipse.ui.IViewActionDelegate#init(IViewPart)
-   */
-  public void init(IViewPart view) {
-    this.view = (BookmarkView) view;
-  }
+    IViewPart view;
+	/**
+	 * @see org.eclipse.ui.IViewActionDelegate#init(IViewPart)
+	 */
+	public void init(IViewPart view) {
+		this.view = view;
+	}
 
-  /**
-   * @see org.eclipse.ui.IActionDelegate#run(IAction)
-   */
-  public void run(IAction action) {
-    run();
-  }
+	/**
+	 * @see org.eclipse.ui.IActionDelegate#run(IAction)
+	 */
+	public void run(IAction action) {
+		run();
+	}
+	
+	public void run() {
+		PHPEclipseSQLPlugin PHPEclipsePluginPluginInstance = PHPEclipseSQLPlugin.getDefault();
+		PHPEclipsePluginPluginInstance.showView("net.sourceforge.phpdt.sql.view.tableview"); //$NON-NLS-1$
+		TreeNode node = null;
+		BookmarkNode bookmark = null; 
+		if (view instanceof BookmarkView){
+			BookmarkView bookmarkView = (BookmarkView) view;
+			node = (TreeNode) bookmarkView.getCurrent();
+			bookmark = bookmarkView.getCurrentBookmark(); 
+			if (bookmark != null && node != null)
+				TableView.getInstance().loadTable(bookmark, node.getName());
+		} else if (view instanceof SubsetView){
+			SubsetView subsetView = (SubsetView) view;
+			node = (TreeNode) subsetView.getCurrent();
+			if (!(node instanceof ObjectNode)) return;
+			ObjectNode objectNode = (ObjectNode) node;
+			String bookmarkName = objectNode.getBookmark();
+			bookmark = BookmarkContentProvider.getInstance().find(bookmarkName); 
 
-  public void run() {
-    TreeNode node = (TreeNode) view.getCurrent();
-    String name = null;
-    if (node instanceof TableNode) {
-      name = ((TableNode) node).getName();
-    } else if (node instanceof ViewNode) {
-      name = ((ViewNode) node).getName();
-    }
+			String query = objectNode.getQuery();
+			MultiSQLServer server = MultiSQLServer.getInstance();
+			
+			TableView.getInstance().loadQuery(bookmark, server.execute(bookmark.getConnection(), query));
 
-    try {
-      IWorkbenchPage page =
-        PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
-      page.showView(TableView.TABLEVIEW_ID);
-    } catch (PartInitException e) {
-    }
-    TableView.getInstance().loadTable(name);
-  }
+		}
+	}
 
-  /**
-   * @see org.eclipse.ui.IActionDelegate#selectionChanged(IAction, ISelection)
-   */
-  public void selectionChanged(IAction action, ISelection selection) {
-  }
+	/**
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(IAction, ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+	}
 
 }
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ViewTableDetailsAction.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ViewTableDetailsAction.java
index 778b332..4a34156 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ViewTableDetailsAction.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/actions/ViewTableDetailsAction.java
@@ -1,21 +1,20 @@
 package net.sourceforge.phpdt.sql.actions;
 
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+
+import net.sourceforge.phpdt.sql.Messages;
 import net.sourceforge.phpdt.sql.sql.MultiSQLServer;
 import net.sourceforge.phpdt.sql.view.BookmarkView;
 import net.sourceforge.phpdt.sql.view.TableView;
+import net.sourceforge.phpdt.sql.view.bookmark.BookmarkNode;
 import net.sourceforge.phpdt.sql.view.bookmark.TableNode;
 import net.sourceforge.phpdt.sql.view.bookmark.TreeNode;
 import net.sourceforge.phpdt.sql.view.bookmark.ViewNode;
 
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.ui.IViewActionDelegate;
-import org.eclipse.ui.IViewPart;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
-
 public class ViewTableDetailsAction extends Action implements IViewActionDelegate {
 	BookmarkView view;
 	
@@ -29,20 +28,16 @@ public class ViewTableDetailsAction extends Action implements IViewActionDelegat
 	public void run() {
 		TreeNode node = (TreeNode) view.getCurrent();
 		StringBuffer query = new StringBuffer();
-		query.append("METADATA:");
+		query.append(Messages.getString("MetaDataKey")+Messages.getString("MetaDataKeySeparator")); //$NON-NLS-1$ //$NON-NLS-2$
 		if (node instanceof TableNode) {
 			query.append(((TableNode) node).getName());
 		} else if (node instanceof ViewNode) {
 			query.append(((ViewNode) node).getName());
 		}
-    try {
-      IWorkbenchPage page =
-        PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
-      page.showView(TableView.TABLEVIEW_ID);
-    } catch (PartInitException e) {
-    }
 		MultiSQLServer server = MultiSQLServer.getInstance();
-		TableView.getInstance().loadQuery(server.execute(query.toString()));
+		BookmarkNode current = view.getCurrentBookmark();
+
+		TableView.getInstance().loadQuery(current, server.execute(current.getConnection(), query.toString()));
 	}
 	public void selectionChanged(IAction action, ISelection selection) {
 	}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/AdabasDAdapter.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/AdabasDAdapter.java
index 07d4781..0c98313 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/AdabasDAdapter.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/AdabasDAdapter.java
@@ -2,12 +2,9 @@ package net.sourceforge.phpdt.sql.adapters;
 
 public class AdabasDAdapter extends DatabaseAdapter {
     public String getShowTableQuery(DatabaseInfo info) {
-        return "SELECT TABLENAME FROM TABLES";
+        return "SELECT TABLENAME FROM TABLES"; //$NON-NLS-1$
     }
     public String getShowViewQuery(DatabaseInfo info) {
-        return "SELECT VIEWNAME FROM VIEWS";
+        return "SELECT VIEWNAME FROM VIEWS"; //$NON-NLS-1$
     }
-	public DatabaseAdapter getInstance() {
-		return new AdabasDAdapter();
-	}
 }
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/AdapterFactory.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/AdapterFactory.java
index 909198c..90effd8 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/AdapterFactory.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/AdapterFactory.java
@@ -2,14 +2,22 @@ package net.sourceforge.phpdt.sql.adapters;
 
 import java.util.ArrayList;
 
+import net.sourceforge.phpdt.sql.Messages;
+
+/**
+ * @author root
+ * Basically this Factory is a Singleton that is used to return the proper adapter
+ */
 public class AdapterFactory {
-	public static final String GENERIC = "GENERIC";
-    public static final String ORACLE = "ORACLE";
-    public static final String POSTGRES = "POSTGRES";
-    public static final String MYSQL = "MYSQL";
-    public static final String DB2 = "DB2";
-    public static final String DB2AS400 = "DB2AS400";
-	public static final String ADABASD = "ADABASD";
+	public static final String GENERIC = "GENERIC"; //$NON-NLS-1$
+    public static final String ORACLE = "ORACLE"; //$NON-NLS-1$
+    public static final String POSTGRES = "POSTGRES"; //$NON-NLS-1$
+    public static final String MYSQL = "MYSQL"; //$NON-NLS-1$
+    public static final String DB2 = "DB2"; //$NON-NLS-1$
+    public static final String DB2AS400 = "DB2AS400"; //$NON-NLS-1$
+	public static final String ADABASD = "ADABASD"; //$NON-NLS-1$
+    public static final String INFORMIX = "INFORMIX"; //$NON-NLS-1$
+	public static final String REDBRICK = "REDBRICK"; //$NON-NLS-1$
 
     private static AdapterFactory instance;
     
@@ -31,13 +39,15 @@ public class AdapterFactory {
     private void loadDrivers() {
     	drivers = new ArrayList();
 
-		DriverInfo generic = new DriverInfo(GENERIC, Messages.getString("adapters.generic"), new GenericAdapter());
-		DriverInfo oracle = new DriverInfo(ORACLE, Messages.getString("adapters.oracle"), new OracleAdapter());
-		DriverInfo db2 = new DriverInfo(DB2,  Messages.getString("adapters.db2"), new DB2Adapter());
-		DriverInfo db2as400 = new DriverInfo(DB2AS400,  Messages.getString("adapters.db2as400"), new DB2AS400Adapter());
-		DriverInfo postgres = new DriverInfo(POSTGRES,  Messages.getString("adapters.postgres"), new PostgresAdapter());
-		DriverInfo mysql = new DriverInfo(MYSQL,  Messages.getString("adapters.mysql"), new MySQLAdapter());
-		DriverInfo adabasd = new DriverInfo(ADABASD, Messages.getString("adapters.adabasd"), new AdabasDAdapter());
+		DriverInfo generic = new DriverInfo(GENERIC, Messages.getString("adapters.generic"), new GenericAdapter()); //$NON-NLS-1$
+		DriverInfo oracle = new DriverInfo(ORACLE, Messages.getString("adapters.oracle"), new OracleAdapter()); //$NON-NLS-1$
+		DriverInfo db2 = new DriverInfo(DB2,  Messages.getString("adapters.db2"), new DB2Adapter()); //$NON-NLS-1$
+		DriverInfo db2as400 = new DriverInfo(DB2AS400,  Messages.getString("adapters.db2as400"), new DB2AS400Adapter()); //$NON-NLS-1$
+		DriverInfo postgres = new DriverInfo(POSTGRES,  Messages.getString("adapters.postgres"), new PostgresAdapter()); //$NON-NLS-1$
+		DriverInfo mysql = new DriverInfo(MYSQL,  Messages.getString("adapters.mysql"), new MySQLAdapter()); //$NON-NLS-1$
+		DriverInfo adabasd = new DriverInfo(ADABASD, Messages.getString("adapters.adabasd"), new AdabasDAdapter()); //$NON-NLS-1$
+        DriverInfo informix = new DriverInfo(INFORMIX, Messages.getString("adapters.informix"), new GenericAdapter()); //$NON-NLS-1$
+		DriverInfo redbrick = new DriverInfo(REDBRICK, Messages.getString("adapters.redbrick"), new RedBrickAdapter()); //$NON-NLS-1$
 
     	drivers.add(generic);
     	drivers.add(oracle);
@@ -46,19 +56,28 @@ public class AdapterFactory {
     	drivers.add(postgres);
     	drivers.add(mysql);
 		drivers.add(adabasd);
+        drivers.add(informix);
+		drivers.add(redbrick);
     }
     
-    public synchronized DatabaseAdapter getAdapter(String type) throws NoSuchAdapterException {
+    public synchronized DatabaseAdapter getAdapter(String type){
     	if (drivers == null) {
     		loadDrivers();
     	}
     	for (int i = 0; i < drivers.size(); i++) {
     		DriverInfo info = (DriverInfo) drivers.get(i);
     		if (type.equals(info.getDriverType())) {
-    			return info.getAdapter().getInstance();
+    			return info.getAdapter();
     		}
     	}
-         throw new NoSuchAdapterException(type);
+    	// If its not a recognized driver, we return the generic one
+		for (int i = 0; i < drivers.size(); i++) {
+			DriverInfo info = (DriverInfo) drivers.get(i);
+			if (type.equals(GENERIC)) {
+				return info.getAdapter();
+			}
+		}
+		return null;
     }
     
     public synchronized DriverInfo[] getDriverList() {
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/DB2AS400Adapter.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/DB2AS400Adapter.java
index 1e9db37..ea65f31 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/DB2AS400Adapter.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/DB2AS400Adapter.java
@@ -2,12 +2,9 @@ package net.sourceforge.phpdt.sql.adapters;
 
 public class DB2AS400Adapter extends DatabaseAdapter {
     public String getShowTableQuery(DatabaseInfo info) {
-        return "SELECT TABLE_NAME FROM QSYS2.SYSTABLES WHERE table_schema  = '" + info.getSchema().toUpperCase() + "' AND TABLE_TYPE = 'P'";
+        return "SELECT TABLE_NAME FROM QSYS2.SYSTABLES WHERE table_schema  = '" + info.getSchema().toUpperCase() + "' AND TABLE_TYPE = 'P'"; //$NON-NLS-1$ //$NON-NLS-2$
     }
     public String getShowViewQuery(DatabaseInfo info) {
-        return "SELECT TABLE_NAME FROM QSYS2.SYSTABLES WHERE table_schema  = '" + info.getSchema().toUpperCase() + "' AND TABLE_TYPE = 'L'";
+        return "SELECT TABLE_NAME FROM QSYS2.SYSTABLES WHERE table_schema  = '" + info.getSchema().toUpperCase() + "' AND TABLE_TYPE = 'L'"; //$NON-NLS-1$ //$NON-NLS-2$
     }
-	public DatabaseAdapter getInstance() {
-		return new DB2AS400Adapter();
-	}
 }
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/DB2Adapter.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/DB2Adapter.java
index b92fbac..fd4f70e 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/DB2Adapter.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/DB2Adapter.java
@@ -2,18 +2,15 @@ package net.sourceforge.phpdt.sql.adapters;
 
 public class DB2Adapter extends DatabaseAdapter {
     public String getShowTableQuery(DatabaseInfo info) {
-        return "SELECT TABNAME FROM syscat.tables WHERE tabschema = '" + info.getSchema().toUpperCase() + "' AND TYPE='T'";
+        return "SELECT TABNAME FROM syscat.tables WHERE tabschema = '" + info.getSchema().toUpperCase() + "' AND TYPE='T'"; //$NON-NLS-1$ //$NON-NLS-2$
     }
     public String getShowViewQuery(DatabaseInfo info) {
-        return "SELECT TABNAME FROM syscat.tables WHERE tabschema = '" + info.getSchema().toUpperCase() + "' AND TYPE='V'";
+        return "SELECT TABNAME FROM syscat.tables WHERE tabschema = '" + info.getSchema().toUpperCase() + "' AND TYPE='V'"; //$NON-NLS-1$ //$NON-NLS-2$
     }
     public String getShowSequenceQuery(DatabaseInfo info) {
-        return "SELECT SEQNAME FROM sysibm.syssequences WHERE seqschema = '" + info.getSchema().toUpperCase() + "'";
+        return "SELECT SEQNAME FROM sysibm.syssequences WHERE seqschema = '" + info.getSchema().toUpperCase() + "'"; //$NON-NLS-1$ //$NON-NLS-2$
     }
     public String getNextValue(String sequence) {
-        return "VALUES NEXTVAL FOR " + sequence;
+        return "VALUES NEXTVAL FOR " + sequence; //$NON-NLS-1$
     }
-	public DatabaseAdapter getInstance() {
-		return new DB2Adapter();
-	}
 }
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/DatabaseAdapter.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/DatabaseAdapter.java
index 0dd42e6..af667cc 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/DatabaseAdapter.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/DatabaseAdapter.java
@@ -1,34 +1,150 @@
 package net.sourceforge.phpdt.sql.adapters;
 
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+import net.sourceforge.phpdt.sql.bookmarks.Bookmark;
+import net.sourceforge.phpdt.sql.model.Entity;
+import net.sourceforge.phpdt.sql.model.EntityFactory;
+import net.sourceforge.phpdt.sql.sql.DbElementsConstants;
+import net.sourceforge.phpdt.sql.sql.MultiSQLServer;
+import net.sourceforge.phpdt.sql.sql.SQLHelper;
+import net.sourceforge.phpdt.sql.sql.SQLResults;
+
+/**
+ * @author root
+ * Abstract base class for all the adapter classes
+ */
 public abstract class DatabaseAdapter {
-	public abstract DatabaseAdapter getInstance();
-    public abstract String getShowTableQuery(DatabaseInfo info);
-    public String getShowViewQuery(DatabaseInfo info) {
-        throw new FeatureNotSupported("Views");
-    }
-    public String getShowSequenceQuery(DatabaseInfo info) {
-        throw new FeatureNotSupported("Sequences");
-    }
+    
+	public abstract String getShowTableQuery(DatabaseInfo info);
+	public String getShowViewQuery(DatabaseInfo info) {
+		return null;
+	}
+	public String getShowSequenceQuery(DatabaseInfo info) {
+        return null;
+	}
 	public final String getShowTableQuery(DatabaseInfo info, String table) {
 		String schema = info.getSchema();
-		if (schema.equals("")) {
-	    	return "SELECT * FROM " + table;
+		if (schema.equals("")) { //$NON-NLS-1$
+			return "SELECT * FROM " + table; //$NON-NLS-1$
 		} else {
-	    	return "SELECT * FROM " + info.getSchema() + "." + table;
+			return "SELECT * FROM " + info.getSchema() + "." + table; //$NON-NLS-1$ //$NON-NLS-2$
 		}
 	}
-    public final String getTableCountQuery(DatabaseInfo info, String table) {
-		String schema = info.getSchema();
-		if (schema.equals("")) {
-	    	return "SELECT COUNT(*) FROM " + table;
-		} else {
-	    	return "SELECT COUNT(*) FROM " + info.getSchema() + "." + table;
+    
+    
+    
+    // BCH: Not used
+//	public final String getTableCountQuery(DatabaseInfo info, String table) {
+//		String schema = info.getSchema();
+//		if (schema.equals("")) { //$NON-NLS-1$
+//			return "SELECT COUNT(*) FROM " + table; //$NON-NLS-1$
+//		} else {
+//			return "SELECT COUNT(*) FROM " + info.getSchema() + "." + table; //$NON-NLS-1$ //$NON-NLS-2$
+//		}
+//	}
+	public String getNextValue(String sequence) {
+        return null;
+	}
+	//Doesn't seem to be used at the moment
+//	public String getTableListFilter() {
+//		return null;
+//	}
+
+	/**
+	 * @param table
+	 * @return : A query to get an empty ResultSet (null if failed) for that table or view.
+	 * Subclassed if needed by the different database adapters
+	 */
+	public String getEmptySetQuery(String table){
+		return "SELECT * FROM " + table + " WHERE (1 = 0)"; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+    
+	/**
+	 * Quotes a string according to the type of the column 
+	 * @param string to be quoted
+	 * @param type according to java.sql.Types
+	 * @return
+	 */
+	public String quote(String string, int type) {
+		if (SQLHelper.isText(type)){
+			if (string.indexOf('\'') >= 0)
+				return '"' + string + '"';
+			else
+				return "'" + string + "'";						 //$NON-NLS-1$ //$NON-NLS-2$
 		}
+		else if (type == java.sql.Types.DATE || type == java.sql.Types.TIMESTAMP){		
+			string = string.trim();
+			String sub = string.substring(string.length() - 2, string.length() - 1);
+			if (string.length() > 1 && sub.equals(".")) //$NON-NLS-1$
+				string = string.substring(0, string.length() - 2);
+			return "'" + string + "'"; //$NON-NLS-1$ //$NON-NLS-2$
+
+		}
+		return string;
+	}
+    
+    
+    /**
+     * Get a list of entities (tables, views, sequences) for a particular
+     * bookmark.
+     * 
+     * @param bookmark -
+     *     the bookmark that describes the database that is being accessed.
+     * @return 
+     *     an array of entity objects representing the tables, views and sequences.
+     * @throws SQLException
+     */
+    public Entity[] getEntities(Bookmark bookmark) throws SQLException {
+        Connection connection = bookmark.getConnection();
+        Entity[] result = getEntities(bookmark, connection);
+        return (result == null) ? new Entity[0] : result;
     }
-    public String getNextValue(String sequence) {
-        throw new FeatureNotSupported("Sequences");
+    
+    protected Entity[] getEntities(Bookmark bookmark, Connection connection) throws SQLException {
+        
+        List list = new ArrayList();
+        String[] types = { 
+            DbElementsConstants.Table, 
+            DbElementsConstants.View, 
+            DbElementsConstants.Sequence };
+            
+        for (int i = 0; i < types.length; i++) {
+            list.addAll(getEntitiesList(bookmark, connection, types[i]));
+        }
+
+        return (Entity[]) list.toArray(new Entity[0]);
     }
-    public String getTableListFilter() {
-        return null;
+
+    protected List getEntitiesList(Bookmark bookmark, Connection connection, String type) 
+        throws SQLException {
+            
+        String sql = getSQL(bookmark, type);
+        List list = new ArrayList();
+        
+        if (sql != null) {
+            SQLResults results = MultiSQLServer.getInstance().execute(connection, sql);
+            for (int i = 1, size = (results == null) ? 0 : results.getRowCount(); i <= size; i++) {
+                list.add(EntityFactory.getInstance().create(
+                    bookmark, bookmark.getSchema(), results.getElement(1, i).toString(), type));
+            }
+        }
+        return list;
+    }
+
+    private String getSQL(Bookmark bookmark, String type) {
+        DatabaseInfo info = DatabaseInfo.create(bookmark);
+        if (DbElementsConstants.Table.equals(type)) {
+            return getShowTableQuery(info);
+        } else if (DbElementsConstants.View.equals(type)) {
+            return getShowViewQuery(info);
+        } else if (DbElementsConstants.Sequence.equals(type)) {
+            return getShowSequenceQuery(info);
+        } else {
+            return null;
+        }
     }
 }
\ No newline at end of file
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/GenericAdapter.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/GenericAdapter.java
index 9791480..653645a 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/GenericAdapter.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/GenericAdapter.java
@@ -1,10 +1,18 @@
 package net.sourceforge.phpdt.sql.adapters;
 
-public class GenericAdapter extends DatabaseAdapter {
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
 
-	public DatabaseAdapter getInstance() {
-		return new GenericAdapter();
-	}
+import net.sourceforge.phpdt.sql.bookmarks.Bookmark;
+import net.sourceforge.phpdt.sql.model.Entity;
+import net.sourceforge.phpdt.sql.model.EntityFactory;
+
+
+public class GenericAdapter extends DatabaseAdapter {
 
 	public String getShowTableQuery(DatabaseInfo info) {
 		return null;
@@ -12,4 +20,42 @@ public class GenericAdapter extends DatabaseAdapter {
     public String getShowViewQuery(DatabaseInfo info) {
 		return null;
     }
+    
+    public String getShowSequenceQuery(DatabaseInfo info) {
+        return null;
+    }
+
+    /**
+     * @param connection -
+     *      a database 
+     * @param schema - 
+     *      a schema name to filter on, or null to return all entities from all filters
+     * @param type - 
+     *      the type of entities (TABLES, VIEWS, etc.) to get
+     * @return
+     */
+    protected List getEntitiesList(Bookmark bookmark, Connection connection, String type) 
+        throws SQLException {
+        
+        List list = new ArrayList();
+        DatabaseMetaData metaData = connection.getMetaData();
+        ResultSet set = metaData.getTables(
+            null, bookmark.getSchema(), "%", new String[] { type }); 
+        while (set.next()) {
+            String schema = set.getString("TABLE_SCHEM");  
+            schema = (schema == null) ? "" : schema.trim();
+            String tableName = set.getString("TABLE_NAME").trim();
+            
+            if (tableName.length() > 0) {
+                Entity entity = EntityFactory.getInstance().create(
+                        bookmark, schema, tableName, type);
+                if (entity != null) {
+                    list.add(entity);
+                }
+            }
+        }
+        set.close();
+        return list;
+    }
+    
 }
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/Messages.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/Messages.java
deleted file mode 100644
index 82b4298..0000000
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/Messages.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package net.sourceforge.phpdt.sql.adapters;
-
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-public class Messages {
-
-	private static final String BUNDLE_NAME = "net.sourceforge.phpdt.sql.PHPEclipseSQLResources"; //$NON-NLS-1$
-
-	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
-
-	private Messages() {
-	}
-
-	public static String getString(String key) {
-		try {
-			return RESOURCE_BUNDLE.getString(key);
-		} catch (MissingResourceException e) {
-			return '!' + key + '!';
-		}
-	}
-}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/MySQLAdapter.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/MySQLAdapter.java
index ed9167f..981e5fb 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/MySQLAdapter.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/MySQLAdapter.java
@@ -2,10 +2,7 @@ package net.sourceforge.phpdt.sql.adapters;
 
 
 public class MySQLAdapter extends DatabaseAdapter {
-    public String getShowTableQuery(DatabaseInfo info) {
-        return "SHOW TABLES";
-    }
-	public DatabaseAdapter getInstance() {
-		return new MySQLAdapter();
+	public String getShowTableQuery(DatabaseInfo info) {
+		return "SHOW TABLES"; //$NON-NLS-1$
 	}
 }
\ No newline at end of file
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/NoSuchAdapterException.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/NoSuchAdapterException.java
index 5345b06..c2ec3b5 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/NoSuchAdapterException.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/NoSuchAdapterException.java
@@ -1,7 +1,9 @@
 package net.sourceforge.phpdt.sql.adapters;
 
+import net.sourceforge.phpdt.sql.Messages;
+
 public class NoSuchAdapterException extends Exception {
     public NoSuchAdapterException(String driverName) {
-        super("Database not supported: ->" + driverName + "<-");
+        super(Messages.getString("Error.NoDatabase") + driverName + Messages.getString("NoSuchAdapterException.<-_2")); //$NON-NLS-1$ //$NON-NLS-2$
     }
 }
\ No newline at end of file
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/OracleAdapter.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/OracleAdapter.java
index 493b820..f8107e6 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/OracleAdapter.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/OracleAdapter.java
@@ -1,20 +1,43 @@
 package net.sourceforge.phpdt.sql.adapters;
 
+import net.sourceforge.phpdt.sql.Messages;
+import net.sourceforge.phpdt.sql.sql.SQLHelper;
+
+
 
 public class OracleAdapter extends DatabaseAdapter {
-    public String getShowTableQuery(DatabaseInfo info) {
-        return "SELECT TABLE_NAME FROM USER_TABLES";
-    }
-    public String getShowViewQuery(DatabaseInfo info) {
-        return "SELECT VIEW_NAME FROM USER_VIEWS";
-    }
-    public String getShowSequenceQuery(DatabaseInfo info) {
-        return "SELECT SEQUENCE_NAME FROM USER_SEQUENCES";
-    }
-    public String getNextValue(String sequence) {
-        return "SELECT LAST_NUMBER FROM USER_SEQUENCES WHERE SEQUENCE_NAME = '" + sequence + "'";
-    }
-	public DatabaseAdapter getInstance() {
-		return new OracleAdapter();
+	public String getShowTableQuery(DatabaseInfo info) {
+				return "SELECT TABLE_NAME FROM USER_TABLES"; //$NON-NLS-1$
+	}
+	public String getShowViewQuery(DatabaseInfo info) {
+		return "SELECT VIEW_NAME FROM USER_VIEWS"; //$NON-NLS-1$
+	}
+	public String getShowSequenceQuery(DatabaseInfo info) {
+		return "SELECT SEQUENCE_NAME FROM USER_SEQUENCES"; //$NON-NLS-1$
+	}
+	public String getNextValue(String sequence) {
+		return "SELECT LAST_NUMBER FROM USER_SEQUENCES WHERE SEQUENCE_NAME = '" + sequence + "'"; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	/**
+	 * Quotes a string according to the type of the column 
+	 * @param string to be quoted
+	 * @param type according to java.sql.Types
+	 * @return
+	 */
+	public String quote(String string, int type) {
+		if (SQLHelper.isText(type)) {
+			if (string.indexOf('\'') >= 0)
+				return '"' + string + '"';
+			else
+				return "'" + string + "'"; //$NON-NLS-1$ //$NON-NLS-2$
+
+		} else if (type == java.sql.Types.DATE || type == java.sql.Types.TIMESTAMP) {
+			string = string.trim();
+			String sub = string.substring(string.length()-2, string.length()-1);
+			if (string.length() > 1 &&  sub.equals(Messages.getString("OracleAdapter.._3"))) //$NON-NLS-1$
+				string = string.substring(0,string.length()-2);
+			return "TO_DATE('" + string + "','yyyy-mm-dd hh24:mi:ss')"; //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		return string;
 	}
 }
\ No newline at end of file
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/PostgresAdapter.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/PostgresAdapter.java
index 3f07015..3404f2b 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/PostgresAdapter.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/PostgresAdapter.java
@@ -3,21 +3,19 @@ package net.sourceforge.phpdt.sql.adapters;
 
 public class PostgresAdapter extends DatabaseAdapter {
     public String getShowTableQuery(DatabaseInfo info) {
-        return "SELECT TABLENAME FROM PG_TABLES";
+        return "SELECT TABLENAME FROM PG_TABLES"; //$NON-NLS-1$
     }
     public String getShowViewQuery(DatabaseInfo info) {
-        return "SELECT VIEWNAME FROM PG_VIEWS";
+        return "SELECT VIEWNAME FROM PG_VIEWS"; //$NON-NLS-1$
     }
     public String getShowSequenceQuery(DatabaseInfo info) {
-        return "SELECT relname FROM pg_class WHERE relkind = 'S'";
+        return "SELECT relname FROM pg_class WHERE relkind = 'S'"; //$NON-NLS-1$
     }
-    public String getNextValue(String sequence) {
-        return "select nextval('" + sequence + "')";
-    }
-    public String getTableListFilter() {
-        return "pg_";
-    }
-	public DatabaseAdapter getInstance() {
-		return new PostgresAdapter();
-	}
+	//These lines commented because I couldn't find the string values anywhere
+//    public String getNextValue(String sequence) {
+//        return Messages.getString("PostgresAdapter.select_nextval(___4") + sequence + Messages.getString("PostgresAdapter.__)_5"); //$NON-NLS-1$ //$NON-NLS-2$
+//    }
+//    public String getTableListFilter() {
+//        return Messages.getString("PostgresAdapter.pg__6"); //$NON-NLS-1$
+//    }
 }
\ No newline at end of file
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/RedBrickAdapter.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/RedBrickAdapter.java
new file mode 100644
index 0000000..20d4b66
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/adapters/RedBrickAdapter.java
@@ -0,0 +1,15 @@
+package net.sourceforge.phpdt.sql.adapters;
+
+/**
+ * @author bcholmes
+ */
+public class RedBrickAdapter extends DatabaseAdapter {
+
+	public String getShowTableQuery(DatabaseInfo info) {
+		return "select name from rbw_tables where type = 'TABLE'";
+	}
+
+	public String getShowViewQuery(DatabaseInfo info) {
+		return "select name from rbw_tables where type = 'VIEW'";
+	}
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/bookmarks/Bookmark.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/bookmarks/Bookmark.java
index e746898..a52eb49 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/bookmarks/Bookmark.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/bookmarks/Bookmark.java
@@ -1,25 +1,34 @@
 package net.sourceforge.phpdt.sql.bookmarks;
 
+import java.sql.Connection;
+
+import net.sourceforge.phpdt.sql.sql.ConnectionEstablisher;
+import net.sourceforge.phpdt.sql.sql.MultiSQLServer;
+
 /**
  * @author root
- *
- * To change this generated comment edit the template variable "typecomment":
- * Window>Preferences>Java>Templates.
- * To enable and disable the creation of type comments go to
- * Window>Preferences>Java>Code Generation.
+ * Class Bookmark holds the "static" information of a bookmark, that is the data that
+ * is saved and loaded from the external file and describes a bookmark. This info will
+ * be filled up by the end user.
  */
 public class Bookmark {
-	String name = "";
-	String username = "";
-	String password = "";
-	String connect = "";
-	String driver = "";
-	String type = "";
-	String driverFile = "";
-	String schema = "";
+	String name = ""; //$NON-NLS-1$
+	String username = ""; //$NON-NLS-1$
+	String password = ""; //$NON-NLS-1$
+	String connect = ""; //$NON-NLS-1$
+	String driver = ""; //$NON-NLS-1$
+	String type = ""; //$NON-NLS-1$
+	String driverFile = ""; //$NON-NLS-1$
+	String schema = ""; //$NON-NLS-1$
+    private ConnectionEstablisher connectionEstablisher;
 	
 	public Bookmark() {
+        this(MultiSQLServer.getInstance());
 	}
+    
+    public Bookmark(ConnectionEstablisher connectionEstablisher) {
+        this.connectionEstablisher = connectionEstablisher;
+    }
 
 	public Bookmark(Bookmark data) {
 		setName(data.getName());
@@ -31,25 +40,8 @@ public class Bookmark {
 		setDriverFile(data.getDriverFile());
 	}
 
-	public Bookmark(
-		String name,
-		String username,
-		String password,
-		String connect,
-		String driver,
-		String type,
-		String driverFile) {
-		this.name = username;
-		this.username = username;
-		this.password = password;
-		this.connect = connect;
-		this.driver = driver;
-		this.type = type;
-		this.driverFile = driverFile;
-	}
-
 	/**
-	 * Returns the connect.
+	 * Returns the JDBC URL.
 	 * @return String
 	 */
 	public String getConnect() {
@@ -94,7 +86,7 @@ public class Bookmark {
 	 */
 	public void setConnect(String connect) {
 		if (connect == null) {
-			connect = "";
+			connect = ""; //$NON-NLS-1$
 		}
 		this.connect = connect;
 	}
@@ -105,7 +97,7 @@ public class Bookmark {
 	 */
 	public void setDriver(String driver) {
 		if (driver == null) {
-			driver = "";
+			driver = ""; //$NON-NLS-1$
 		}
 		this.driver = driver;
 	}
@@ -116,7 +108,7 @@ public class Bookmark {
 	 */
 	public void setDriverFile(String driverFile) {
 		if (driverFile == null) {
-			driverFile = "";
+			driverFile = ""; //$NON-NLS-1$
 		}
 		this.driverFile = driverFile;
 	}
@@ -127,7 +119,7 @@ public class Bookmark {
 	 */
 	public void setPassword(String password) {
 		if (password == null) {
-			password = "";
+			password = ""; //$NON-NLS-1$
 		}
 		this.password = password;
 	}
@@ -138,7 +130,7 @@ public class Bookmark {
 	 */
 	public void setUsername(String username) {
 		if (username == null) {
-			username = "";
+			username = ""; //$NON-NLS-1$
 		}
 		this.username = username;
 	}
@@ -157,46 +149,46 @@ public class Bookmark {
 	 */
 	public void setName(String name) {
 		if (name == null) {
-			name = "";
+			name = ""; //$NON-NLS-1$
 		}
 		this.name = name;
 	}
 
 	public boolean isEmpty() {
-		if (name.equals("") &&
-		username.equals("") &&
-		password.equals("") &&
-		connect.equals("") &&
-		driver.equals("") &&
-		type.equals("") &&
-		driverFile.equals("")) {
+		if (name.equals("") && //$NON-NLS-1$
+		username.equals("") && //$NON-NLS-1$
+		password.equals("") && //$NON-NLS-1$
+		connect.equals("") && //$NON-NLS-1$
+		driver.equals("") && //$NON-NLS-1$
+		type.equals("") && //$NON-NLS-1$
+		driverFile.equals("")) { //$NON-NLS-1$
 			return true;
 		}
 		return false;
 	}
 	public String toString() {
 		StringBuffer buffer = new StringBuffer();
-		buffer.append("[");
-		buffer.append("name=");
+		buffer.append("["); //$NON-NLS-1$
+		buffer.append("name="); //$NON-NLS-1$
 		buffer.append(name);
-		buffer.append(", ");
-		buffer.append("username=");
+		buffer.append(", "); //$NON-NLS-1$
+		buffer.append("username="); //$NON-NLS-1$
 		buffer.append(username);
-		buffer.append(", ");
-		buffer.append("password=****");
-		buffer.append(", ");
-		buffer.append("connect=");
+		buffer.append(", "); //$NON-NLS-1$
+		buffer.append("password=****"); //$NON-NLS-1$
+		buffer.append(", "); //$NON-NLS-1$
+		buffer.append("connect="); //$NON-NLS-1$
 		buffer.append(connect);
-		buffer.append(", ");
-		buffer.append("driver=");
+		buffer.append(", "); //$NON-NLS-1$
+		buffer.append("driver="); //$NON-NLS-1$
 		buffer.append(driver);
-		buffer.append(", ");
-		buffer.append("type=");
+		buffer.append(", "); //$NON-NLS-1$
+		buffer.append("type="); //$NON-NLS-1$
 		buffer.append(type);
-		buffer.append(", ");
-		buffer.append("driverFile=");
+		buffer.append(", "); //$NON-NLS-1$
+		buffer.append("driverFile="); //$NON-NLS-1$
 		buffer.append(driverFile);
-		buffer.append("]");
+		buffer.append("]"); //$NON-NLS-1$
 		return buffer.toString();
 	}
 	
@@ -216,4 +208,34 @@ public class Bookmark {
 		this.schema = schema;
 	}
 
+    protected Connection connection = null;
+    /**
+	 * Returns the connection object. Will automatically connect if not connected.
+	 * @return the Connection object associated with the current JDBC source.
+	 * 
+	 */
+    public Connection getConnection() {
+    	// We autoconnect if needed. (After all, reusability is a myth :)
+    	if (connection == null) connection = this.connectionEstablisher.connect(this);
+    	return connection;
+    }
+
+    /**
+	 * @return true if the BookmarkNode is connected to a JDBC source
+	 */
+    public boolean isConnected() {
+    	return (connection != null);
+    }
+
+    /**
+	 * Sets the connection member. From that moment on the BookmarkNode is "connected" (open)
+	 * @param connection : a valid connection to a JDBC source
+	 */
+    public void setConnection(Connection connection) {
+    	this.connection = connection;
+    }
+
+    public void disconnect() {
+        this.connectionEstablisher.disconnect(this, this.connection);
+    }
 }
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/editors/SQLConfiguration.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/editors/SQLConfiguration.java
index 97eae15..3ef4568 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/editors/SQLConfiguration.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/editors/SQLConfiguration.java
@@ -2,8 +2,6 @@ package net.sourceforge.phpdt.sql.editors;
 
 import java.util.HashMap;
 
-import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
-
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.preference.PreferenceConverter;
 import org.eclipse.jface.text.IDocument;
@@ -16,6 +14,8 @@ import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.RGB;
 
+import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
+
 public class SQLConfiguration extends SourceViewerConfiguration {
 	private PresentationReconciler reconciler = new PresentationReconciler();
 	private ColorManager colorManager;
@@ -66,7 +66,7 @@ public class SQLConfiguration extends SourceViewerConfiguration {
 		setDamageRepairer(getAttr(SQLColorConstants.NUMERIC, numericBold), SQLPartitionScanner.SQL_NUMERIC);
 	}
 	public TextAttribute getAttr(RGB color, boolean bold) {
-		Color background = colorManager.getColor(SQLColorConstants.BACKGROUND);
+		colorManager.getColor(SQLColorConstants.BACKGROUND);
 		Color foreground = colorManager.getColor(color);
 		TextAttribute attr = new TextAttribute(foreground);
 		if (bold) {
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/editors/SQLEditor.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/editors/SQLEditor.java
index 636c0d1..7f7bf0e 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/editors/SQLEditor.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/editors/SQLEditor.java
@@ -1,7 +1,5 @@
 package net.sourceforge.phpdt.sql.editors;
 
-import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
-
 import org.eclipse.jface.preference.PreferenceConverter;
 import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jface.util.PropertyChangeEvent;
@@ -13,6 +11,8 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.editors.text.TextEditor;
 
+import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
+
 public class SQLEditor extends TextEditor {
 	SQLConfiguration config;
 	private ColorManager colorManager;
@@ -32,7 +32,7 @@ public class SQLEditor extends TextEditor {
 				config.initializeColors();
 				getSourceViewer().invalidateTextPresentation();
 				StyledText widget = getSourceViewer().getTextWidget();
-				FontData font = PreferenceConverter.getFontData(getPreferenceStore(), "phpeclipse.sql.font");
+				FontData font = PreferenceConverter.getFontData(getPreferenceStore(), "phpeclipse.sql.font"); //$NON-NLS-1$
 				widget.setFont(new Font(Display.getCurrent(), font));
 				Color background = colorManager.getColor(SQLColorConstants.BACKGROUND);
 				widget.setBackground(background);
@@ -51,7 +51,7 @@ public class SQLEditor extends TextEditor {
 	public void createPartControl(Composite arg0) {
 		super.createPartControl(arg0);
 		StyledText widget = getSourceViewer().getTextWidget();
-		FontData font = PreferenceConverter.getFontData(getPreferenceStore(), "phpeclipse.sql.font");
+		FontData font = PreferenceConverter.getFontData(getPreferenceStore(), "phpeclipse.sql.font"); //$NON-NLS-1$
 		widget.setFont(new Font(Display.getCurrent(), font));
 		Color background = colorManager.getColor(SQLColorConstants.BACKGROUND);
 		widget.setBackground(background);
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/editors/SQLPartitionScanner.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/editors/SQLPartitionScanner.java
index fa43a75..665a536 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/editors/SQLPartitionScanner.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/editors/SQLPartitionScanner.java
@@ -18,42 +18,42 @@ import org.eclipse.jface.text.rules.Token;
 import org.eclipse.jface.text.rules.WhitespaceRule;
 
 public class SQLPartitionScanner extends RuleBasedPartitionScanner {
-	public final static String SQL_COMMENT = "__sql_comment";
-	public final static String SQL_IDENTIFIER = "__sql_word";
-	public final static String SQL_STRING = "__sql_string";
-	public final static String SQL_KEYWORD = "__sql_keyword";
-	public final static String SQL_SYMBOL = "__sql_symbol";
-	public final static String SQL_SEPARATOR = "__sql_separator";
-	public final static String SQL_NUMERIC = "__sql_numeric";
+	public final static String SQL_COMMENT = "__sql_comment"; //$NON-NLS-1$
+	public final static String SQL_IDENTIFIER = "__sql_word"; //$NON-NLS-1$
+	public final static String SQL_STRING = "__sql_string"; //$NON-NLS-1$
+	public final static String SQL_KEYWORD = "__sql_keyword"; //$NON-NLS-1$
+	public final static String SQL_SYMBOL = "__sql_symbol"; //$NON-NLS-1$
+	public final static String SQL_SEPARATOR = "__sql_separator"; //$NON-NLS-1$
+	public final static String SQL_NUMERIC = "__sql_numeric"; //$NON-NLS-1$
 	
 	private final static String[] KEYWORDS = {
-		"ALTER",
-		"AND",
-		"BY",
-		"COLUMN",
-		"CREATE",
-		"DELETE",
-		"DROP",
-		"FROM",
-		"GROUP", 
-		"INSERT",
-		"INTO",
-		"NOT",
-		"NULL",
-		"OR",
-		"ORDER",
-		"SELECT",
-		"SEQUENCE",
-		"SET", 
-		"TABLE",
-		"UNION",
-		"UNIQUE",
-		"UPDATE",
-		"USING",
-		"VALUES",
-		"VIEW",
-		"WHEN",
-		"WHERE"
+		"ALTER", //$NON-NLS-1$
+		"AND", //$NON-NLS-1$
+		"BY", //$NON-NLS-1$
+		"COLUMN", //$NON-NLS-1$
+		"CREATE", //$NON-NLS-1$
+		"DELETE", //$NON-NLS-1$
+		"DROP", //$NON-NLS-1$
+		"FROM", //$NON-NLS-1$
+		"GROUP",  //$NON-NLS-1$
+		"INSERT", //$NON-NLS-1$
+		"INTO", //$NON-NLS-1$
+		"NOT", //$NON-NLS-1$
+		"NULL", //$NON-NLS-1$
+		"OR", //$NON-NLS-1$
+		"ORDER", //$NON-NLS-1$
+		"SELECT", //$NON-NLS-1$
+		"SEQUENCE", //$NON-NLS-1$
+		"SET",  //$NON-NLS-1$
+		"TABLE", //$NON-NLS-1$
+		"UNION", //$NON-NLS-1$
+		"UNIQUE", //$NON-NLS-1$
+		"UPDATE", //$NON-NLS-1$
+		"USING", //$NON-NLS-1$
+		"VALUES", //$NON-NLS-1$
+		"VIEW", //$NON-NLS-1$
+		"WHEN", //$NON-NLS-1$
+		"WHERE" //$NON-NLS-1$
 	};
 
 	public SQLPartitionScanner() {
@@ -70,9 +70,9 @@ public class SQLPartitionScanner extends RuleBasedPartitionScanner {
 		IToken numeric = new Token(SQL_NUMERIC);
 		
 		rules.add(new PredicateRuleAdapter(new WhitespaceRule(new WhitespaceDetector()), whitespace));
-		rules.add(new MultiLineRule("/*", "*/", comment));
-		rules.add(new EndOfLineRule("--", comment));
-		rules.add(new SingleLineRule("'", "'", string));
+		rules.add(new MultiLineRule("/*", "*/", comment)); //$NON-NLS-1$ //$NON-NLS-2$
+		rules.add(new EndOfLineRule("--", comment)); //$NON-NLS-1$
+		rules.add(new SingleLineRule("'", "'", string)); //$NON-NLS-1$ //$NON-NLS-2$
 		rules.add(new PredicateRuleAdapter(new SQLNumberRule(numeric), numeric));
 		SQLWordRule wordRule = new SQLWordRule(identifier);
 		for (int i = 0; i < KEYWORDS.length; i++) {
@@ -134,7 +134,7 @@ class SymbolRule implements IRule {
 	}
 	public IToken evaluate(ICharacterScanner scanner) {
 		int val = scanner.read();
-		if (val != scanner.EOF) {
+		if (val != ICharacterScanner.EOF) {
 			char c = (char) val;
 			if (!Character.isWhitespace(c) && !Character.isLetterOrDigit(c) && c != '_') {
 				return token;
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/model/Entity.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/model/Entity.java
new file mode 100644
index 0000000..3e8a33a
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/model/Entity.java
@@ -0,0 +1,11 @@
+package net.sourceforge.phpdt.sql.model;
+
+/**
+ * @author BC
+ */
+public interface Entity {
+    public String getName();
+    public String getSchema();
+    public String getType();
+    public String getQualifiedName();
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/model/EntityFactory.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/model/EntityFactory.java
new file mode 100644
index 0000000..dd1ae08
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/model/EntityFactory.java
@@ -0,0 +1,101 @@
+package net.sourceforge.phpdt.sql.model;
+
+import net.sourceforge.phpdt.sql.bookmarks.Bookmark;
+import net.sourceforge.phpdt.sql.sql.DbElementsConstants;
+import net.sourceforge.phpdt.sql.sql.MultiSQLServer;
+import net.sourceforge.phpdt.sql.sql.SQLHelper;
+
+/**
+ * 
+ * 
+ * @author BC
+ */
+public class EntityFactory {
+    
+    public abstract class EntityImpl implements Entity { 
+        private String schema;
+        private String name;
+        private String type;
+        private Bookmark bookmark;
+        
+        public EntityImpl(Bookmark bookmark, String schema, String name, String type) {
+            this.schema = schema;
+            this.name = name;
+            this.type = type;
+            this.bookmark = bookmark;
+        }
+        protected Bookmark getBookmark() {
+            return this.bookmark;
+        }
+        public String getName() {
+            return this.name;
+        }
+        public String getSchema() {
+            return this.schema;
+        }
+        public String getType() {
+            return this.type;
+        }
+        public String getQualifiedName() {
+            return (this.schema == null || this.schema.length() == 0) ?
+                this.name : this.schema + "." + this.name;
+        }
+    }
+    
+    public class TableImpl extends EntityImpl implements Table {
+        public TableImpl(Bookmark bookmark, String schema, String name) {
+            super(bookmark, schema, name, DbElementsConstants.Table);
+        }
+        
+        public int getSize() {
+            return SQLHelper.getSize(getBookmark(), getQualifiedName());
+        }
+        
+        public void deleteAllRows() {
+            String sql = "DELETE FROM " + getQualifiedName();
+            MultiSQLServer.getInstance().execute(getBookmark().getConnection(), sql);
+        }
+    }
+    
+    public class ViewImpl extends EntityImpl implements View {
+        public ViewImpl(Bookmark bookmark, String schema, String name) {
+            super(bookmark, schema, name, DbElementsConstants.View);
+        }
+
+        public int getSize() {
+            return SQLHelper.getSize(getBookmark(), getQualifiedName());
+        }
+    }
+    
+    public class SequenceImpl extends EntityImpl implements Sequence {
+        public SequenceImpl(Bookmark bookmark, String schema, String name) {
+            super(bookmark, schema, name, DbElementsConstants.Sequence);
+        }
+    }
+    
+    private static EntityFactory instance = new EntityFactory();
+    
+    private EntityFactory() {
+    }
+    
+    public static EntityFactory getInstance() {
+        return EntityFactory.instance;
+    }
+    
+    public Entity create(Bookmark bookmark, String schema, String name, String type) {
+        if (type != null) {
+            type = type.trim();
+        }
+        
+        if (DbElementsConstants.Table.equals(type)) {
+            return new TableImpl(bookmark, schema, name);
+        } else if (DbElementsConstants.View.equals(type)) {
+            return new ViewImpl(bookmark, schema, name);
+        } else if (DbElementsConstants.Sequence.equals(type)) {
+            return new SequenceImpl(bookmark, schema, name);
+        } else {
+            return null;
+//            throw new IllegalArgumentException("Unknown type: " + type);
+        }
+    }
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/model/Sequence.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/model/Sequence.java
new file mode 100644
index 0000000..3cb834d
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/model/Sequence.java
@@ -0,0 +1,8 @@
+package net.sourceforge.phpdt.sql.model;
+
+/**
+ * @author BC
+ */
+public interface Sequence extends Entity {
+
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/model/Table.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/model/Table.java
new file mode 100644
index 0000000..6a57c01
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/model/Table.java
@@ -0,0 +1,9 @@
+package net.sourceforge.phpdt.sql.model;
+
+/**
+ * @author BC
+ */
+public interface Table extends Entity {
+    public int getSize();
+    public void deleteAllRows();
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/model/View.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/model/View.java
new file mode 100644
index 0000000..8f5530c
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/model/View.java
@@ -0,0 +1,11 @@
+package net.sourceforge.phpdt.sql.model;
+
+
+/**
+ * @author BC
+ */
+public interface View extends Entity {
+    
+    public int getSize();
+
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/perspective/DBPerspective.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/perspective/DBPerspective.java
index d6de785..ee35630 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/perspective/DBPerspective.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/perspective/DBPerspective.java
@@ -1,11 +1,11 @@
 package net.sourceforge.phpdt.sql.perspective;
 
-import net.sourceforge.phpdt.sql.view.PHPSourceConsole;
-
 import org.eclipse.ui.IFolderLayout;
 import org.eclipse.ui.IPageLayout;
 import org.eclipse.ui.IPerspectiveFactory;
 
+import net.sourceforge.phpdt.sql.view.PHPSourceConsole;
+
 /**
  * @author root
  *
@@ -19,22 +19,22 @@ public class DBPerspective implements IPerspectiveFactory {
 		layout.setEditorAreaVisible(false);
 		IFolderLayout side =
 			layout.createFolder(
-				"side",
+				"side", //$NON-NLS-1$
 				IPageLayout.LEFT,
 				0.33F,
 				layout.getEditorArea());
-		side.addView("net.sourceforge.phpdt.sql.view.bookmarkview");
-		side.addView("net.sourceforge.phpdt.sql.view.queryhistoryview");
-		layout.addView("net.sourceforge.phpdt.sql.view.sqlqueryview", IPageLayout.TOP, 0.33F, layout.getEditorArea());
+		side.addView("net.sourceforge.phpdt.sql.view.bookmarkview"); //$NON-NLS-1$
+		side.addView("net.sourceforge.phpdt.sql.view.queryhistoryview"); //$NON-NLS-1$
+		layout.addView("net.sourceforge.phpdt.sql.view.sqlqueryview", IPageLayout.TOP, 0.33F, layout.getEditorArea()); //$NON-NLS-1$
 		IFolderLayout bottomRight =
 			layout.createFolder(
-				"bottomRight",
+				"bottomRight", //$NON-NLS-1$
 				IPageLayout.LEFT,
 				0.33F,
 				layout.getEditorArea());
-		bottomRight.addView("net.sourceforge.phpdt.sql.view.tableview");
-		bottomRight.addView("net.sourceforge.phpdt.sql.view.logview");
-  //  bottomRight.addView(PHPSourceConsole.CONSOLE_ID);
+		bottomRight.addView("net.sourceforge.phpdt.sql.view.tableview"); //$NON-NLS-1$
+		bottomRight.addView("net.sourceforge.phpdt.sql.view.logview"); //$NON-NLS-1$
+  bottomRight.addView(PHPSourceConsole.CONSOLE_ID);
 	}
 
 }
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/preferences/PHPSQLConnectionPreferencePage.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/preferences/PHPSQLConnectionPreferencePage.java
index 421a853..3ee5e5d 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/preferences/PHPSQLConnectionPreferencePage.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/preferences/PHPSQLConnectionPreferencePage.java
@@ -1,8 +1,5 @@
 package net.sourceforge.phpdt.sql.preferences;
 
-import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
-
-import org.eclipse.jface.preference.FileFieldEditor;
 import org.eclipse.jface.preference.PreferencePage;
 import org.eclipse.jface.preference.StringFieldEditor;
 import org.eclipse.swt.SWT;
@@ -13,6 +10,8 @@ import org.eclipse.swt.widgets.Control;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
 
+import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
+
 public class PHPSQLConnectionPreferencePage
   extends PreferencePage
   implements IWorkbenchPreferencePage {
@@ -24,86 +23,86 @@ public class PHPSQLConnectionPreferencePage
   StringFieldEditor fDriverFileFFE;
 
   public PHPSQLConnectionPreferencePage() {
-    super();
-    setPreferenceStore(PHPEclipseSQLPlugin.getDefault().getPreferenceStore());
+	super();
+	setPreferenceStore(PHPEclipseSQLPlugin.getDefault().getPreferenceStore());
   }
   public void init(IWorkbench workbench) {
-    setPreferenceStore(PHPEclipseSQLPlugin.getDefault().getPreferenceStore());
+	setPreferenceStore(PHPEclipseSQLPlugin.getDefault().getPreferenceStore());
   }
   protected void performDefaults() {
-    fUserNameSFE.loadDefault();
-    fConnectSFE.loadDefault();
-    fDriverSFE.loadDefault();
-    fTypeSFE.loadDefault();
-    fDriverFileFFE.loadDefault();
-    super.performDefaults();
+	fUserNameSFE.loadDefault();
+	fConnectSFE.loadDefault();
+	fDriverSFE.loadDefault();
+	fTypeSFE.loadDefault();
+	fDriverFileFFE.loadDefault();
+	super.performDefaults();
   }
 
   public boolean performOk() {
-    fUserNameSFE.store();
-    fConnectSFE.store();
-    fDriverSFE.store();
-    fTypeSFE.store();
-    fDriverFileFFE.store();
-    return super.performOk();
+	fUserNameSFE.store();
+	fConnectSFE.store();
+	fDriverSFE.store();
+	fTypeSFE.store();
+	fDriverFileFFE.store();
+	return super.performOk();
   }
 
   protected Control createContents(Composite parent) {
-    initializeDialogUnits(parent);
-    //  final IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore();
-    Composite composite = new Composite(parent, SWT.LEFT);
-    GridLayout layout = new GridLayout();
-    composite.setLayout(layout);
-    composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-    //   layout.numColumns = 1;
+	initializeDialogUnits(parent);
+	//  final IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore();
+	Composite composite = new Composite(parent, SWT.LEFT);
+	GridLayout layout = new GridLayout();
+	composite.setLayout(layout);
+	composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+	//   layout.numColumns = 1;
 
-    fUserNameSFE =
-      new StringFieldEditor(
-        "phpeclipse.sql.username.connect",
-        "Default User name:",
-        composite);
-    fUserNameSFE.setPreferencePage(this);
-    fUserNameSFE.setPreferenceStore(getPreferenceStore());
-    fUserNameSFE.load();
+	fUserNameSFE =
+	  new StringFieldEditor(
+		"phpeclipse.sql.username.connect",
+		"Default User name:",
+		composite);
+	fUserNameSFE.setPreferencePage(this);
+	fUserNameSFE.setPreferenceStore(getPreferenceStore());
+	fUserNameSFE.load();
 
-    fConnectSFE =
-      new StringFieldEditor(
-        "phpeclipse.sql.connect.connect",
-        "Connect:",
-        composite);
-    fConnectSFE.setPreferencePage(this);
-    fConnectSFE.setPreferenceStore(getPreferenceStore());
-    fConnectSFE.load();
+	fConnectSFE =
+	  new StringFieldEditor(
+		"phpeclipse.sql.connect.connect",
+		"Connect:",
+		composite);
+	fConnectSFE.setPreferencePage(this);
+	fConnectSFE.setPreferenceStore(getPreferenceStore());
+	fConnectSFE.load();
 
-    fDriverSFE =
-      new StringFieldEditor(
-        "phpeclipse.sql.driver.connect",
-        "Driver:",
-        composite);
-    fDriverSFE.setPreferencePage(this);
-    fDriverSFE.setPreferenceStore(getPreferenceStore());
-    fDriverSFE.load();
+	fDriverSFE =
+	  new StringFieldEditor(
+		"phpeclipse.sql.driver.connect",
+		"Driver:",
+		composite);
+	fDriverSFE.setPreferencePage(this);
+	fDriverSFE.setPreferenceStore(getPreferenceStore());
+	fDriverSFE.load();
 
-    fTypeSFE =
-      new StringFieldEditor("phpeclipse.sql.type.connect", "Type:", composite);
-    fTypeSFE.setPreferencePage(this);
-    fTypeSFE.setPreferenceStore(getPreferenceStore());
-    fTypeSFE.load();
+	fTypeSFE =
+	  new StringFieldEditor("phpeclipse.sql.type.connect", "Type:", composite);
+	fTypeSFE.setPreferencePage(this);
+	fTypeSFE.setPreferenceStore(getPreferenceStore());
+	fTypeSFE.load();
 
-    //    fDriverFileFFE =
-    //      new FileFieldEditor(
-    //        "phpeclipse.sql.filename.connect",
-    //        "Driver filename:",
-    //        composite);
-    fDriverFileFFE =
-      new StringFieldEditor(
-        "phpeclipse.sql.filename.connect",
-        "Driver filename:",
-        composite);
-    fDriverFileFFE.setPreferencePage(this);
-    fDriverFileFFE.setPreferenceStore(getPreferenceStore());
-    fDriverFileFFE.load();
+	//    fDriverFileFFE =
+	//      new FileFieldEditor(
+	//        "phpeclipse.sql.filename.connect",
+	//        "Driver filename:",
+	//        composite);
+	fDriverFileFFE =
+	  new StringFieldEditor(
+		"phpeclipse.sql.filename.connect",
+		"Driver filename:",
+		composite);
+	fDriverFileFFE.setPreferencePage(this);
+	fDriverFileFFE.setPreferenceStore(getPreferenceStore());
+	fDriverFileFFE.load();
 
-    return composite;
+	return composite;
   }
 }
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/preferences/PHPSQLTemplatesPreferencePage.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/preferences/PHPSQLTemplatesPreferencePage.java
index 6ff4e9a..ceb37ab 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/preferences/PHPSQLTemplatesPreferencePage.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/preferences/PHPSQLTemplatesPreferencePage.java
@@ -1,7 +1,5 @@
 package net.sourceforge.phpdt.sql.preferences;
 
-import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
-
 import org.eclipse.jface.preference.PreferencePage;
 import org.eclipse.jface.preference.StringFieldEditor;
 import org.eclipse.swt.SWT;
@@ -12,6 +10,8 @@ import org.eclipse.swt.widgets.Control;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
 
+import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
+
 public class PHPSQLTemplatesPreferencePage
   extends PreferencePage
   implements IWorkbenchPreferencePage {
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/preferences/PreferencesPage.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/preferences/PreferencesPage.java
index 1173afd..2f93e5f 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/preferences/PreferencesPage.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/preferences/PreferencesPage.java
@@ -1,6 +1,5 @@
 package net.sourceforge.phpdt.sql.preferences;
 
-import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
 
 import org.eclipse.jface.preference.ColorFieldEditor;
 import org.eclipse.jface.preference.IPreferenceStore;
@@ -9,7 +8,6 @@ import org.eclipse.jface.preference.PreferencePage;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.FontData;
 import org.eclipse.swt.graphics.RGB;
 import org.eclipse.swt.layout.GridData;
@@ -22,345 +20,327 @@ import org.eclipse.swt.widgets.Label;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
 
+import net.sourceforge.phpdt.sql.Messages;
+import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
 import net.sourceforge.phpdt.sql.editors.ColorManager;
 import net.sourceforge.phpdt.sql.editors.SQLColorConstants;
 
-public class PreferencesPage
-  extends PreferencePage
-  implements IWorkbenchPreferencePage {
-  FontDialog fontDialog;
-  ColorFieldEditor backgroundColorEditor;
-
-  ColorFieldEditor textColorEditor;
-  boolean textFlag;
-  ColorFieldEditor keywordColorEditor;
-  boolean keywordFlag;
-  ColorFieldEditor stringColorEditor;
-  boolean stringFlag;
-  ColorFieldEditor numericColorEditor;
-  boolean numericFlag;
-  ColorFieldEditor commentColorEditor;
-  boolean commentFlag;
-
-  Button boldText;
-  Button boldKeyword;
-  Button boldString;
-  Button boldNumeric;
-  Button boldComment;
-
-  IWorkbench workbench;
-  FontData fontData;
-  Label fontDisplay;
-  public void init(IWorkbench workbench) {
-    //Initialize the preference store
-    this.workbench = workbench;
-    setPreferenceStore(PHPEclipseSQLPlugin.getDefault().getPreferenceStore());
-    initializeColorDefaults(getPreferenceStore());
-  }
-
-  private void initializeColorDefaults(IPreferenceStore store) {
-    RGB BACKGROUND = new RGB(255, 255, 255);
-    RGB COMMENT = new RGB(88, 148, 64);
-    RGB IDENTIFIER = new RGB(0, 0, 0);
-    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,
-      "phpeclipse.sql.background.color",
-      BACKGROUND);
-    PreferenceConverter.setDefault(store, "phpeclipse.sql.text.color", DEFAULT);
-    PreferenceConverter.setDefault(
-      store,
-      "phpeclipse.sql.keyword.color",
-      KEYWORD);
-    PreferenceConverter.setDefault(
-      store,
-      "phpeclipse.sql.comment.color",
-      COMMENT);
-    PreferenceConverter.setDefault(
-      store,
-      "phpeclipse.sql.string.color",
-      STRING);
-    PreferenceConverter.setDefault(
-      store,
-      "phpeclipse.sql.numeric.color",
-      NUMERIC);
-  }
-
-  protected void performDefaults() {
-    fontData = null;
-    updateFontDisplay();
-    textFlag = false;
-    keywordFlag = true;
-    stringFlag = false;
-    numericFlag = false;
-    commentFlag = false;
-    updateFlags();
-    backgroundColorEditor.loadDefault();
-    textColorEditor.loadDefault();
-    keywordColorEditor.loadDefault();
-    stringColorEditor.loadDefault();
-    commentColorEditor.loadDefault();
-    numericColorEditor.loadDefault();
-  }
-  /** 
-   * Save the preferences to the preference store.
-   */
-  public boolean performOk() {
-    PreferenceConverter.setValue(
-      getPreferenceStore(),
-      "phpeclipse.sql.font",
-      fontData);
-    getPreferenceStore().setValue("phpeclipse.sql.text.bold", textFlag);
-    getPreferenceStore().setValue("phpeclipse.sql.keyword.bold", keywordFlag);
-    getPreferenceStore().setValue("phpeclipse.sql.string.bold", stringFlag);
-    getPreferenceStore().setValue("phpeclipse.sql.comment.bold", commentFlag);
-    getPreferenceStore().setValue("phpeclipse.sql.numeric.bold", numericFlag);
-    backgroundColorEditor.store();
-    textColorEditor.store();
-    keywordColorEditor.store();
-    stringColorEditor.store();
-    commentColorEditor.store();
-    numericColorEditor.store();
-    return super.performOk();
-  }
-  
-  protected Control createContents(Composite parent) {
-    Composite composite = new Composite(parent, SWT.NULL);
-
-    GridLayout innerLayout = new GridLayout();
-    innerLayout.numColumns = 4;
-    composite.setLayout(innerLayout);
-
-    fontData =
-      PreferenceConverter.getFontData(
-        getPreferenceStore(),
-        "phpeclipse.sql.font");
-    textFlag = getPreferenceStore().getBoolean("phpeclipse.sql.text.bold");
-    keywordFlag =
-      getPreferenceStore().getBoolean("phpeclipse.sql.keyword.bold");
-    stringFlag = getPreferenceStore().getBoolean("phpeclipse.sql.string.bold");
-    commentFlag =
-      getPreferenceStore().getBoolean("phpeclipse.sql.comment.bold");
-    numericFlag =
-      getPreferenceStore().getBoolean("phpeclipse.sql.numeric.bold");
-
-    fontDialog =
-      new FontDialog(workbench.getActiveWorkbenchWindow().getShell());
-    Button fontButton = new Button(composite, SWT.PUSH);
-    fontButton.setText("Pick Font");
-    fontButton.addSelectionListener(new SelectionListener() {
-      public void widgetDefaultSelected(SelectionEvent e) {
-      }
-      public void widgetSelected(SelectionEvent e) {
-        if (fontData != null) {
-          fontDialog.setFontData(fontData);
-        }
-        FontData data = fontDialog.open();
-        if (data != null) {
-          fontData = data;
-          updateFontDisplay();
-        }
-      }
-    });
-    Button defaultButton = new Button(composite, SWT.PUSH);
-    defaultButton.setText("Default Font");
-    defaultButton.addSelectionListener(new SelectionListener() {
-      public void widgetDefaultSelected(SelectionEvent e) {
-      }
-      public void widgetSelected(SelectionEvent e) {
-        fontData = null;
-        updateFontDisplay();
-      }
-    });
-
-    fontDisplay = new Label(composite, SWT.NULL);
-    GridData data = new GridData(GridData.FILL_HORIZONTAL);
-    data.grabExcessHorizontalSpace = true;
-    fontDisplay.setLayoutData(data);
-    updateFontDisplay();
-
-    ColorManager manager = new ColorManager();
-
-    Composite comp = new Composite(composite, SWT.NULL);
-    GridData layoutData = new GridData();
-    layoutData.horizontalSpan = 2;
-    comp.setLayoutData(layoutData);
-
-    Color defaultColor = manager.getColor(SQLColorConstants.DEFAULT);
-    backgroundColorEditor =
-      new ColorFieldEditor(
-        "phpeclipse.sql.background.color",
-        "Background Color",
-        comp);
-
-    Composite temp = new Composite(composite, SWT.NULL);
-    temp.setSize(0, 0);
-
-    comp = new Composite(composite, SWT.NULL);
-    layoutData = new GridData();
-    layoutData.horizontalSpan = 2;
-    comp.setLayoutData(layoutData);
-
-    textColorEditor =
-      new ColorFieldEditor(
-        "phpeclipse.sql.text.color",
-        "Default Text Color",
-        comp);
-
-    boldText = new Button(composite, SWT.CHECK);
-    boldText.setSelection(textFlag);
-    boldText.setText("Bold");
-    boldText.addSelectionListener(new SelectionListener() {
-      public void widgetDefaultSelected(SelectionEvent e) {
-      }
-      public void widgetSelected(SelectionEvent e) {
-        textFlag = boldText.getSelection();
-      }
-    });
-
-    comp = new Composite(composite, SWT.NULL);
-    layoutData = new GridData();
-    layoutData.horizontalSpan = 2;
-    comp.setLayoutData(layoutData);
-
-    keywordColorEditor =
-      new ColorFieldEditor(
-        "phpeclipse.sql.keyword.color",
-        "Keyword Text Color",
-        comp);
-
-    boldKeyword = new Button(composite, SWT.CHECK);
-    boldKeyword.setSelection(keywordFlag);
-    boldKeyword.setText("Bold");
-    boldKeyword.addSelectionListener(new SelectionListener() {
-      public void widgetDefaultSelected(SelectionEvent e) {
-      }
-      public void widgetSelected(SelectionEvent e) {
-        keywordFlag = boldKeyword.getSelection();
-      }
-    });
-
-    comp = new Composite(composite, SWT.NULL);
-    layoutData = new GridData();
-    layoutData.horizontalSpan = 2;
-    comp.setLayoutData(layoutData);
-
-    commentColorEditor =
-      new ColorFieldEditor(
-        "phpeclipse.sql.comment.color",
-        "Comment Text Color",
-        comp);
-
-    boldComment = new Button(composite, SWT.CHECK);
-    boldComment.setSelection(commentFlag);
-    boldComment.setText("Bold");
-    boldComment.addSelectionListener(new SelectionListener() {
-      public void widgetDefaultSelected(SelectionEvent e) {
-      }
-      public void widgetSelected(SelectionEvent e) {
-        commentFlag = boldComment.getSelection();
-      }
-    });
-
-    comp = new Composite(composite, SWT.NULL);
-    layoutData = new GridData();
-    layoutData.horizontalSpan = 2;
-    comp.setLayoutData(layoutData);
-
-    stringColorEditor =
-      new ColorFieldEditor(
-        "phpeclipse.sql.string.color",
-        "String Text Color",
-        comp);
-
-    boldString = new Button(composite, SWT.CHECK);
-    boldString.setSelection(stringFlag);
-    boldString.setText("Bold");
-    boldString.addSelectionListener(new SelectionListener() {
-      public void widgetDefaultSelected(SelectionEvent e) {
-      }
-      public void widgetSelected(SelectionEvent e) {
-        stringFlag = boldString.getSelection();
-      }
-    });
-
-    comp = new Composite(composite, SWT.NULL);
-    layoutData = new GridData();
-    layoutData.horizontalSpan = 2;
-    comp.setLayoutData(layoutData);
-
-    numericColorEditor =
-      new ColorFieldEditor(
-        "phpeclipse.sql.numeric.color",
-        "Numeric Text Color",
-        comp);
-
-    boldNumeric = new Button(composite, SWT.CHECK);
-    boldNumeric.setSelection(numericFlag);
-    boldNumeric.setText("Bold");
-    boldNumeric.addSelectionListener(new SelectionListener() {
-      public void widgetDefaultSelected(SelectionEvent e) {
-      }
-      public void widgetSelected(SelectionEvent e) {
-        numericFlag = boldNumeric.getSelection();
-      }
-    });
-
-    backgroundColorEditor.setPreferencePage(this);
-    backgroundColorEditor.setPreferenceStore(getPreferenceStore());
-    backgroundColorEditor.load();
-
-    textColorEditor.setPreferencePage(this);
-    textColorEditor.setPreferenceStore(getPreferenceStore());
-    textColorEditor.load();
-
-    keywordColorEditor.setPreferencePage(this);
-    keywordColorEditor.setPreferenceStore(getPreferenceStore());
-    keywordColorEditor.load();
-
-    commentColorEditor.setPreferencePage(this);
-    commentColorEditor.setPreferenceStore(getPreferenceStore());
-    commentColorEditor.load();
-
-    stringColorEditor.setPreferencePage(this);
-    stringColorEditor.setPreferenceStore(getPreferenceStore());
-    stringColorEditor.load();
-
-    numericColorEditor.setPreferencePage(this);
-    numericColorEditor.setPreferenceStore(getPreferenceStore());
-    numericColorEditor.load();
-
-    return composite;
-  }
-  public void updateFontDisplay() {
-    if (fontData == null) {
-      fontDisplay.setText("Font: default");
-    } else {
-      String style = "regular";
-      if (fontData.getStyle() == SWT.BOLD) {
-        style = "bold";
-      } else if (fontData.getStyle() == SWT.ITALIC) {
-        style = "italic";
-      } else if (fontData.getStyle() == (SWT.BOLD | SWT.ITALIC)) {
-        style = "bold italic";
-      }
-      fontDisplay.setText(
-        "Font: "
-          + fontData.getName()
-          + '-'
-          + style
-          + '-'
-          + fontData.getHeight());
-    }
-  }
-  public void updateFlags() {
-    boldText.setSelection(textFlag);
-    boldKeyword.setSelection(keywordFlag);
-    boldString.setSelection(stringFlag);
-    boldNumeric.setSelection(numericFlag);
-    boldComment.setSelection(commentFlag);
-  }
+public class PreferencesPage extends PreferencePage
+	implements IWorkbenchPreferencePage {
+	FontDialog fontDialog;
+	ColorFieldEditor backgroundColorEditor;
+	
+	ColorFieldEditor textColorEditor;
+	boolean textFlag;
+	ColorFieldEditor keywordColorEditor;
+	boolean keywordFlag;
+	ColorFieldEditor stringColorEditor;
+	boolean stringFlag;
+	ColorFieldEditor numericColorEditor;
+	boolean numericFlag;
+	ColorFieldEditor commentColorEditor;
+	boolean commentFlag;
+	
+	Button boldText;
+	Button boldKeyword;
+	Button boldString;
+	Button boldNumeric;
+	Button boldComment;
+	
+	IWorkbench workbench;
+	FontData fontData;
+	Label fontDisplay;
+	public void init(IWorkbench workbench) {
+		//Initialize the preference store
+		this.workbench = workbench;
+		setPreferenceStore(PHPEclipseSQLPlugin.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,
+									  "phpeclipse.sql.background.color",BACKGROUND);
+		PreferenceConverter.setDefault(store, 
+									   "phpeclipse.sql.text.color", DEFAULT);
+		PreferenceConverter.setDefault(store,
+									  "phpeclipse.sql.keyword.color",KEYWORD); //$NON-NLS-1$
+		PreferenceConverter.setDefault(store,
+									  "phpeclipse.sql.comment.color",COMMENT); //$NON-NLS-1$
+		PreferenceConverter.setDefault(store,
+									  "phpeclipse.sql.string.color",STRING); //$NON-NLS-1$
+		PreferenceConverter.setDefault(store,
+									  "phpeclipse.sql.numeric.color",
+									  NUMERIC);
+	}
+
+	protected void performDefaults() {
+		fontData = null;
+		updateFontDisplay();
+		textFlag = false;
+		keywordFlag = true;
+		stringFlag = false;
+		numericFlag = false;
+		commentFlag = false;
+		updateFlags();
+		backgroundColorEditor.loadDefault();
+		textColorEditor.loadDefault();
+		keywordColorEditor.loadDefault();
+		stringColorEditor.loadDefault();
+		commentColorEditor.loadDefault();
+		numericColorEditor.loadDefault();
+	}
+	/** 
+	 * Save the preferences to the preference store.
+	 */
+	public boolean performOk() {
+		PreferenceConverter.setValue(getPreferenceStore(), "phpeclipse.sql.font", fontData);
+		getPreferenceStore().setValue("phpeclipse.sql.text.bold", textFlag); //$NON-NLS-1$
+		getPreferenceStore().setValue("phpeclipse.sql.keyword.bold", keywordFlag); //$NON-NLS-1$
+		getPreferenceStore().setValue("phpeclipse.sql.string.bold", stringFlag); //$NON-NLS-1$
+		getPreferenceStore().setValue("phpeclipse.sql.comment.bold", commentFlag); //$NON-NLS-1$
+		getPreferenceStore().setValue("phpeclipse.sql.numeric.bold", numericFlag); //$NON-NLS-1$
+		backgroundColorEditor.store();
+		textColorEditor.store();
+		keywordColorEditor.store();
+		stringColorEditor.store();
+		commentColorEditor.store();
+		numericColorEditor.store();
+		return super.performOk();
+	}
+	protected Control createContents(Composite parent) {
+		Composite main = new Composite(parent, SWT.NULL);
+		
+		GridLayout innerLayout = new GridLayout();
+		innerLayout.numColumns = 4;
+		main.setLayout(innerLayout);
+
+		fontData =
+		PreferenceConverter.getFontData(
+									   getPreferenceStore(),
+									   "phpeclipse.sql.font");
+		textFlag = getPreferenceStore().getBoolean("phpeclipse.sql.text.bold");
+		keywordFlag =
+		getPreferenceStore().getBoolean("phpeclipse.sql.keyword.bold");
+		stringFlag = getPreferenceStore().getBoolean("phpeclipse.sql.string.bold");
+		commentFlag =
+		getPreferenceStore().getBoolean("phpeclipse.sql.comment.bold");
+		numericFlag =
+		getPreferenceStore().getBoolean("phpeclipse.sql.numeric.bold");
+
+		fontDialog =
+		new FontDialog(workbench.getActiveWorkbenchWindow().getShell());
+		Button fontButton = new Button(main, SWT.PUSH);
+		fontButton.setText("Pick Font");
+		fontButton.addSelectionListener(new SelectionListener() {
+			public void widgetDefaultSelected(SelectionEvent e) {
+			}
+			public void widgetSelected(SelectionEvent e) {
+				if (fontData != null) {
+					fontDialog.setFontData(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 = null;
+				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();
+
+		Composite comp = new Composite(main, SWT.NULL);
+		GridData layoutData = new GridData();
+		layoutData.horizontalSpan = 2;
+		comp.setLayoutData(layoutData);
+		
+		manager.getColor(SQLColorConstants.DEFAULT);
+		backgroundColorEditor =
+		new ColorFieldEditor(
+							"phpeclipse.sql.background.color", //$NON-NLS-1$
+				Messages.getString("PreferencesPage.BackgroundColor"), //$NON-NLS-1$
+				comp);				
+
+		Composite temp = new Composite(main, SWT.NULL);
+		temp.setSize(0, 0);
+		
+		comp = new Composite(main, SWT.NULL);
+		layoutData = new GridData();
+		layoutData.horizontalSpan = 2;
+		comp.setLayoutData(layoutData);
+		
+		textColorEditor =
+			new ColorFieldEditor(
+							"phpeclipse.sql.text.color", //$NON-NLS-1$
+				Messages.getString("PreferencesPage.DefaultTextColor"), //$NON-NLS-1$
+				comp);				
+
+		boldText = new Button(main, SWT.CHECK);
+		boldText.setSelection(textFlag);
+		boldText.setText(Messages.getString("PreferencesPage.Bold")); //$NON-NLS-1$
+		boldText.addSelectionListener(new SelectionListener() {
+			public void widgetDefaultSelected(SelectionEvent e) {
+			}
+			public void widgetSelected(SelectionEvent e) {
+				textFlag = boldText.getSelection();
+			}
+		});
+
+		comp = new Composite(main, SWT.NULL);
+		layoutData = new GridData();
+		layoutData.horizontalSpan = 2;
+		comp.setLayoutData(layoutData);
+
+		keywordColorEditor =
+			new ColorFieldEditor(
+							"phpeclipse.sql.keyword.color", //$NON-NLS-1$
+				Messages.getString("PreferencesPage.KeywordTextColor"), //$NON-NLS-1$
+				comp);
+
+		boldKeyword = new Button(main, SWT.CHECK);
+		boldKeyword.setSelection(keywordFlag);
+		boldKeyword.setText(Messages.getString("PreferencesPage.Bold")); //$NON-NLS-1$
+		boldKeyword.addSelectionListener(new SelectionListener() {
+			public void widgetDefaultSelected(SelectionEvent e) {
+			}
+			public void widgetSelected(SelectionEvent e) {
+				keywordFlag = boldKeyword.getSelection();
+			}
+		});
+
+		comp = new Composite(main, SWT.NULL);
+		layoutData = new GridData();
+		layoutData.horizontalSpan = 2;
+		comp.setLayoutData(layoutData);
+
+		commentColorEditor =
+			new ColorFieldEditor(
+							"phpeclipse.sql.comment.color", //$NON-NLS-1$
+				Messages.getString("PreferencesPage.CommentTextColor"), //$NON-NLS-1$
+				comp);
+
+		boldComment = new Button(main, SWT.CHECK);
+		boldComment.setSelection(commentFlag);
+		boldComment.setText(Messages.getString("PreferencesPage.Bold")); //$NON-NLS-1$
+		boldComment.addSelectionListener(new SelectionListener() {
+			public void widgetDefaultSelected(SelectionEvent e) {
+			}
+			public void widgetSelected(SelectionEvent e) {
+				commentFlag = boldComment.getSelection();
+			}
+		});
+
+		comp = new Composite(main, SWT.NULL);
+		layoutData = new GridData();
+		layoutData.horizontalSpan = 2;
+		comp.setLayoutData(layoutData);
+
+		stringColorEditor =
+			new ColorFieldEditor(
+							"phpeclipse.sql.string.color", //$NON-NLS-1$
+				Messages.getString("PreferencesPage.StringTextColor"), //$NON-NLS-1$
+				comp);
+
+		boldString = new Button(main, SWT.CHECK);
+		boldString.setSelection(stringFlag);
+		boldString.setText(Messages.getString("PreferencesPage.Bold")); //$NON-NLS-1$
+		boldString.addSelectionListener(new SelectionListener() {
+			public void widgetDefaultSelected(SelectionEvent e) {
+			}
+			public void widgetSelected(SelectionEvent e) {
+				stringFlag = boldString.getSelection();
+			}
+		});
+
+		comp = new Composite(main, SWT.NULL);
+		layoutData = new GridData();
+		layoutData.horizontalSpan = 2;
+		comp.setLayoutData(layoutData);
+
+		numericColorEditor =
+			new ColorFieldEditor(
+							"phpeclipse.sql.numeric.color", //$NON-NLS-1$
+				Messages.getString("PreferencesPage.NumericTextColor"), //$NON-NLS-1$
+				comp);
+
+		boldNumeric = new Button(main, SWT.CHECK);
+		boldNumeric.setSelection(numericFlag);
+		boldNumeric.setText(Messages.getString("PreferencesPage.Bold")); //$NON-NLS-1$
+		boldNumeric.addSelectionListener(new SelectionListener() {
+			public void widgetDefaultSelected(SelectionEvent e) {
+			}
+			public void widgetSelected(SelectionEvent e) {
+				numericFlag = boldNumeric.getSelection();
+			}
+		});
+
+		backgroundColorEditor.setPreferencePage(this);
+		backgroundColorEditor.setPreferenceStore(getPreferenceStore());
+		backgroundColorEditor.load();
+		
+		textColorEditor.setPreferencePage(this);
+		textColorEditor.setPreferenceStore(getPreferenceStore());
+		textColorEditor.load();
+		
+		keywordColorEditor.setPreferencePage(this);
+		keywordColorEditor.setPreferenceStore(getPreferenceStore());
+		keywordColorEditor.load();
+		
+		commentColorEditor.setPreferencePage(this);
+		commentColorEditor.setPreferenceStore(getPreferenceStore());
+		commentColorEditor.load();
+		
+		stringColorEditor.setPreferencePage(this);
+		stringColorEditor.setPreferenceStore(getPreferenceStore());
+		stringColorEditor.load();
+
+		numericColorEditor.setPreferencePage(this);
+		numericColorEditor.setPreferenceStore(getPreferenceStore());
+		numericColorEditor.load();
+
+		return main;
+	}
+	public void updateFontDisplay() {
+		if (fontData == null) {
+			fontDisplay.setText(Messages.getString("PreferencesPage.Font_Default")); //$NON-NLS-1$
+		} else {
+			String style = Messages.getString("PreferencesPage.regular"); //$NON-NLS-1$
+			if (fontData.getStyle() == SWT.BOLD) {
+				style = Messages.getString("PreferencesPage.bold"); //$NON-NLS-1$
+			} else if (fontData.getStyle() == SWT.ITALIC) {
+				style = Messages.getString("PreferencesPage.italic"); //$NON-NLS-1$
+			} else if (fontData.getStyle() == (SWT.BOLD | SWT.ITALIC)) {
+				style = Messages.getString("PreferencesPage.boldItalic"); //$NON-NLS-1$
+			}
+			fontDisplay.setText(Messages.getString("PreferencesPage.FontPrompt") + fontData.getName() + '-' + style + '-' + fontData.getHeight()); //$NON-NLS-1$
+		}
+	}
+	public void updateFlags() {
+		boldText.setSelection(textFlag);
+		boldKeyword.setSelection(keywordFlag);
+		boldString.setSelection(stringFlag);
+		boldNumeric.setSelection(numericFlag);
+		boldComment.setSelection(commentFlag);
+	}
 }
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/ConnectionEstablisher.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/ConnectionEstablisher.java
new file mode 100644
index 0000000..3b53e6b
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/ConnectionEstablisher.java
@@ -0,0 +1,16 @@
+package net.sourceforge.phpdt.sql.sql;
+
+import java.sql.Connection;
+
+import net.sourceforge.phpdt.sql.bookmarks.Bookmark;
+;
+
+/**
+ * @author BC
+ */
+public interface ConnectionEstablisher {
+    
+    public Connection connect(Bookmark bookmark);
+    public void disconnect(Bookmark bookmark, Connection connection);
+
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/DbElementsConstants.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/DbElementsConstants.java
new file mode 100644
index 0000000..b2a4b00
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/DbElementsConstants.java
@@ -0,0 +1,18 @@
+/*
+ * Created on 8/07/2003
+ *
+ * To change the template for this generated file go to
+ * Window>Preferences>Java>Code Generation>Code and Comments
+ */
+package net.sourceforge.phpdt.sql.sql;
+
+/**
+ * @author panic
+ * Constants for the different types of database elements that we can access
+ */
+public interface DbElementsConstants {
+	String Table = "TABLE";
+	String View = "VIEW";
+	String Sequence = "SEQUENCE";
+	
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/FilterSort.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/FilterSort.java
index 68a7e68..36afc66 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/FilterSort.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/FilterSort.java
@@ -25,31 +25,31 @@ public class FilterSort {
 	public String toString() {
 		StringBuffer text = new StringBuffer();
 		if (filterList.size() > 0) {
-			text.append(" WHERE ");
+			text.append(" WHERE "); //$NON-NLS-1$
 			for (int i = 0; i < filterList.size(); i++) {
 				FilterRow row = (FilterRow) filterList.get(i);
 				text.append(row.column);
-				text.append(" ");
+				text.append(" "); //$NON-NLS-1$
 				text.append(row.operator);
-				text.append(" ");
+				text.append(" "); //$NON-NLS-1$
 				if (row.isString) {
 					text.append(escape(row.value));
 				} else {
 					text.append(row.value);
 				}
-				text.append(" ");
+				text.append(" "); //$NON-NLS-1$
 				if (i < filterList.size() - 1) {
-					text.append("AND ");
+					text.append("AND "); //$NON-NLS-1$
 				}
 			}
 		}
 		if (sortList.size() > 0) {
-			text.append(" ORDER BY ");
+			text.append(" ORDER BY "); //$NON-NLS-1$
 			for (int i = 0; i < sortList.size(); i++) {
 				String value = (String) sortList.get(i);
 				text.append(value);
 				if (i < sortList.size() - 1) {
-					text.append(",");
+					text.append(","); //$NON-NLS-1$
 				}
 			}
 		}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/MultiSQLServer.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/MultiSQLServer.java
index 1a97c9f..346a25d 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/MultiSQLServer.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/MultiSQLServer.java
@@ -3,9 +3,7 @@ package net.sourceforge.phpdt.sql.sql;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.InputStream;
-import java.io.PrintWriter;
 import java.io.Reader;
-import java.io.StringWriter;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.sql.Connection;
@@ -17,516 +15,467 @@ import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.ArrayList;
 import java.util.Hashtable;
+import java.util.List;
 import java.util.Properties;
+import java.util.StringTokenizer;
 import java.util.Vector;
 
-import net.sourceforge.phpdt.sql.IConstants;
-import net.sourceforge.phpdt.sql.adapters.AdapterFactory;
-import net.sourceforge.phpdt.sql.adapters.DatabaseAdapter;
-import net.sourceforge.phpdt.sql.adapters.NoSuchAdapterException;
+import org.apache.xml.utils.IntVector;
+
 import net.sourceforge.phpdt.sql.bookmarks.Bookmark;
-import net.sourceforge.phpdt.sql.view.LogConstants;
+import net.sourceforge.phpdt.sql.sql.metadata.MetaDataJDBCInterface;
+import net.sourceforge.phpdt.sql.sql.metadata.ObjectMetaData;
 import net.sourceforge.phpdt.sql.view.LogProxy;
+import net.sourceforge.phpdt.sql.view.bookmark.TableNode;
+import net.sourceforge.phpdt.sql.view.bookmark.TreeNode;
 
-public class MultiSQLServer extends Thread implements IConstants, LogConstants {
-  private static final int STREAM = 1024 * 2;
-  public static final String USERNAME = "user";
-  public static final String PASSWORD = "password";
-  private static MultiSQLServer instance = null;
-  private Hashtable classLoaderCache = new Hashtable();
-  private Connection con = null;
-  boolean running = true;
-  private Bookmark current = null;
-  private MultiSQLServer() {
-    //start();
-  }
-  public synchronized static MultiSQLServer getInstance() {
-    if (instance == null) {
-      instance = new MultiSQLServer();
-    }
-    return instance;
-  }
-  
-  public Bookmark getConnected() {
-    return current;
-  }
-
-  public void commit() {
-    LogProxy log = LogProxy.getInstance();
-    try {
-      con.commit();
-    } catch (SQLException e) {
-      log.addText(ERROR, "Error commiting: " + e);
-      StringWriter writer = new StringWriter();
-      e.printStackTrace(new PrintWriter(writer));
-      log.addText(ERROR, writer.toString());
-    }
-  }
-
-  public void rollback() {
-    LogProxy log = LogProxy.getInstance();
-    try {
-      con.rollback();
-    } catch (SQLException e) {
-      log.addText(ERROR, "Error rolling back: " + e);
-      StringWriter writer = new StringWriter();
-      e.printStackTrace(new PrintWriter(writer));
-      log.addText(ERROR, writer.toString());
-    }
-  }
-
-  public void setAutoCommit(boolean enabled) {
-    LogProxy log = LogProxy.getInstance();
-    try {
-      if (con != null) {
-        con.setAutoCommit(enabled);
-      } else {
-        log.addText(ERROR, "Please connect before setting autocommit");
-      }
-    } catch (SQLException e) {
-      log.addText(ERROR, "Error setting autocommit: " + e);
-      StringWriter writer = new StringWriter();
-      e.printStackTrace(new PrintWriter(writer));
-      log.addText(ERROR, writer.toString());
-    }
-  }
-
-  public DatabaseAdapter getCurrentAdapter() {
-    LogProxy log = LogProxy.getInstance();
-    try {
-      AdapterFactory factory = AdapterFactory.getInstance();
-      return factory.getAdapter(current.getType());
-    } catch (NoSuchAdapterException e) {
-      log.addText(
-        ERROR,
-        "Invalid database type: ->" + current.getType() + "<-");
-    }
-    return null;
-  }
-  public void disconnect(Bookmark b) {
-    current = null;
-    LogProxy log = LogProxy.getInstance();
-
-    try {
-      con.close();
-      con = null;
-      log.addText(RESULTS, "Disconnected from: " + b.getName());
-    } catch (Exception e) {
-      log.addText(
-        ERROR,
-        "Error Disonnecting to: " + b.getName() + ":" + e.toString());
-      StringWriter writer = new StringWriter();
-      e.printStackTrace(new PrintWriter(writer));
-      log.addText(ERROR, writer.toString());
-
-    }
-  }
-  public void shutdown() {
-    LogProxy log = LogProxy.getInstance();
-    try {
-      if (con != null) {
-        con.close();
-      }
-      con = null;
-    } catch (SQLException e) {
-      StringWriter writer = new StringWriter();
-      e.printStackTrace(new PrintWriter(writer));
-      log.addText(ERROR, writer.toString());
-    }
-  }
+/**
+ * 
+ * MultiSQLServer is a Singleton, used  as a interface with the sql drivers
+ * Use MultiSQLServer.getInstance() to get the object
+ */
+public class MultiSQLServer implements ConnectionEstablisher {
+	private static final int STREAM = 1024 * 2;
+	public static final String USERNAME = "user"; //$NON-NLS-1$
+	public static final String PASSWORD = "password"; //$NON-NLS-1$
+	private static MultiSQLServer instance = null;
+	private Hashtable classLoaderCache = new Hashtable();
+	boolean running = true;
+	
+	public MultiSQLServer() {
+		//start();
+	}
+	public synchronized static MultiSQLServer getInstance() {
+		if (instance == null) {
+			instance = new MultiSQLServer();
+		}
+		return instance;
+	}
+	
+	public void commit(Connection con) {
+		LogProxy log = LogProxy.getInstance();
+		try {
+			con.commit();
+		} catch (SQLException e) {
+			log.addText(LogProxy.ERROR, "Error commiting: " + e, e); //$NON-NLS-1$
+		}
+	}
+	
+	public void rollback(Connection con) {
+		LogProxy log = LogProxy.getInstance();
+		try {
+			con.rollback();
+		} catch (SQLException e) {
+			log.addText(LogProxy.ERROR, "Error rolling back: " + e, e); //$NON-NLS-1$
+		}
+	}
 
-  public void dumpDatabaseData() {
-    LogProxy log = LogProxy.getInstance();
-    try {
-      DatabaseMetaData metadata = con.getMetaData();
-      log.addText(
-        WARNING,
-        "[METADATA] Database type: " + metadata.getDatabaseProductName());
-      if (metadata.supportsCatalogsInDataManipulation()) {
-        log.addText(
-          WARNING,
-          "[METADATA] Database does support catalog in data manipulation");
-      } else {
-        log.addText(
-          WARNING,
-          "[METADATA] Database does not support catalog in data manipulation");
-      }
-      if (metadata.supportsSchemasInDataManipulation()) {
-        log.addText(
-          WARNING,
-          "[METADATA] Database does support schema in data manipulation");
-      } else {
-        log.addText(
-          WARNING,
-          "[METADATA] Database does not support schema in data manipulation");
-      }
-      if (metadata.supportsCatalogsInTableDefinitions()) {
-        log.addText(
-          WARNING,
-          "[METADATA] Database does support catalogs in table definitions");
-      } else {
-        log.addText(
-          WARNING,
-          "[METADATA] Database does not support catalogs in table definitions");
-      }
-      log.addText(
-        WARNING,
-        "[METADATA] Catalog Separator: " + metadata.getCatalogSeparator());
-      log.addText(
-        WARNING,
-        "[METADATA] Catalog Term: " + metadata.getCatalogTerm());
-      ResultSet set = metadata.getCatalogs();
-      ArrayList catalogList = new ArrayList();
-      catalogList.add(null);
-      while (set.next()) {
-        catalogList.add(set.getString(1));
-      }
-      set.close();
-      StringBuffer catalogOutput = new StringBuffer();
-      catalogOutput.append("[CATALOG LIST] [");
-      for (int i = 0; i < catalogList.size(); i++) {
-        String name = (String) catalogList.get(i);
-        catalogOutput.append(name + ", ");
-      }
-      catalogOutput.append("]");
-      log.addText(WARNING, catalogOutput.toString());
+	public void setAutoCommit(Connection con, boolean enabled) {
+		LogProxy log = LogProxy.getInstance();
+		try {
+			if (con != null) {
+				con.setAutoCommit(enabled);
+			} else {
+				log.addText(LogProxy.ERROR, "Please connect before setting autocommit"); //$NON-NLS-1$
+			}
+		} catch (SQLException e) {
+			log.addText(LogProxy.ERROR, "Error setting autocommit: " + e, e); //$NON-NLS-1$
+		}
+	}
+	
+	public void disconnect(Bookmark b, Connection con) {
+		LogProxy log = LogProxy.getInstance();
+		try {
+			con.close();
+			b.setConnection(null);
+			log.addText(LogProxy.RESULTS, "Disconnected from: " + b.getName()); //$NON-NLS-1$
+		} catch (Exception e) {
+			log.addText(
+				LogProxy.ERROR,
+				"Error Disonnecting to: " + b.getName() + ":" + e.toString(), e); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+	
+	public void dumpDatabaseData(Connection con) {
+		LogProxy log = LogProxy.getInstance();
+		try {
+			DatabaseMetaData meta = con.getMetaData();
+			log.addText(LogProxy.WARNING, "[METADATA] Database type: " + meta.getDatabaseProductName()); //$NON-NLS-1$
+			if (meta.supportsCatalogsInDataManipulation()) {
+				log.addText(LogProxy.WARNING, "[METADATA] Database does support catalog in data manipulation"); //$NON-NLS-1$
+			} else {
+				log.addText(LogProxy.WARNING, "[METADATA] Database does not support catalog in data manipulation"); //$NON-NLS-1$
+			}
+			if (meta.supportsSchemasInDataManipulation()) {
+				log.addText(LogProxy.WARNING, "[METADATA] Database does support schema in data manipulation"); //$NON-NLS-1$
+			} else {
+				log.addText(LogProxy.WARNING, "[METADATA] Database does not support schema in data manipulation"); //$NON-NLS-1$
+			}
+			if (meta.supportsCatalogsInTableDefinitions()) {
+				log.addText(LogProxy.WARNING, "[METADATA] Database does support catalogs in table definitions"); //$NON-NLS-1$
+			} else {
+				log.addText(LogProxy.WARNING, "[METADATA] Database does not support catalogs in table definitions"); //$NON-NLS-1$
+			}
+			log.addText(LogProxy.WARNING, "[METADATA] Catalog Separator: " + meta.getCatalogSeparator()); //$NON-NLS-1$
+			log.addText(LogProxy.WARNING, "[METADATA] Catalog Term: " + meta.getCatalogTerm()); //$NON-NLS-1$
+			ResultSet set = meta.getCatalogs();
+			ArrayList catalogList = new ArrayList();
+			catalogList.add(null);
+			while (set.next()) {
+				catalogList.add(set.getString(1));
+			}
+			set.close();
+			StringBuffer catalogOutput = new StringBuffer();
+			catalogOutput.append("[CATALOG LIST] ["); //$NON-NLS-1$
+			for (int i = 0; i < catalogList.size(); i++) {
+				String name = (String) catalogList.get(i);
+				catalogOutput.append(name + ", "); //$NON-NLS-1$
+			}
+			catalogOutput.append("]"); //$NON-NLS-1$
+			log.addText(LogProxy.WARNING, catalogOutput.toString());
+			
+			set = meta.getSchemas();
+			ArrayList schemaList = new ArrayList();
+			schemaList.add(""); //$NON-NLS-1$
+			while (set.next()) {
+				schemaList.add(set.getString(1));
+			}
+			set.close();
+			StringBuffer schemaOutput = new StringBuffer();
+			schemaOutput.append("[SCHEMA LIST] ["); //$NON-NLS-1$
+			for (int i = 0; i < schemaList.size(); i++) {
+				String name = (String) schemaList.get(i);
+				schemaOutput.append(name + ", "); //$NON-NLS-1$
+			}
+			schemaOutput.append("]"); //$NON-NLS-1$
+			log.addText(LogProxy.WARNING, schemaOutput.toString());
 
-      set = metadata.getSchemas();
-      ArrayList schemaList = new ArrayList();
-      schemaList.add("");
-      while (set.next()) {
-        schemaList.add(set.getString(1));
-      }
-      set.close();
-      StringBuffer schemaOutput = new StringBuffer();
-      schemaOutput.append("[SCHEMA LIST] [");
-      for (int i = 0; i < schemaList.size(); i++) {
-        String name = (String) schemaList.get(i);
-        schemaOutput.append(name + ", ");
-      }
-      schemaOutput.append("]");
-      log.addText(WARNING, schemaOutput.toString());
-
-      ArrayList tableTypes = new ArrayList();
-      set = metadata.getTableTypes();
-      while (set.next()) {
-        tableTypes.add(set.getString(1));
-      }
-      set.close();
-
-      StringBuffer tableListOutput = new StringBuffer();
-      tableListOutput.append("[TABLE LIST] [");
-      for (int i = 0; i < tableTypes.size(); i++) {
-        String name = (String) tableTypes.get(i);
-        tableListOutput.append(name + ", ");
-      }
-      tableListOutput.append("]");
-      log.addText(WARNING, tableListOutput.toString());
-
-    } catch (Exception e) {
-      log.addText(ERROR, "Error occured: " + e);
-      StringWriter writer = new StringWriter();
-      e.printStackTrace(new PrintWriter(writer));
-      log.addText(ERROR, writer.toString());
-    }
-  }
-  /**
-   * type = "TABLE" "VIEW" "SEQUENCE"
-   */
-  public Vector listTables(String schema, String type) {
-    LogProxy log = LogProxy.getInstance();
-    Vector retVal = new Vector();
-    log.addText(QUERY, "Retrieving list [" + type + "]");
-    try {
-      DatabaseMetaData meta = con.getMetaData();
-      ResultSet set = meta.getTableTypes();
-      int columnCount = set.getMetaData().getColumnCount();
-      if (DEBUG) {
-        for (int i = 1; i <= columnCount; i++) {
-          System.out.print(set.getMetaData().getColumnName(i) + "\t");
-        }
-        System.out.println();
-        while (set.next()) {
-          for (int i = 1; i <= columnCount; i++) {
-            System.out.print(set.getString(i) + "\t");
-          }
-          System.out.println();
-        }
-      }
-      Vector types = new Vector();
-      set = meta.getTableTypes();
-      while (set.next()) {
-        types.add(set.getString(1));
-      }
-      set.close();
-      if (types.contains(type)) {
-        set = meta.getTables(null, schema, "%", new String[] { type });
+            List tableTypes = getTableTypes(meta);
+			
+			StringBuffer tableListOutput = new StringBuffer();
+			tableListOutput.append("[TABLE LIST] ["); //$NON-NLS-1$
+			for (int i = 0; i < tableTypes.size(); i++) {
+				String name = (String) tableTypes.get(i);
+				tableListOutput.append(name + ", "); //$NON-NLS-1$
+			}
+			tableListOutput.append("]"); //$NON-NLS-1$
+			log.addText(LogProxy.WARNING, tableListOutput.toString());
+			
+			
+		} catch (Exception e) {
+            log.addText(LogProxy.ERROR, e);
+		}
+	}
+    private List getTableTypes(DatabaseMetaData meta) throws SQLException {
+        ArrayList tableTypes = new ArrayList();
+        ResultSet set = meta.getTableTypes();
         while (set.next()) {
-          String name = set.getString("TABLE_NAME");
-          String tableType = set.getString("TABLE_TYPE");
-          //System.out.println(name + ":" + tableType);
-          retVal.addElement(name);
+            String type = set.getString(1);
+            if (type != null) {
+        		tableTypes.add(type.trim());
+            }
         }
         set.close();
-      }
-      log.addText(RESULTS, "Success");
-    } catch (SQLException e) {
-      log.addText(ERROR, "Error occured: " + e);
-      StringWriter writer = new StringWriter();
-      e.printStackTrace(new PrintWriter(writer));
-      log.addText(ERROR, writer.toString());
+        return tableTypes;
     }
-    return retVal;
-  }
-  public boolean connect(Bookmark b) {
-    LogProxy log = LogProxy.getInstance();
-    log.addText(QUERY, "Connecting to: " + b.getName());
-    URL urls[] = new URL[1];
-    try {
-      String driverFile = b.getDriverFile();
-      URLClassLoader loader = (URLClassLoader) classLoaderCache.get(driverFile);
-      if (loader == null) {
-        urls[0] = new File(driverFile).toURL();
-        loader = new URLClassLoader(urls);
-        classLoaderCache.put(driverFile, loader);
-        if (DEBUG) {
-          System.out.println("Creating new classloader");
-        }
-      } else {
-        if (DEBUG) {
-          System.out.println("Using classloader in cache");
-        }
-      }
-      Class driverClass = loader.loadClass(b.getDriver());
-      Driver driver = (Driver) driverClass.newInstance();
-      Properties props = new Properties();
-      props.put(USERNAME, b.getUsername());
-      props.put(PASSWORD, b.getPassword());
-      con = driver.connect(b.getConnect(), props);
-      if (con == null) {
-        throw new Exception(
-          "Error: Driver returned a null connection: " + b.toString());
-      }
-      current = b;
-      log.addText(RESULTS, "Connected to: " + b.getName());
-      if (DEBUG) {
-        System.out.println("Connected");
-      }
-      return true;
-    } catch (Exception e) {
-      log.addText(
-        ERROR,
-        "Error Connecting to: " + b.getName() + ":" + e.toString());
-      StringWriter writer = new StringWriter();
-      e.printStackTrace(new PrintWriter(writer));
-      log.addText(ERROR, writer.toString());
-    }
-    return false;
-  }
-  public SQLResults execute(String s) {
-    return execute(s, -1, -1);
-  }
-  public SQLResults execute(String s, int startRow, int endRow) {
-    return execute(s, -1, -1, Integer.MAX_VALUE);
-  }
-  public SQLResults execute(
-    String s,
-    int startRow,
-    int endRow,
-    int maxLength) {
-    return execute(s, startRow, endRow, maxLength, "");
-  }
-  public SQLResults execute(
-    String s,
-    int startRow,
-    int endRow,
-    int maxLength,
-    String encoding) {
-    SQLResults results = new SQLResults();
+//	/**
+//	 * @param con
+//	 * @param schema
+//	 * @param type	of the element "TABLE", "VIEW", "SEQUENCE"
+//	 * @return
+//	 */
+//	public Vector listElements(Connection con, String schema, String type) {
+//		LogProxy log = LogProxy.getInstance();
+//		Vector retVal = new Vector(50,5);
+//		log.addText(LogProxy.QUERY, "Retrieving list [" + type + "]"); //$NON-NLS-1$ //$NON-NLS-2$
+//		try {
+//			DatabaseMetaData meta = con.getMetaData();
+//			List types = getTableTypes(meta);
+//			if (types.contains(type)) {
+//				ResultSet set = meta.getTables(
+//                    null, null, "%", new String[] {type}); //$NON-NLS-1$
+//				while (set.next()) {
+//					String tableSchema = set.getString("TABLE_SCHEM");  
+//                    tableSchema = (tableSchema == null) ? "" : tableSchema.trim();
+//					String tableName = set.getString("TABLE_NAME").trim(); //$NON-NLS-1$
+//                    if (tableName.length() > 0) 
+//                        retVal.addElement(((tableSchema.length() > 0) ? tableSchema + "." : "") + tableName);
+//				}
+//				set.close();
+//			}
+//			log.addText(LogProxy.RESULTS, "Success"); //$NON-NLS-1$
+//			
+//		} catch (SQLException e) {
+//			log.addText(LogProxy.ERROR, e);
+//		}
+//		return retVal;
+//	}
 
-    if (DEBUG) {
-      System.out.println("Executing");
-    }
-    LogProxy log = LogProxy.getInstance();
-    log.addText(QUERY, "Executing Request [" + s + "]");
-    boolean metadata = false;
-    if (s.startsWith("METADATA")) {
-      metadata = true;
-    }
-    if (metadata) {
-      results.setQuery(s);
-      String table = s.substring(s.indexOf(':') + 1);
-      String schema = current.getSchema();
-      String query = "SELECT * FROM " + schema + "." + table;
-      if (schema.equals("")) {
-        query = "SELECT * FROM " + table;
-      }
-      s = query;
-      log.addText(QUERY, "Metadata Request [" + s + "]");
-    } else {
-      results.setQuery(s);
-    }
-    try {
-      Statement stmt = con.createStatement();
-      boolean flag = stmt.execute(s);
-      results.setResultSet(flag);
-      if (!flag) {
-        int updates = stmt.getUpdateCount();
-        results.setUpdateCount(updates);
-        log.addText(RESULTS, "Success: " + updates + " records updated");
+	/**
+	 * Makes a connection to a JDBC driver based on the data from a bookmark
+	 * @param b The Bookmark with the data needed to make the connection
+	 * @return The Connection object if everything went OK
+	 */
+	public Connection connect(Bookmark b) {
+		Connection con;
+		LogProxy log = LogProxy.getInstance();
+		log.addText(LogProxy.QUERY, "Connecting to: " + b.getName()); //$NON-NLS-1$
+		URL urls[] = new URL[1];
+		try {
+			String driverFile = b.getDriverFile();
+			URLClassLoader loader = (URLClassLoader) classLoaderCache.get(driverFile);
+			if (loader == null) {
+				urls[0] = new File(driverFile).toURL();
+				loader = new URLClassLoader(urls);
+				classLoaderCache.put(driverFile, loader);
+				System.out.println("Creating new classloader"); //$NON-NLS-1$
+			} else {
+				System.out.println("Using classloader in cache"); //$NON-NLS-1$
+			}
+			Class driverClass = loader.loadClass(b.getDriver());
+			Driver driver = (Driver) driverClass.newInstance();
+			Properties props = new Properties();
+			props.put(USERNAME, b.getUsername());
+			props.put(PASSWORD, b.getPassword());
+			con = driver.connect(b.getConnect(), props);
+			if (con == null) {
+				throw new Exception("Error: Driver returned a null connection: " + b.toString()); //$NON-NLS-1$
+			}
+			log.addText(LogProxy.RESULTS, "Connected to: " + b.getName()); //$NON-NLS-1$
+			System.out.println("Connected"); //$NON-NLS-1$
+			return con;
+		} catch (Exception e) {
+			//log.addText(
+			//	LogProxy.ERROR,
+			//	"Error Connecting to: " + b.getName() + ":" + e.toString(), e); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		return null;
+	}
+	public SQLResults execute(Connection con, String s) {
+		return execute(con, s, -1, -1);
+	}
+	public SQLResults execute(Connection con, String s, int startRow, int endRow) {
+		return execute(con, s, -1, -1, Integer.MAX_VALUE);
+	}
+	public SQLResults execute(Connection con, String s, int startRow, int endRow, int maxLength) {
+		return execute(con, s, startRow, endRow, maxLength, ""); //$NON-NLS-1$
+	}
+	public SQLResults execute(Connection con, String s, int startRow, int endRow, int maxLength, String encoding) {
+		SQLResults results = new SQLResults();
 
-      } else {
-        if (metadata) {
-          ResultSet set = stmt.getResultSet();
-          ResultSetMetaData metaData = set.getMetaData();
-          int columnCount = metaData.getColumnCount();
-          Vector columnNames = new Vector();
-          columnNames.addElement("ColumnName");
-          columnNames.addElement("Type");
-          columnNames.addElement("Size");
-          columnNames.addElement("Nullable");
-          columnNames.addElement("AutoIncrement");
-          results.setColumnNames(columnNames);
-          for (int i = 1; i <= columnCount; i++) {
-            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);
-            }
-            int nullable = metaData.isNullable(i);
-            if (nullable == metaData.columnNoNulls) {
-              row.addElement("Not Null");
-            } else if (nullable == metaData.columnNullable) {
-              row.addElement("Nullable");
-            } else if (nullable == metaData.columnNullableUnknown) {
-              row.addElement("Nullable");
-            } else {
-              row.addElement("<Error>");
-            }
-            row.addElement(new Boolean(metaData.isAutoIncrement(i)).toString());
-            results.addRow(row);
-          }
-          results.setHasMore(false);
-        } else {
-          ResultSet set = stmt.getResultSet();
-          ResultSetMetaData metaData = set.getMetaData();
-          int columnCount = metaData.getColumnCount();
-          Vector columnNames = new Vector();
-          for (int i = 1; i <= columnCount; i++) {
-            columnNames.addElement(metaData.getColumnName(i));
-          }
-          results.setColumnNames(columnNames);
-          Vector columnTypes = new Vector();
-          for (int i = 1; i <= columnCount; i++) {
-            columnTypes.addElement(metaData.getColumnTypeName(i));
-          }
-          results.setColumnsTypes(columnTypes);
-          int columnSizes[] = new int[columnCount];
-          for (int i = 1; i <= columnCount; i++) {
-            columnSizes[i - 1] = metaData.getColumnDisplaySize(i);
-          }
-          int rowCount = 1;
-          boolean exitEarly = false;
-          while (set.next()) {
-            boolean disable = startRow < 1 || endRow < 1;
-            boolean start = rowCount >= startRow;
-            boolean end = rowCount <= endRow;
-            if (disable || (start && end)) {
-              Vector row = new Vector();
-              for (int i = 1; i <= columnCount; i++) {
-                String value;
-                if (columnSizes[i - 1] < STREAM
-                  && columnSizes[i - 1] < maxLength) {
-                  if (encoding.equals("")) {
-                    value = set.getString(i);
-                  } else {
-                    value = new String(set.getBytes(i), encoding);
-                  }
-                } else {
-                  try {
-                    if (encoding.equals("")) {
-                      Reader reader = set.getCharacterStream(i);
-                      StringBuffer buffer = new StringBuffer();
-                      if (reader != null) {
-                        int retVal = reader.read();
-                        int count = 0;
-                        while (retVal >= 0) {
-                          buffer.append((char) retVal);
-                          retVal = reader.read();
-                          count++;
-                          if (count > maxLength) {
-                            buffer.append("...>>>");
-                            break;
-                          }
-                        }
-                        reader.close();
-                      }
-                      value = buffer.toString();
-                    } else {
-                      InputStream binaryStream = set.getBinaryStream(i);
-                      ByteArrayOutputStream baos = new ByteArrayOutputStream();
-                      if (binaryStream != null) {
-                        int retVal = binaryStream.read();
-                        int count = 0;
-                        while (retVal >= 0) {
-                          baos.write(retVal);
-                          retVal = binaryStream.read();
-                          count++;
-                          if (count > maxLength) {
-                            break;
-                          }
-                        }
-                        binaryStream.close();
-                      }
-                      value = new String(baos.toByteArray(), encoding);
-                    }
-                  } catch (Throwable e) {
-                    // hack for mysql which doesn't implement
-                    // character streams
-                    value = set.getString(i);
-                  }
-                }
-                if (set.wasNull()) {
-                  row.addElement("<NULL>");
-                } else {
-                  row.addElement(value);
-                }
-              }
-              results.addRow(row);
-            }
-            rowCount++;
-            if (!disable && (rowCount > endRow)) {
-              exitEarly = true;
-              break;
-            }
-          }
-          if (exitEarly) {
-            results.setHasMore(set.next());
-          } else {
-            results.setMaxSize(rowCount);
-            results.setHasMore(false);
-          }
-        }
-        log.addText(RESULTS, "Success: result set displayed");
-      }
-      stmt.close();
-      if (DEBUG) {
-        System.out.println("Executed");
-        System.out.println();
-      }
-    } catch (Exception e) {
-      results.setIsError(true);
-      log.addText(ERROR, "Error occured: " + e);
-      StringWriter writer = new StringWriter();
-      e.printStackTrace(new PrintWriter(writer));
-      log.addText(ERROR, writer.toString());
-    }
-    return results;
-  }
-}
+		System.out.println("Executing"); //$NON-NLS-1$
+		LogProxy log = LogProxy.getInstance();
+		log.addText(LogProxy.QUERY, "Executing Request [" + s + "]"); //$NON-NLS-1$ //$NON-NLS-2$
+		boolean metadata = false;
+		if (s.startsWith("METADATA")) { //$NON-NLS-1$
+			metadata = true;
+		}
+		if (metadata) {
+			results.setQuery(s);
+			String table = s.substring(s.indexOf(':') + 1);
+			String query = "SELECT * FROM " + table + " WHERE (1 = 0)"; //$NON-NLS-1$ //$NON-NLS-2$
+			s = query;
+			log.addText(LogProxy.QUERY, "Metadata Request [" + s + "]"); //$NON-NLS-1$ //$NON-NLS-2$
+	} else {
+			results.setQuery(s);
+		}
+		try {
+			Statement stmt = con.createStatement();
+			boolean flag = stmt.execute(s);
+			results.setResultSet(flag);
+			if (!flag) {
+				int updates = stmt.getUpdateCount();
+				results.setUpdateCount(updates);
+				log.addText(
+					LogProxy.RESULTS,
+					"Success: " + updates + " records updated"); //$NON-NLS-1$ //$NON-NLS-2$
+
+			} else {
+				if (metadata) {
+					ResultSet set = stmt.getResultSet();
+					ResultSetMetaData metaData = set.getMetaData();
+					int columnCount = metaData.getColumnCount();
+					Vector columnNames = new Vector();
+					columnNames.addElement("ColumnName"); //$NON-NLS-1$
+					columnNames.addElement("Type"); //$NON-NLS-1$
+					columnNames.addElement("Size"); //$NON-NLS-1$
+					columnNames.addElement("Nullable"); //$NON-NLS-1$
+					columnNames.addElement("AutoIncrement"); //$NON-NLS-1$
+					results.setColumnNames(columnNames);
+					for (int i = 1; i <= columnCount; i++) {
+						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$
+						}
+						int nullable = metaData.isNullable(i);
+						if (nullable == ResultSetMetaData.columnNoNulls) {
+							row.addElement("Not Null"); //$NON-NLS-1$
+						} else if (nullable == ResultSetMetaData.columnNullable) {
+							row.addElement("Nullable"); //$NON-NLS-1$
+						} else if (nullable == ResultSetMetaData.columnNullableUnknown) {
+							row.addElement("Nullable"); //$NON-NLS-1$
+						} else {
+							row.addElement("<Error>"); //$NON-NLS-1$
+						}
+						row.addElement(Boolean.toString(metaData.isAutoIncrement(i)));
+						results.addRow(row);
+					}
+					results.setHasMore(false);
+					set.close();
+				} else {
+					ResultSet set = stmt.getResultSet();
+					ResultSetMetaData metaData = set.getMetaData();
+					int columnCount = metaData.getColumnCount();
+					Vector columnNames = new Vector();
+					for (int i = 1; i <= columnCount; i++) {
+						columnNames.addElement(metaData.getColumnName(i));
+					}
+					results.setColumnNames(columnNames);
+					Vector columnTypes = new Vector();
+					for (int i = 1; i <= columnCount; i++) {
+						columnTypes.addElement(metaData.getColumnTypeName(i));
+					}
+					results.setColumnTypes(columnTypes);
+					IntVector columnSizes = new IntVector();
+					for (int i = 1; i <= columnCount; i++) {
+						columnSizes.addElement(metaData.getColumnDisplaySize(i));
+					}
+					results.setColumnSizes(columnSizes);
+//					int columnSizes[] = new int[columnCount];
+//					for (int i = 1; i <= columnCount; i++) {
+//						columnSizes[i - 1] = metaData.getColumnDisplaySize(i);
+//					}
+					int rowCount = 1;
+					boolean exitEarly = false;
+					while (set.next()) {
+						boolean disable = startRow < 1 || endRow < 1;
+						boolean start = rowCount >= startRow;
+						boolean end = rowCount <= endRow;
+						if (disable || (start && end)) {
+							Vector row = new Vector();
+							for (int i = 1; i <= columnCount; i++) {
+								String value;
+								if (columnSizes.elementAt(i - 1) < STREAM && columnSizes.elementAt(i - 1) < maxLength) {
+									if (encoding.equals("")) { //$NON-NLS-1$
+										value = set.getString(i);
+									} else {
+										value = new String(set.getBytes(i), encoding);
+									}
+								} else {
+									try {
+										if (encoding.equals("")) { //$NON-NLS-1$
+											Reader reader = set.getCharacterStream(i);
+											StringBuffer buffer = new StringBuffer();
+											if (reader != null) {
+												int retVal = reader.read();
+												int count = 0;
+												while (retVal >= 0) {
+													buffer.append((char) retVal);
+													retVal = reader.read();
+													count++;
+													if (count > maxLength) {
+														buffer.append("...>>>"); //$NON-NLS-1$
+														break;
+													}
+												}
+												reader.close();
+											}
+											value = buffer.toString();
+										} else {
+											InputStream binaryStream = set.getBinaryStream(i);
+											ByteArrayOutputStream baos = new ByteArrayOutputStream();
+											if (binaryStream != null) {
+												int retVal = binaryStream.read();
+												int count = 0;
+												while (retVal >= 0) {
+													baos.write(retVal);
+													retVal = binaryStream.read();
+													count++;
+													if (count > maxLength) {
+														break;
+													}
+												}
+												binaryStream.close();
+											}
+											value = new String(baos.toByteArray(), encoding);
+										}
+									} catch (Throwable e) {
+										// hack for mysql which doesn't implement
+										// character streams
+										value = set.getString(i);
+									}
+								}
+								if (set.wasNull()) {
+									row.addElement("<NULL>"); //$NON-NLS-1$
+								} else {
+									row.addElement(value);
+								}
+							}
+							results.addRow(row);
+						}
+						rowCount++;
+						if (!disable && (rowCount > endRow)) {
+							exitEarly = true;
+							break;
+						}
+					}
+					if (exitEarly) {
+						results.setHasMore(set.next());
+					} else {
+						results.setMaxSize(rowCount);
+						results.setHasMore(false);
+					}
+					set.close();
+				}
+				log.addText(LogProxy.RESULTS, "Success: result set displayed"); //$NON-NLS-1$
+			}
+			stmt.close();
+			System.out.println("Executed"); //$NON-NLS-1$
+			System.out.println();
+		} catch (Exception e) {
+			results.setIsError(true);
+			log.addText(LogProxy.ERROR, e); //$NON-NLS-1$
+		}
+		return results;
+	}
+
+		public ObjectMetaData getObjectMetadata(Connection con, TreeNode node) throws SQLException {
+		ObjectMetaData metadata = new ObjectMetaData();
+		String table = node.getName();
+		metadata.setColumns(MetaDataJDBCInterface.getColumns(con, getSchemaName(table), getTableName(table)));
+		if (node instanceof TableNode) {
+			String schema = getSchemaName(table);
+			String tableName = getTableName(table);
+			metadata.setPrimaryKeys(MetaDataJDBCInterface.getPrimaryKeys(con, schema, tableName));
+			metadata.setForeignKeys(MetaDataJDBCInterface.getForeignKeys(con, schema, tableName, true));
+			metadata.setIndexInfo(MetaDataJDBCInterface.getIndexInfo(con, schema, tableName));
+		}
+		return metadata;
+	}
+	
+	public String getTableName(String table) {
+		StringTokenizer st = new StringTokenizer(table, "."); //$NON-NLS-1$
+		if (st.countTokens() == 2) {
+			st.nextToken();
+			return st.nextToken();
+		} else if (st.countTokens() == 1){
+			return st.nextToken();
+		} else
+			return null;
+	}
+	public String getSchemaName(String table) {
+		StringTokenizer st = new StringTokenizer(table, "."); //$NON-NLS-1$
+		if (st.countTokens() == 2) {
+			return st.nextToken();
+		} else 
+			return null;
+	}
+	
+}
\ No newline at end of file
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/SQLHelper.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/SQLHelper.java
index 06a6515..847c041 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/SQLHelper.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/SQLHelper.java
@@ -1,152 +1,52 @@
 package net.sourceforge.phpdt.sql.sql;
 
-import java.util.Vector;
-
-import net.sourceforge.phpdt.sql.IConstants;
-import net.sourceforge.phpdt.sql.adapters.AdapterFactory;
-import net.sourceforge.phpdt.sql.adapters.DatabaseAdapter;
-import net.sourceforge.phpdt.sql.adapters.DatabaseInfo;
-import net.sourceforge.phpdt.sql.adapters.FeatureNotSupported;
-import net.sourceforge.phpdt.sql.adapters.GenericAdapter;
-import net.sourceforge.phpdt.sql.adapters.NoSuchAdapterException;
 import net.sourceforge.phpdt.sql.bookmarks.Bookmark;
-import net.sourceforge.phpdt.sql.view.bookmark.BookmarkNode;
-import net.sourceforge.phpdt.sql.view.bookmark.MetaDataNode;
-import net.sourceforge.phpdt.sql.view.bookmark.SequenceNode;
-import net.sourceforge.phpdt.sql.view.bookmark.TableNode;
-import net.sourceforge.phpdt.sql.view.bookmark.ViewNode;
 
-public class SQLHelper implements IConstants {
-  MultiSQLServer server = MultiSQLServer.getInstance();
-  public Vector getTableList(BookmarkNode current)
-    throws NoSuchAdapterException, FeatureNotSupported {
-    DatabaseAdapter adapter =
-      AdapterFactory.getInstance().getAdapter(current.getType());
-    Vector children = new Vector();
-    DatabaseInfo info = DatabaseInfo.create(current);
-    if (adapter instanceof GenericAdapter) {
-      Vector tables = server.listTables(info.getSchema(), "TABLE");
-      for (int i = 0; i < tables.size(); i++) {
-        String tableName = (String) tables.elementAt(i);
-        TableNode node = new TableNode(current, tableName);
-        children.addElement(node);
-      }
-    } else {
-      SQLResults results = server.execute(adapter.getShowTableQuery(info));
-      String filter = adapter.getTableListFilter();
-      int size = results.getRowCount();
-      if (DEBUG) {
-        System.out.println("Found " + size + " tables");
-      }
-      for (int i = 1; i <= size; i++) {
-        String tableName = results.getElement(1, i).toString();
-        if (filter == null
-          || filter.equals("")
-          || tableName.indexOf(filter) < 0) {
-          TableNode node = new TableNode(current, tableName);
-          children.addElement(node);
-        }
-      }
-    }
-    return children;
-  }
-  public int getSize(String query) {
-    SQLResults results = server.execute("SELECT COUNT(*) FROM " + query);
-    return Integer.parseInt(results.getElement(1, 1).toString());
-  }
-  public Vector getViewList(BookmarkNode current)
-    throws NoSuchAdapterException, FeatureNotSupported {
-    DatabaseAdapter adapter =
-      AdapterFactory.getInstance().getAdapter(current.getType());
-    Vector children = new Vector();
-    DatabaseInfo info = DatabaseInfo.create(current);
-    if (adapter instanceof GenericAdapter) {
-      Vector views = server.listTables(info.getSchema(), "VIEW");
-      for (int i = 0; i < views.size(); i++) {
-        String viewName = (String) views.elementAt(i);
-        ViewNode node = new ViewNode(current, viewName);
-        children.addElement(node);
-      }
-    } else {
-      SQLResults results = server.execute(adapter.getShowViewQuery(info));
-      String filter = adapter.getTableListFilter();
-      int size = results.getRowCount();
-      for (int i = 1; i <= size; i++) {
-        String viewName = results.getElement(1, i).toString();
-        if (filter == null
-          || filter.equals("")
-          || viewName.indexOf(filter) < 0) {
-          ViewNode node = new ViewNode(current, viewName);
-          children.addElement(node);
-        }
-      }
-    }
-    return children;
-  }
-  public Vector getSequenceList(BookmarkNode current)
-    throws NoSuchAdapterException, FeatureNotSupported {
-    DatabaseAdapter adapter =
-      AdapterFactory.getInstance().getAdapter(current.getType());
-    MultiSQLServer server = MultiSQLServer.getInstance();
-    Vector children = new Vector();
-    if (!(adapter instanceof GenericAdapter)) {
-      SQLResults results =
-        server.execute(
-          adapter.getShowSequenceQuery(DatabaseInfo.create(current)));
-      String filter = adapter.getTableListFilter();
-      int size = results.getRowCount();
-      for (int i = 1; i <= size; i++) {
-        String seqName = results.getElement(1, i).toString();
-        if (filter == null
-          || filter.equals("")
-          || seqName.indexOf(filter) < 0) {
-          SequenceNode node = new SequenceNode(current, seqName);
-          children.addElement(node);
-        }
-      }
-    }
-    return children;
-  }
-  public Vector getMetaData(TableNode parent, String entity) {
-    Vector columns = new Vector();
-    String query = "SELECT * FROM " + entity;
-    SQLResults results = server.execute(query);
-    for (int i = 1; i <= results.getColumnCount(); i++) {
-      String name = results.getColumnName(i);
-      String type = results.getColumnType(i);
-      MetaDataNode node = new MetaDataNode(parent, name, type);
-      columns.addElement(node);
-    }
-    return columns;
-  }
-  public Vector getMetaData(ViewNode parent, String entity) {
-    Vector columns = new Vector();
-    String query = "SELECT * FROM " + entity;
-    SQLResults results = server.execute(query);
-    for (int i = 1; i <= results.getColumnCount(); i++) {
-      String name = results.getColumnName(i);
-      String type = results.getColumnType(i);
-      MetaDataNode node = new MetaDataNode(parent, name, type);
-      columns.addElement(node);
-    }
-    return columns;
-  }
-  public SQLResults getResults(String query, int start, int end) {
-    return server.execute(query, start, end);
-  }
-  public SQLResults getResults(
-    String query,
-    int start,
-    int end,
-    int maxLength,
-    String encoding) {
-    return server.execute(query, start, end, maxLength, encoding);
-  }
-  public static String getFullTableName(Bookmark current, String table) {
-    String schema = current.getSchema();
-    if (schema == null || schema.equals("")) {
-      return table;
-    }
-    return schema + "." + table;
-  }
+public class SQLHelper {
+	
+	public static int getSize(Bookmark current, String tableName) {
+		SQLResults results = MultiSQLServer.getInstance().execute(
+            current.getConnection(), "SELECT COUNT(*) FROM " + tableName); //$NON-NLS-1$
+		return Integer.parseInt(results.getElement(1, 1).toString());
+	}
+	public static SQLResults getResults(Bookmark current, String query, int start, int end, int maxLength, String encoding) {
+		return MultiSQLServer.getInstance().execute(current.getConnection(), 
+            query, start, end, maxLength, encoding);
+	}
+	public static String getFullTableName(Bookmark current, String table) {
+		String schema = current.getSchema();
+		if (schema == null) return table;
+		if (schema.equals("")) return table; //$NON-NLS-1$
+		return schema + "." + table; //$NON-NLS-1$
+	}
+
+	/**
+	 * True if the type is Real (numeric and with decimal part) according to java.sql.Types
+	 * @param type
+	 * @return
+	 */
+	public static boolean isReal(int type) {
+		return (type == java.sql.Types.DECIMAL || type == java.sql.Types.DOUBLE || type ==java.sql.Types.FLOAT || 
+			type == java.sql.Types.NUMERIC || type == java.sql.Types.REAL );
+	}
+
+	/**
+	 * True if the type is Numeric according to java.sql.Types
+	 * @param type
+	 * @return
+	 */
+	public static boolean isNumeric(int type) {
+		return (type == java.sql.Types.DECIMAL || type == java.sql.Types.DOUBLE || type ==java.sql.Types.FLOAT || 
+			type == java.sql.Types.NUMERIC || type == java.sql.Types.REAL || type == java.sql.Types.BIGINT ||
+			type == java.sql.Types.TINYINT || type == java.sql.Types.SMALLINT || type == java.sql.Types.INTEGER );
+	}
+	/**
+	 * True if the type is textual according to java.sql.Types
+	 * @param type
+	 * @return
+	 */
+	public static boolean isText(int type) {
+		return (type == java.sql.Types.CLOB || type == java.sql.Types.VARBINARY || type ==java.sql.Types.VARCHAR );
+	}
+
 }
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/SQLMetaData.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/SQLMetaData.java
index 44988a8..e69de29 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/SQLMetaData.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/SQLMetaData.java
@@ -1,51 +0,0 @@
-package net.sourceforge.phpdt.sql.sql;
-
-import java.util.Vector;
-
-public class SQLMetaData {
-	private String tableName;
-	private Vector columnNames;
-	private Vector columTypes;
-	private Vector columnClassnames;
-	private Vector columnSizes;
-
-	public String getTableName() {
-		return tableName;
-	}
-
-	public void setTableName(String tableName) {
-		this.tableName = tableName;
-	}
-	public Vector getColumnClassnames() {
-		return columnClassnames;
-	}
-
-	public Vector getColumnNames() {
-		return columnNames;
-	}
-
-	public Vector getColumnSizes() {
-		return columnSizes;
-	}
-
-	public Vector getColumTypes() {
-		return columTypes;
-	}
-
-	public void setColumnClassnames(Vector columnClassnames) {
-		this.columnClassnames = columnClassnames;
-	}
-
-	public void setColumnNames(Vector columnNames) {
-		this.columnNames = columnNames;
-	}
-
-	public void setColumnSizes(Vector columnSizes) {
-		this.columnSizes = columnSizes;
-	}
-
-	public void setColumTypes(Vector columTypes) {
-		this.columTypes = columTypes;
-	}
-
-}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/SQLParser.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/SQLParser.java
index fc31429..67545f4 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/SQLParser.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/SQLParser.java
@@ -2,45 +2,42 @@ package net.sourceforge.phpdt.sql.sql;
 
 import java.util.Vector;
 
-import net.sourceforge.phpdt.sql.IConstants;
-import net.sourceforge.phpdt.sql.parser.SQLLexx;
-import net.sourceforge.phpdt.sql.parser.Token;
+import net.sourceforge.phpdt.sql.sql.parser.SQLLexx;
+import net.sourceforge.phpdt.sql.sql.parser.Token;
 
-public class SQLParser implements IConstants {
-  public static final String COMMENT = "--";
-  public static final String ENDLINE = ";";
-  public static Vector parse(String query) {
-    Vector commands = new Vector();
-    try {
-      //System.out.println("-------------------1");
-      Vector tokens = SQLLexx.parse(query);
-      //System.out.println("-------------------2");
-      StringBuffer buffer = new StringBuffer();
-      for (int i = 0; i < tokens.size(); i++) {
-        //System.out.println("-------------------3");
-        Token t = (Token) tokens.elementAt(i);
-        if (t.getType() == t.COMMENT) {
-          // ignore comments
-        } else if (t.getType() == t.SEPARATOR) {
-          String newCommand = buffer.toString().trim();
-          if (!newCommand.equals("")) {
-            commands.addElement(newCommand);
-          }
-          buffer = new StringBuffer();
-        } else {
-          buffer.append(t.getValue());
-        }
-      }
-      String newCommand = buffer.toString().trim();
-      if (!newCommand.equals("")) {
-        commands.addElement(newCommand);
-      }
-    } catch (Throwable e) {
-      e.printStackTrace();
-    }
-    if (DEBUG) {
-      System.out.println("Returning");
-    }
-    return commands;
-  }
+public class SQLParser {
+	public static final String COMMENT = "--"; //$NON-NLS-1$
+	public static final String ENDLINE = ";"; //$NON-NLS-1$
+	public static Vector parse(String query) {
+			Vector commands = new Vector();
+		try {
+		//System.out.println("-------------------1");
+			Vector tokens = SQLLexx.parse(query);
+		//System.out.println("-------------------2");
+			StringBuffer buffer = new StringBuffer();
+			for (int i = 0; i < tokens.size(); i++) {
+		//System.out.println("-------------------3");
+				Token t = (Token) tokens.elementAt(i);
+				if (t.getType() == Token.COMMENT) {
+					// ignore comments
+				} else if (t.getType() == Token.SEPARATOR) {
+					String newCommand = buffer.toString().trim();
+					if (!newCommand.equals("")) { //$NON-NLS-1$
+						commands.addElement(newCommand);
+					}
+					buffer = new StringBuffer();
+				} else {
+					buffer.append(t.getValue());
+				}
+			}
+			String newCommand = buffer.toString().trim();
+			if (!newCommand.equals("")) { //$NON-NLS-1$
+				commands.addElement(newCommand);
+			}
+		} catch (Throwable e) {
+			e.printStackTrace();
+		}
+		System.out.println("Returning"); //$NON-NLS-1$
+			return commands;
+	}
 }
\ No newline at end of file
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/SQLResults.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/SQLResults.java
index 7563bb1..1c35f61 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/SQLResults.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/SQLResults.java
@@ -3,39 +3,48 @@ package net.sourceforge.phpdt.sql.sql;
 import java.util.ArrayList;
 import java.util.Vector;
 
-/**
- * @author root
- *
- * To change this generated comment edit the template variable "typecomment":
- * Window>Preferences>Java>Templates.
- * To enable and disable the creation of type comments go to
- * Window>Preferences>Java>Code Generation.
- */
+import org.apache.xml.utils.IntVector;
+
 public class SQLResults {
 	private String query;
 	private String table;
 	private ArrayList rows = new ArrayList();
 	private Vector columns;
 	private Vector columnTypes;
+	private IntVector columnSizes;
 	private int updateCount = 0;
 	private boolean resultSet = false;
 	private boolean hasMore = false;
 	private boolean isError = false;
 	private int maxSize = -1;
+	
 	public void setColumnNames(Vector columns) {
 		this.columns = columns;
 	}
 	public String getColumnName(int column) {
+		if (columns.size() < column) return ""; //$NON-NLS-1$
 		return columns.elementAt(column - 1).toString();
+			
+	}
+	public void setColumnTypes(Vector columnsTypes) {
+		this.columnTypes = columnsTypes;
 	}
 	public String getColumnType(int column) {
+		if (columnTypes.size() < column) return ""; //$NON-NLS-1$
 		return columnTypes.elementAt(column - 1).toString();
 	}
+	public void setColumnSizes(IntVector columnSizes) {
+		this.columnSizes = columnSizes;
+	}
+	public int getColumnSize(int column) {
+		if (columnSizes.size() < column) return 0;
+		return columnSizes.elementAt(column - 1);
+	}
 	public void addRow(Vector row) {
 		rows.add(row);
 	}
 	public Object getElement(int column, int row) {
-	    return ((Vector) rows.get(row - 1)).elementAt(column - 1);
+		return ((Vector) rows.get(row - 1)).elementAt(column - 1);
 	}
 	public int getColumnCount() {
 		if (columns.size() > 0) {
@@ -94,10 +103,6 @@ public class SQLResults {
 		this.table = table;
 	}
 
-	public void setColumnsTypes(Vector columnsTypes) {
-		this.columnTypes = columnsTypes;
-	}
-
 	public boolean hasMore() {
 		return hasMore;
 	}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/TableRow.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/TableRow.java
index 0f64c6a..9f3dbe2 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/TableRow.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/TableRow.java
@@ -1,12 +1,16 @@
 package net.sourceforge.phpdt.sql.sql;
 
+import net.sourceforge.phpdt.sql.view.bookmark.BookmarkNode;
+
 public class TableRow {
 	private String[] columnNames;
 	private String[] tableData;
-	private String table;
+	private BookmarkNode bookmark;
+	String table;
 	
-	public TableRow(String tableName, String[] columnNames, String[] tableData) {
-		this.table = tableName;
+	public TableRow(BookmarkNode bookmark, String table, String[] columnNames, String[] tableData) {
+		this.bookmark = bookmark;
+		this.table = table;
 		this.tableData = tableData;
 		this.columnNames = columnNames;
 	}
@@ -23,14 +27,14 @@ public class TableRow {
 		return table;
 	}
 
+	public BookmarkNode getBookmarkNode() {
+			return bookmark;
+		}
+
 	public void setColumnNames(String[] columnNames) {
 		this.columnNames = columnNames;
 	}
 
-	public void setTable(String table) {
-		this.table = table;
-	}
-
 	public String[] getTableData() {
 		return tableData;
 	}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/metadata/MetaDataJDBCInterface.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/metadata/MetaDataJDBCInterface.java
new file mode 100644
index 0000000..db08bc2
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/metadata/MetaDataJDBCInterface.java
@@ -0,0 +1,118 @@
+/*
+ * Created on 8/04/2003
+ *
+ * To change the template for this generated file go to
+ * Window>Preferences>Java>Code Generation>Code and Comments
+ */
+package net.sourceforge.phpdt.sql.sql.metadata;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+/**
+ * @author panic
+ *
+ *	Groups functions that allow extracting data from a JDBC connection in form of StringMatrixs
+ */
+public class MetaDataJDBCInterface {
+	
+	/**
+	 * @param con : A valid (open) connection to an JDBC database
+	 * @param schema : Schema of the table. Must be null if not given
+	 * @param table : Name of the table.
+	 * @return a StringMatrix with the info of the columns' metadata
+	 */
+	public static StringMatrix getColumns(Connection con, String schema, String table) 
+			throws SQLException {
+
+		DatabaseMetaData meta = con.getMetaData();
+		ResultSet set = meta.getColumns(null, schema, table, null);
+		
+		StringMatrix columns = fillMatrix(set);
+		set.close();
+		return columns;
+	}
+
+	/**
+	 * @param con : A valid (open) connection to an JDBC database
+	 * @param schema : Schema of the table. Must be null if not given
+	 * @param table : Name of the table.
+	 * @return a StringMatrix with the info of the primary keys
+	 */
+	public static StringMatrix getPrimaryKeys(Connection con, String schema, String table) 
+			throws SQLException {
+
+		DatabaseMetaData meta = con.getMetaData();
+		ResultSet set = meta.getPrimaryKeys(null, schema, table);
+		
+		StringMatrix keys = fillMatrix(set);
+		set.close();
+		return keys;
+	}
+
+	/**
+	 * @param con : A valid (open) connection to an JDBC database
+	 * @param schema : Schema of the table. Must be null if not given
+	 * @param table : Name of the table.
+	 * @param imported : Determines if the foreign keys are the imported or exported ones
+	 * @return a StringMatrix with the info of the foreign keys
+	 */
+	public static StringMatrix getForeignKeys(Connection con, String schema, String table,  boolean imported ) 
+			throws SQLException {
+				
+		ResultSet set = null;
+		DatabaseMetaData meta = con.getMetaData();
+		if (imported){
+			set = meta.getImportedKeys(null, schema, table);
+		} else {
+			set = meta.getExportedKeys(null, schema, table);
+		}
+		StringMatrix keys = fillMatrix(set);
+		set.close();
+		return keys;
+	}
+
+	/**
+	 * @param con : A valid (open) connection to an JDBC database
+	 * @param schema : Schema of the table. Must be null if not given
+	 * @param table : Name of the table.
+	 * @return a StringMatrix with the info of the indexes on that table
+	 */
+	public static StringMatrix getIndexInfo(Connection con, String schema, String table) 
+			throws SQLException {
+
+		ResultSet set = null;
+		DatabaseMetaData meta = con.getMetaData();
+		set = meta.getIndexInfo(null, schema, table, false, false);
+		StringMatrix keys = fillMatrix(set);
+		set.close();
+		return keys;
+	}
+
+
+	/**
+	 * 
+	 * @param set
+	 * @return a filled StringMatrix with the set results
+	 * @throws SQLException
+	 */
+	public static StringMatrix fillMatrix(ResultSet set) throws SQLException {
+		int columnCount = set.getMetaData().getColumnCount();
+		StringMatrix keys = new StringMatrix();
+		for (int i = 1; i <= columnCount; i++) {
+			keys.addHeader(set.getMetaData().getColumnName(i));
+		}
+		int row = 0;
+		while (set.next()) {
+			for (int i = 1; i <= columnCount; i++) {
+				keys.add(set.getString(i), row);
+			}
+			row++;
+		}
+		return keys;
+	}
+
+
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/metadata/MetaDataXMLInterface.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/metadata/MetaDataXMLInterface.java
new file mode 100644
index 0000000..38acdd2
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/metadata/MetaDataXMLInterface.java
@@ -0,0 +1,168 @@
+/*
+ * Created on 15/04/2003
+ *
+ */
+package net.sourceforge.phpdt.sql.sql.metadata;
+
+import org.apache.crimson.tree.TextNode;
+import org.apache.crimson.tree.XmlDocument;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Text;
+
+
+/**
+ * @author panic
+ * Handles interface between an ObjectMetaData and XML storage.
+ * It can write an existing metadata object to XML and generate
+ * a new ObjectMetaData from existing XML.
+ */
+public class MetaDataXMLInterface {
+
+	/**
+	 * Exports an ObjectMetaData to an XML document, under a root Element
+	 * @param metadata The ObjectMetaData to export
+	 * @param doc A valid XML document to receive the export
+	 * @param root The Element under which all the XML data will be written
+	 */
+	public static void metaDataToXML(ObjectMetaData metadata, XmlDocument doc, Element root) {
+		StringMatrix columns = metadata.getColumns();
+		if (columns != null)
+			stringMatrixToXML(columns, doc, root, "COLUMN"); //$NON-NLS-1$
+		StringMatrix primaryKeys = metadata.getPrimaryKeys();
+		if (primaryKeys != null)
+			stringMatrixToXML(primaryKeys, doc, root, "PRIMARY_KEY_ITEM"); //$NON-NLS-1$
+		StringMatrix foreignKeys = metadata.getForeignKeys();
+		if (foreignKeys != null)
+			stringMatrixToXML(foreignKeys, doc, root, "FOREIGN_KEY_ITEM"); //$NON-NLS-1$
+		StringMatrix indexInfo = metadata.getIndexInfo();
+		if (indexInfo != null)
+			stringMatrixToXML(indexInfo, doc, root, "INDEX_ITEM"); //$NON-NLS-1$
+	}
+
+	/**
+	 * Imports an  XML element to an ObjectMetaData. The format has to be the same as extracted by
+	 * the MetaDataToXML function.
+	 * @param metadata The ObjectMetaData to fill up. Usually empty.
+	 * @param root The Element having all the XML data
+	 */
+	public static void xmlToMetaData(ObjectMetaData metadata, Element root) {
+		StringMatrix columns = new StringMatrix();
+		MetaDataXMLInterface.xmlToStringMatrix(columns, root, "COLUMN"); //$NON-NLS-1$
+		metadata.setColumns(columns);
+		StringMatrix primaryKeys = new StringMatrix();
+		MetaDataXMLInterface.xmlToStringMatrix(primaryKeys, root, "PRIMARY_KEY_ITEM"); //$NON-NLS-1$
+		metadata.setPrimaryKeys(primaryKeys);
+		StringMatrix foreignKeys = new StringMatrix();
+		MetaDataXMLInterface.xmlToStringMatrix(foreignKeys, root, "FOREIGN_KEY_ITEM"); //$NON-NLS-1$
+		metadata.setForeignKeys(foreignKeys);
+		StringMatrix indexInfo = new StringMatrix();
+		MetaDataXMLInterface.xmlToStringMatrix(indexInfo, root, "INDEX_ITEM"); //$NON-NLS-1$
+		metadata.setIndexInfo(indexInfo);
+	}
+
+	/**
+	 * Adds a StringMatrix to an XML document
+	 * @param matrix The StringMatrix to add
+	 * @param doc The XmlDocument to which it will be added
+	 * @param root An element of the previous document under which the info will be added
+	 * @param sub A key under which each row of the StringMatrix will be added
+	 */
+	private static void stringMatrixToXML(StringMatrix matrix, XmlDocument doc, Element root, String sub) {
+		for (int i = 0; i < matrix.size(); i++) {
+			Element localRoot = (Element) root.appendChild(doc.createElement(sub));
+			for (int j = 0; j < matrix.getNumColumns(); j++) {
+				String key = matrix.getHeaderColumn(j);
+				Element tableName = (Element) localRoot.appendChild(doc.createElement(key));
+				String value = matrix.get(key, i);
+				if (value != null)
+					tableName.appendChild(doc.createTextNode(value));
+			}
+		}
+	}
+
+	/**
+	* Fills a StringMatrix with the data from XML, usually extracted with the StringMatrixToXML function
+	* @param matrix The matrix to fill up, usually empty.
+	* @param root The Element with all the data in XML DOM
+	* @param sub The String to select the Nodes which interest us. Only the selected nodes will be added
+	* to the StringMatrix.
+	*/
+	private static void xmlToStringMatrix(StringMatrix matrix, Element root, String sub) {
+		NodeList columns = root.getElementsByTagName(sub);
+		for (int i = 0; i < columns.getLength(); i++) {
+			Node column = columns.item(i);
+			NodeList columnList = column.getChildNodes();
+			for (int j = 0; j < columnList.getLength(); j++) {
+				Node node = columnList.item(j);
+				String header = node.getNodeName();
+				if (header.equals("#text")) //$NON-NLS-1$
+					continue;
+				String value = null;
+				if (node != null && node.hasChildNodes()) {
+					Node valueNode = node.getFirstChild();
+					if (valueNode instanceof TextNode) {
+						value = valueNode.getNodeValue();
+					}
+				}
+				if (!matrix.contains(header))
+					matrix.addHeader(header);
+				matrix.addAt(header, value, i);
+			}
+		}
+	}
+	/**
+	 * Creates a new Element with a text value
+	 * @param root
+	 * @param key
+	 * @param value
+	 * @return
+	 */
+	public static Element createElementText(Element root, String key, String value){
+		//	get the XmlDocument for use as a factory
+		XmlDocument doc = (XmlDocument) root.getOwnerDocument();
+		Element newElement = doc.createElement(key);
+	
+		root.appendChild(newElement);
+		if (value != null && value.length() > 0)
+		{
+		   Text valueText = doc.createTextNode(value);
+		   newElement.appendChild(valueText);
+		}
+		return newElement;
+	}
+      
+	/**
+	 * gets the text value from an element or a child of it
+	 * @param root
+	 * @param key
+	 * @param value
+	 * @return
+	 */
+	public static String getElementText(Element root, String key){
+	//	get the XmlDocument for use as a factory
+		String value = ""; //$NON-NLS-1$
+		if (root.getNodeName().equals(key)){
+			value = extractText(root);
+		} else {
+			NodeList children = root.getElementsByTagName(key);
+			if (children.getLength() > 0) {
+				Element column = (Element) children.item(0);
+				value = extractText(column);
+			}
+		}
+		return value;
+	}
+
+	private static String extractText(Element node){
+		String value = ""; //$NON-NLS-1$
+		if (node != null && node.hasChildNodes()) {
+			Node valueNode = node.getFirstChild();
+			if (valueNode instanceof TextNode) {
+				value = valueNode.getNodeValue();
+			}
+		}
+		return value;
+	}
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/metadata/ObjectMetaData.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/metadata/ObjectMetaData.java
new file mode 100644
index 0000000..625ec25
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/metadata/ObjectMetaData.java
@@ -0,0 +1,129 @@
+/*
+ * Created on 8/04/2003
+ *
+ */
+package net.sourceforge.phpdt.sql.sql.metadata;
+
+import java.util.Vector;
+
+
+/**
+ * @author panic
+ * Class to hold the Metadata of a database element
+ */
+public class ObjectMetaData {
+	private StringMatrix columns = null;
+	private StringMatrix primaryKeys = null;
+	private StringMatrix foreignKeys = null;
+	private StringMatrix indexInfo = null;
+	
+	
+	/**
+	 * @param matrix
+	 */
+	public void setColumns(StringMatrix matrix) {
+		columns = matrix;
+	}
+	
+	/**
+	 * Gives the order of the column in the primary key
+	 * @param column
+	 * @return the order of the column in the primary key, 0 if it's not part of it.
+	 */
+	public int getPrimaryKeyOrder(String column){
+		if (primaryKeys == null) return 0;
+		StringMatrix keyColumns = primaryKeys.select("COLUMN_NAME", column); //$NON-NLS-1$
+		if (keyColumns != null && keyColumns.size() > 0) {
+			 String index = keyColumns.get("KEY_SEQ", 0); // We suppose there is only a primary key //$NON-NLS-1$
+			 if (index != null ) return Integer.parseInt(index);
+		}
+		return 0;
+	}
+
+	/**
+	 * Gives the type of the column
+	 * @param column
+	 * @return the type of the column using the values defined in java.sql.Types
+	 */
+	public int getColumnType(String column){
+		StringMatrix selectCol = columns.select("COLUMN_NAME", column); //$NON-NLS-1$
+		if (selectCol != null && selectCol.size() > 0) {
+			 String type = selectCol.get("DATA_TYPE", 0); // It should be only one column //$NON-NLS-1$
+			 if (type != null ) return Integer.parseInt(type);
+		}
+		return 0;
+		
+	}
+
+	/**
+	 * @param matrix
+	 */
+	public void setForeignKeys(StringMatrix matrix) {
+		foreignKeys = matrix;
+	}
+
+	/**
+	 * @param matrix
+	 */
+	public void setPrimaryKeys(StringMatrix matrix) {
+		primaryKeys = matrix;
+	}
+	
+	/**
+	 * @return
+	 */
+	public StringMatrix getColumns() {
+		return columns;
+	}
+
+	/**
+	 * @return
+	 */
+	public StringMatrix getForeignKeys() {
+		return foreignKeys;
+	}
+
+	/**
+	 * @return
+	 */
+	public StringMatrix getPrimaryKeys() {
+		return primaryKeys;
+	}
+
+	
+	/**
+	 * @return
+	 */
+	public StringMatrix getIndexInfo() {
+		return indexInfo;
+	}
+
+	/**
+	 * @param matrix
+	 */
+	public void setIndexInfo(StringMatrix matrix) {
+		indexInfo = matrix;
+	}
+
+	/**
+	 * @param column
+	 */
+	public void dropColumn(String columnName) {
+		columns.dropMatching("COLUMN_NAME", columnName); //$NON-NLS-1$
+	}
+
+	/**
+	 * @return
+	 */
+	public String getColumnsString() {
+		String result = ""; //$NON-NLS-1$
+		Vector columnNames = columns.getColumn("COLUMN_NAME"); //$NON-NLS-1$
+		for (int i = 0; i < columnNames.size(); i++) {
+			if (i > 0) result += ", "; //$NON-NLS-1$
+			result += (String) columnNames.get(i);
+		}
+		return result;
+	}
+	
+	
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/metadata/StringMatrix.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/metadata/StringMatrix.java
new file mode 100644
index 0000000..d5a381b
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/metadata/StringMatrix.java
@@ -0,0 +1,197 @@
+/*
+ * Created on 8/04/2003
+ *
+ */
+package net.sourceforge.phpdt.sql.sql.metadata;
+
+import java.util.Vector;
+
+/**
+ * @author jparrai
+ * Generic class to hold a Matrix of Strings, that is a Vector of Vectors of Strings.
+ * The first Vector "line" is supposed to have headers to the values of the rest.
+ */
+public class StringMatrix {
+	private Vector header = new Vector(10,10);
+	private Vector matrix = new Vector(10,10);
+	
+	/**
+	 * Adds a String to the end of the header keys
+	 * @param header : The string to be added
+	 */
+	public void addHeader(String header){
+			this.header.add(header);
+	}
+	/**
+	 * Adds a whole vector to the header
+	 * @param header
+	 */
+	private void addVectorHeader(Vector header){
+			this.header.addAll(header);
+	}
+	/**
+	 * Adds a String to the end of the row indicated
+	 * @param value : The string to be added
+	 * @param row : The row to 
+	 */
+	public void add(String value, int row) {
+		grow(row);
+		Vector rowVector = (Vector) matrix.get(row);
+		rowVector.add(value);
+	}
+	private void grow(int row) {
+		if (matrix.size() <= row)
+			for (int i = matrix.size(); i <= row; i++) {
+				matrix.add(new Vector(header.size(), 1));
+			}
+	}
+	/**
+	 * Adds a StringMatrix to the end of the row indicated
+	 * @param value : The string to be added
+	 * @param row : The row to 
+	 */
+	public void add(StringMatrix value) {
+		int row = matrix.size();
+		for (int i = 0; i < value.size(); i++){
+			grow(row);
+			for (int j = 0; j < value.getNumColumns(); j++){
+				String header = value.getHeaderColumn(j); 
+				addAt(header, value.get(header,i), row);
+			}
+			row++;
+		}
+		Vector rowVector = (Vector) matrix.get(row);
+		rowVector.add(value);
+	}
+	/**
+	* Adds a String to the row indicated, to the column that matches the key 
+	* @param value : The string to be added
+	* @param row : The row to 
+	*/
+	public void addAt(String key, String value, int row) {
+		grow(row);
+		Vector rowVector = (Vector) matrix.get(row);
+		int ind = header.indexOf(key);
+		if (ind < 0) return;
+		if (rowVector.size() < ind+1) rowVector.setSize(ind);
+		rowVector.add(ind, value);
+	}
+	/**
+	 * Adds a whole vector to the end of the row indicated
+	 * @param value : The vector to be added
+	 * @param row : The row to 
+	 */
+	private void addVector(Vector value, int row){
+		grow(row);
+		Vector rowVector = (Vector) matrix.get(row);
+		rowVector.addAll(value);
+	}
+	
+	public boolean contains(String key){
+		return header.contains(key);
+	}
+	/**
+	 * Gets a String value from the row indicated, from the column that matches the key
+	 * @param key
+	 * @param row
+	 * @return
+	 */
+	public String get(String key, int row){
+		if (matrix.size() <= row) return null;
+		int col = header.indexOf(key);
+		if (col < 0) return null; 
+		Vector rowVector = (Vector) matrix.get(row);
+		if (rowVector ==  null) return null;
+		return (String) rowVector.get(col);
+	}
+	/**
+	 * @param key: selects the column
+	 * @return a Vector with all the values in the selected column; null if empty
+	 */
+	public Vector getColumn(String key){
+		if (size() < 1 ) return null;
+		Vector result = new Vector(size(),1);
+		for (int i = 0; i < size(); i++){
+			result.add(get(key, i));
+		}
+		return result;
+	}
+	/**
+	 * @param key: selects the column
+	 * @return a Vector with all the values in the selected column, dropping duplicates; null if empty
+	 */
+	public Vector getUniqueColumn(String key){
+		if (size() < 1 ) return null;
+		Vector result = new Vector(size(),1);
+		for (int i = 0; i < size(); i++){
+			if (!result.contains(get(key, i))) result.add(get(key, i));
+		}
+		return result;
+	}
+	/**
+	 * @param key: selects the column
+	 * @return a Vector of Integers with all the indexes of the rows
+	 * matching the selected column, dropping duplicates; null if empty
+	 */
+	public Vector getIndexes(String key, String value){
+		Vector result = new Vector();
+		for (int i = 0; i < size(); i++){
+			if (get(key, i).equals(value))
+				result.add(new Integer(i));
+		}
+		return result;
+	}
+	/**
+	 * Deletes all the rows that matches the value for the key
+	 * @param key: selects the column
+	 */
+	public void dropMatching(String key, String value){
+		for (int i = 0; i < size(); i++){
+			if (get(key, i).equals(value)) deleteRow(i);
+		}
+	}
+	/**
+	 * Returns a StringMatrix with all the complete rows that match the key - value pair
+	 * @param key The column key
+	 * @param value The value to match
+	 * @return a StringMatrix with only the rows where the key equals the value
+	 */
+	public StringMatrix select(String key, String value){
+		StringMatrix result = new StringMatrix();
+		result.addVectorHeader(header);
+		int j = 0;
+		for (int i = 0; i < size(); i++){
+			if (get(key, i).equals(value)) {
+				result.addVector((Vector)matrix.get(i), j);
+				j++;
+			} 
+		}
+		return result;
+	}
+	/**
+	 * @param i
+	 * @return : a StringMatrix with only one row, the selected by i
+	 */
+	public StringMatrix rowMatrix(int i){
+		StringMatrix result = new StringMatrix();
+		result.addVectorHeader(header);
+		result.addVector((Vector)matrix.get(i),0);
+		return result;
+	}
+
+	/**
+	 * @return the number of rows
+	 */
+	public int size() {
+		return matrix.size();
+	}
+	public int getNumColumns() {
+		return header.size();
+	}
+	public String getHeaderColumn(int i){
+		return (String) header.get(i);
+	}
+	public void deleteRow(int i){
+		matrix.remove(i);
+	}
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/parser/SQLLexx.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/parser/SQLLexx.java
new file mode 100644
index 0000000..273514b
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/parser/SQLLexx.java
@@ -0,0 +1,123 @@
+package net.sourceforge.phpdt.sql.sql.parser;
+
+import java.util.Vector;
+
+public class SQLLexx {
+	private static String endline = ";"; //$NON-NLS-1$
+	private static String dash = "-"; //$NON-NLS-1$
+	public static Vector parse(String text) {
+		Vector tokens = new Vector();
+		StringPointer p = new StringPointer(text);
+		try {
+			while (!p.isDone()) {
+				int offset = p.getOffset();
+				char c = p.getNext();
+				//System.out.print(c);
+				if (Character.isWhitespace(c)) {
+					StringBuffer value = new StringBuffer();
+					while (Character.isWhitespace(c) && !p.isDone()) {
+						value.append(c);
+						p.mark();
+						c = p.getNext();
+					}
+					// done because of is done
+					if (Character.isWhitespace(c)) {
+						value.append(c);
+					} else {
+						p.reset();
+					}
+					tokens.addElement(new Token(Token.WHITESPACE, value.toString(), offset, offset + value.length()));
+				} else if (Character.isLetter(c) || c == '_') {
+					StringBuffer value = new StringBuffer();
+					while ((Character.isLetterOrDigit(c) || c == '_') && !p.isDone()) {
+						value.append(c);
+						p.mark();
+						c = p.getNext();
+					}
+					if ((Character.isLetterOrDigit(c) || c == '_')) {
+						value.append(c);
+					} else {
+						p.reset();
+					}
+					tokens.addElement(new Token(Token.IDENTIFIER, value.toString(), offset, offset + value.length()));
+				} else if (c == '\'') {
+					StringBuffer value = new StringBuffer();
+					value.append(c);
+					if (!p.isDone()) {
+						c = p.getNext();
+						while (c != '\'' && c != '\n' && !p.isDone()) {
+							value.append(c);
+							c = p.getNext();
+						}
+						if (c == '\'' || p.isDone()) {
+							value.append(c);
+						}
+					}
+					tokens.addElement(new Token(Token.LITERAL, value.toString(), offset, offset + value.length()));
+				} else if (c == '-') {
+					p.mark();
+					if (p.isDone()) {
+						tokens.addElement(new Token(Token.SYMBOL, dash, offset, offset + 1));
+					} else {
+						char next = p.getNext();
+						if (next == '-') {
+							StringBuffer value = new StringBuffer("--"); //$NON-NLS-1$
+							if (!p.isDone()) {
+								c = p.getNext();
+								while (c != '\n' && !p.isDone()) {
+									value.append(c);
+									c = p.getNext();
+								}
+								if (p.isDone()) {
+									value.append(c);
+								}
+							}
+							tokens.addElement(new Token(Token.COMMENT, value.toString(), offset, offset + value.length()));
+						} else {
+							tokens.addElement(new Token(Token.SYMBOL, dash, offset, offset + 1));
+							p.reset();
+						}
+					}
+				} else if (c == ';') {
+					tokens.addElement(new Token(Token.SEPARATOR, endline, offset, offset + 1));
+					StringBuffer value = new StringBuffer();
+					if (!p.isDone()) {
+						c = p.getNext();
+						while (c != '\n' && !p.isDone()) {
+							value.append(c);
+							c = p.getNext();
+						}
+						if (p.isDone()) {
+							value.append(c);
+						}
+						offset++;
+						tokens.addElement(new Token(Token.COMMENT, value.toString(), offset, offset + value.length()));
+					}
+				} else if (Character.isDigit(c)) {
+					StringBuffer value = new StringBuffer();
+					while ((Character.isDigit(c) || c == '.') && !p.isDone()) {
+						value.append(c);
+						p.mark();
+						c = p.getNext();
+					}
+					if ((Character.isDigit(c) || c == '.')) {
+						value.append(c);
+					} else {
+						p.reset();
+					}
+					tokens.addElement(new Token(Token.NUMERIC, value.toString(), offset, offset + value.length()));
+				} else {
+					tokens.addElement(new Token(Token.SYMBOL, new String(new char[] {c}), offset, offset + 1));
+				}
+			}
+		} catch (RuntimeException e) {
+			e.printStackTrace();
+		}
+		
+		//System.out.println("-------------------");
+		//for (int i = 0; i < tokens.size(); i++) {
+		//	System.out.println((Token) tokens.elementAt(i));
+		//}
+		return tokens;
+	}
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/parser/StringPointer.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/parser/StringPointer.java
new file mode 100644
index 0000000..048876b
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/parser/StringPointer.java
@@ -0,0 +1,30 @@
+package net.sourceforge.phpdt.sql.sql.parser;
+
+public class StringPointer {
+	char[] value;
+	int offset = 0;
+	int mark = 0;
+	public StringPointer(String s) {
+		value = s.toCharArray();
+	}
+	public char getNext() {
+		char retVal = value[offset];
+		offset++;
+		return retVal;
+	}
+	public void mark() {
+		mark = offset;
+	}
+	public void reset() {
+		offset = mark;
+	}
+	public int getOffset() {
+		return offset;
+	}
+	public boolean isDone() {
+		return offset == value.length;
+	}
+	public int getLength() {
+		return value.length;
+	}
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/parser/Token.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/parser/Token.java
new file mode 100644
index 0000000..3c10f3d
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/sql/parser/Token.java
@@ -0,0 +1,55 @@
+package net.sourceforge.phpdt.sql.sql.parser;
+
+public class Token {
+	public static final char SEPARATOR = 'S';
+	public static final char SYMBOL = 'Y';
+	public static final char LITERAL = 'L';
+	public static final char IDENTIFIER = 'I';
+	public static final char COMMENT = 'C';
+	public static final char WHITESPACE = 'W';
+	public static final char NUMERIC = 'N';
+	private char type;
+	private int start;
+	private int end;
+	private String value;
+	public Token(char type, String value, int start, int end) {
+		this.type = type;
+		this.value = value;
+		this.start = start;
+		this.end = end;
+	}
+	public int getEnd() {
+		return end;
+	}
+
+	public int getStart() {
+		return start;
+	}
+
+	public int getType() {
+		return type;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+	public void setEnd(int end) {
+		this.end = end;
+	}
+
+	public void setStart(int start) {
+		this.start = start;
+	}
+
+	public void setType(char type) {
+		this.type = type;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+	public String toString() {
+		return type + " ->" + value + "<- [" + start + ", " + end + "]";  //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+	}
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/utils/PHPStringThing.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/utils/PHPStringThing.java
new file mode 100644
index 0000000..1474500
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/utils/PHPStringThing.java
@@ -0,0 +1,34 @@
+/*
+ * Created on 14-Jul-2003
+ *
+ * To change this generated comment go to 
+ * Window>Preferences>Java>Code Generation>Code and Comments
+ */
+package net.sourceforge.phpdt.sql.utils;
+
+import java.util.Vector;
+
+import net.sourceforge.phpdt.sql.IConstants;
+
+public class PHPStringThing {
+	private String query = null;
+	public PHPStringThing() {
+	}
+	public PHPStringThing(String query) {
+		this.query = query;
+	}
+
+	public Vector toPHP() {
+		return toPHP(query);
+	}
+
+	static public Vector toPHP(String query) {
+		Vector buffer = new Vector();
+		buffer.add(IConstants.PHPFILEHEADER);
+		buffer.add(IConstants.PHPDBCONNHEADER);
+		buffer.add(IConstants.PHPDBRESULTHEADER.replaceAll("%%QUERY%%", query));
+		buffer.add(IConstants.PHPDBCLOSEHEADER);
+		return buffer;
+	}
+
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/BookmarkLabelProvider.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/BookmarkLabelProvider.java
index c3437b8..347bc26 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/BookmarkLabelProvider.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/BookmarkLabelProvider.java
@@ -2,16 +2,17 @@ package net.sourceforge.phpdt.sql.view;
 
 import java.net.URL;
 
-import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
-
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.jface.viewers.ILabelProviderListener;
 import org.eclipse.swt.graphics.Image;
 
+import net.sourceforge.phpdt.sql.Messages;
+import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
 import net.sourceforge.phpdt.sql.bookmarks.Bookmark;
-import net.sourceforge.phpdt.sql.sql.MultiSQLServer;
 import net.sourceforge.phpdt.sql.view.bookmark.BookmarkNode;
+import net.sourceforge.phpdt.sql.view.bookmark.ColumnMetaData;
+import net.sourceforge.phpdt.sql.view.bookmark.GroupNode;
 import net.sourceforge.phpdt.sql.view.bookmark.Root;
 import net.sourceforge.phpdt.sql.view.bookmark.SequenceNode;
 import net.sourceforge.phpdt.sql.view.bookmark.TableNode;
@@ -20,10 +21,7 @@ import net.sourceforge.phpdt.sql.view.bookmark.ViewNode;
 /**
  * @author root
  *
- * To change this generated comment edit the template variable "typecomment":
- * Window>Preferences>Java>Templates.
- * To enable and disable the creation of type comments go to
- * Window>Preferences>Java>Code Generation.
+ * Implements the ILabelProvider for the Bookmarks.
  */
 public class BookmarkLabelProvider implements ILabelProvider {
 	/**
@@ -34,18 +32,50 @@ public class BookmarkLabelProvider implements ILabelProvider {
 	   if (element instanceof BookmarkNode) {
 	   	try {
            URL installURL = PHPEclipseSQLPlugin.getDefault().getDescriptor().getInstallURL();
-           MultiSQLServer server = MultiSQLServer.getInstance();
-            URL url = new URL(installURL, "icons/bookmarks.gif");
-           if (server.getConnected() != null && element.equals(server.getConnected())){
-            url = new URL(installURL, "icons/connected.gif");
-           }
-      	    descriptor = ImageDescriptor.createFromURL(url);
+           BookmarkNode bookmark = (BookmarkNode) element;
+		   URL url = new URL(installURL, (bookmark.isConnected()) ? "icons/connected.gif" :  "icons/bookmarks.gif"); //$NON-NLS-1$ //$NON-NLS-2$
+      	   descriptor = ImageDescriptor.createFromURL(url);
 	   	} catch (Exception e) {
 	   		e.printStackTrace();
 	   	}
-	   } else {
-	   	  return null;
-	   }
+	   } else if (element instanceof ColumnMetaData){
+		try {
+			ColumnMetaData columnMetaData = (ColumnMetaData) element;
+			return columnMetaData.getImage();
+		 } catch (Exception e) {
+			 e.printStackTrace();
+		 }
+	   } else if (element instanceof GroupNode){
+		try {
+			GroupNode groupNode = (GroupNode) element;
+			return groupNode.getImage();
+		 } catch (Exception e) {
+			 e.printStackTrace();
+		 }
+	   } else if (element instanceof TableNode){
+		try {
+			TableNode TableNode = (TableNode) element;
+			return TableNode.getImage();
+		 } catch (Exception e) {
+			 e.printStackTrace();
+		 }
+	   } else if (element instanceof ViewNode){
+		try {
+			ViewNode ViewNode = (ViewNode) element;
+			return ViewNode.getImage();
+		 } catch (Exception e) {
+			 e.printStackTrace();
+		 }
+	   } else if (element instanceof SequenceNode){
+		try {
+			SequenceNode SequenceNode = (SequenceNode) element;
+			return SequenceNode.getImage();
+		 } catch (Exception e) {
+			 e.printStackTrace();
+		 }
+		} else {
+	   	return null;
+		}
 	   return descriptor.createImage();
 	}
 
@@ -57,23 +87,23 @@ public class BookmarkLabelProvider implements ILabelProvider {
 			Bookmark bookmark = (Bookmark) element;
 			return bookmark.getName();
 		} else if (element.equals(Root.ROOT)) {
-			return "ROOT";
+			return "ROOT"; //$NON-NLS-1$
 		} else if (element instanceof TableNode) {
 			TableNode node = (TableNode) element;
-			if (node.getSize() > -1) {
-				return "T " + element.toString() + " (" + node.getSize() + ")";
+			if (node.isSizeVisible()) {
+				return Messages.getString("BookmarkLabelProvider.TablePrefix") + element.toString() + " (" + node.getSize() + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 			} else {
-				return "T " + element.toString();
+				return Messages.getString("BookmarkLabelProvider.TablePrefix") + element.toString(); //$NON-NLS-1$
 			}
 		} else if (element instanceof ViewNode) {
 			ViewNode node = (ViewNode) element;
-			if (node.getSize() > -1) {
-				return "V " + element.toString() + " (" + node.getSize() + ")";
+			if (node.isSizeVisible()) {
+				return Messages.getString("BookmarkLabelProvider.ViewPrefix") + element.toString() + " (" + node.getSize() + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 			} else {
-				return "V " + element.toString();
+				return Messages.getString("BookmarkLabelProvider.ViewPrefix") + element.toString(); //$NON-NLS-1$
 			}
 		} else if (element instanceof SequenceNode) {
-			return "S " + element.toString();
+			return Messages.getString("BookmarkLabelProvider.SequencePrefix") + element.toString(); //$NON-NLS-1$
 		}
 		return element.toString();
 	}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/BookmarkView.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/BookmarkView.java
index 15a2d03..3363741 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/BookmarkView.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/BookmarkView.java
@@ -1,9 +1,15 @@
 package net.sourceforge.phpdt.sql.view;
 
-import java.util.Vector;
 
-import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.sql.SQLException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Vector;
 
+import org.apache.crimson.tree.XmlDocument;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IMenuListener;
 import org.eclipse.jface.action.IMenuManager;
@@ -15,6 +21,9 @@ import org.eclipse.jface.viewers.IDoubleClickListener;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
@@ -24,344 +33,458 @@ import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.IWorkbenchActionConstants;
 import org.eclipse.ui.part.ViewPart;
 
+import net.sourceforge.phpdt.sql.Messages;
+import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
 import net.sourceforge.phpdt.sql.actions.ConnectAction;
+import net.sourceforge.phpdt.sql.actions.DeleteAllRowsAction;
 import net.sourceforge.phpdt.sql.actions.DeleteBookmarkAction;
 import net.sourceforge.phpdt.sql.actions.DisconnectAction;
 import net.sourceforge.phpdt.sql.actions.EditBookmarkAction;
+import net.sourceforge.phpdt.sql.actions.ExportXMLAction;
 import net.sourceforge.phpdt.sql.actions.NewBookmarkAction;
 import net.sourceforge.phpdt.sql.actions.NextSequenceAction;
 import net.sourceforge.phpdt.sql.actions.RefreshBookmarkAction;
 import net.sourceforge.phpdt.sql.actions.ViewTableAction;
 import net.sourceforge.phpdt.sql.actions.ViewTableDetailsAction;
-import net.sourceforge.phpdt.sql.adapters.FeatureNotSupported;
-import net.sourceforge.phpdt.sql.adapters.NoSuchAdapterException;
+import net.sourceforge.phpdt.sql.adapters.AdapterFactory;
+import net.sourceforge.phpdt.sql.adapters.DatabaseAdapter;
+import net.sourceforge.phpdt.sql.model.Entity;
+import net.sourceforge.phpdt.sql.model.Sequence;
+import net.sourceforge.phpdt.sql.model.Table;
+import net.sourceforge.phpdt.sql.model.View;
+import net.sourceforge.phpdt.sql.sql.DbElementsConstants;
 import net.sourceforge.phpdt.sql.sql.MultiSQLServer;
-import net.sourceforge.phpdt.sql.sql.SQLHelper;
 import net.sourceforge.phpdt.sql.view.bookmark.BookmarkContentProvider;
 import net.sourceforge.phpdt.sql.view.bookmark.BookmarkNode;
+import net.sourceforge.phpdt.sql.view.bookmark.GroupNode;
 import net.sourceforge.phpdt.sql.view.bookmark.Root;
 import net.sourceforge.phpdt.sql.view.bookmark.SequenceNode;
 import net.sourceforge.phpdt.sql.view.bookmark.TableNode;
+import net.sourceforge.phpdt.sql.view.bookmark.TreeNode;
 import net.sourceforge.phpdt.sql.view.bookmark.ViewNode;
 
 public class BookmarkView extends ViewPart {
-  private ConnectAction connectAction;
-  private DisconnectAction disconnectAction;
-  private NewBookmarkAction newBookmarkAction;
-  private EditBookmarkAction editBookmarkAction;
-  private DeleteBookmarkAction deleteBookmarkAction;
-  private ViewTableAction viewTableAction;
-  private RefreshBookmarkAction refreshBookmarkAction;
-  private ViewTableDetailsAction viewTableDetailsAction;
-  private NextSequenceAction nextSequenceAction;
-  private Action enableTableSizes;
-  private Action enableTableColumns;
-  private static BookmarkView instance = null;
-  private TreeViewer treeViewer;
-  private BookmarkContentProvider provider =
-    BookmarkContentProvider.getInstance();
-  private Label status;
-  private SQLHelper helper = new SQLHelper();
-  private boolean showTableSizes = false;
-  private boolean showTableColumns = false;
-  private BookmarkNode clipboard;
-  public synchronized static BookmarkView getInstance() {
-    return instance;
-  }
-  public Object getCurrent() {
-    return ((StructuredSelection) treeViewer.getSelection()).getFirstElement();
-  }
-  public BookmarkNode getCurrentBookmark() {
-    return (BookmarkNode) getCurrent();
-  }
-  public TableNode getCurrentTable() {
-    return (TableNode) getCurrent();
-  }
-  public void deleteCurrent() {
-    provider.removeBookmark(getCurrentBookmark());
-    treeViewer.refresh();
-  }
-  public void refreshBookmarkData() {
-    BookmarkNode current =
-      (BookmarkNode) MultiSQLServer.getInstance().getConnected();
-    BookmarkContentProvider provider = BookmarkContentProvider.getInstance();
-    LogProxy log = LogProxy.getInstance();
-    if (current != null) {
-      try {
-        Vector children = new Vector();
-        setStatus(Messages.getString("bookmarkview.retrieveTableData")); //$NON-NLS-1$
-        Vector tables = new Vector();
-        try {
-          tables = helper.getTableList(current);
-          if (showTableSizes || showTableColumns) {
-            for (int i = 0; i < tables.size(); i++) {
-              TableNode table = (TableNode) tables.elementAt(i);
-              String name =
-                SQLHelper.getFullTableName(current, table.getName());
-              if (showTableSizes) {
-                int size = helper.getSize(name);
-                table.setSize(size);
-              }
-              if (showTableColumns) {
-                Vector metaData = helper.getMetaData(table, name);
-                table.setMetadata(metaData);
-              }
-            }
-          }
-        } catch (FeatureNotSupported e) {
-          setStatus(Messages.getString("bookmarkview.noTables")); //$NON-NLS-1$
-        }
-        setStatus(Messages.getString("bookmarkview.retrieveViewData")); //$NON-NLS-1$
-        Vector views = new Vector();
+	private ConnectAction connectAction;
+	private DisconnectAction disconnectAction;
+	private NewBookmarkAction newBookmarkAction;
+	private EditBookmarkAction editBookmarkAction;
+	private DeleteBookmarkAction deleteBookmarkAction;
+	private ViewTableAction viewTableAction;
+	private ExportXMLAction exportXMLAction;
+	private RefreshBookmarkAction refreshBookmarkAction;
+	private ViewTableDetailsAction viewTableDetailsAction;
+	private NextSequenceAction nextSequenceAction;
+
+    private DeleteAllRowsAction deleteAllRowsAction;
+
+	private Action enableTableSizes;
+	private static BookmarkView instance = null;
+	private TreeViewer treeViewer;
+	private BookmarkContentProvider provider =
+		BookmarkContentProvider.getInstance();
+	private Label status;
+	private boolean showTableSizes = false;
+	private BookmarkNode clipboard;
+	private Clipboard sysClip;
+	public synchronized static BookmarkView getInstance() {
+		return instance;
+	}
+	/**
+	 * Returns the current selected object in the tree. If it's a multiple selection, return the first.
+	 * @return
+	 */
+	public Object getCurrent() {
+		if (treeViewer == null) return null;
+		return ((StructuredSelection) treeViewer.getSelection())
+					.getFirstElement();
+	}
+	/**
+	 * Returns the current selected objects in the tree, in the form of a StructuredSelection.
+	 * @return
+	 */
+	public StructuredSelection getSelection() {
+		if (treeViewer == null) return null;
+		return ((StructuredSelection) treeViewer.getSelection());
+	}
+	
+	/** 
+	 * Navigates the tree to get the current bookmark (root) of the selected element.
+	 * If it's a multiple selection, it takes the first one.
+	 * @return
+	 */
+	public BookmarkNode getCurrentBookmark() {
+		TreeNode current = (TreeNode) getCurrent();
+		
+		return getRoot(current);
+	}
+
+	public static BookmarkNode getRoot(TreeNode node){
+		while (!( node instanceof BookmarkNode))
+		{
+			node = (TreeNode) node.getParent();
+		}
+		return (BookmarkNode) node;
+
+	}
+	public void deleteCurrent() {
+		provider.removeBookmark(getCurrentBookmark());
+		treeViewer.refresh();
+	}
+	
+	/**
+	 * Requeries the database to get the Data from all the bookmarks
+	 */
+	public void refreshBookmarkData(){
+		if (treeViewer == null) return;
+		BookmarkContentProvider provider = (BookmarkContentProvider) treeViewer.getContentProvider();
+		Object[] objects = provider.getElements(Root.ROOT);
+		// We make a loop for all the bookmarks, and refresh each one
+		for (int i = 0; i < objects.length; i++) {
+			BookmarkNode current = (BookmarkNode) objects[i];
+			if (current.isConnected()) refreshOneBookmarkData(current);
+		}
+	}
+	
+	/**
+	 * Requeries the database to get the Tables, Views, etc. from a Bookmark
+	 * @param current	The BookmarkNode to be requeried and refreshed
+	 */
+	public void refreshOneBookmarkData(BookmarkNode current) {
         try {
-          views = helper.getViewList(current);
-          if (showTableSizes || showTableColumns) {
-            for (int i = 0; i < views.size(); i++) {
-              ViewNode view = (ViewNode) views.elementAt(i);
-              String name = SQLHelper.getFullTableName(current, view.getName());
-              if (showTableSizes) {
-                int size = helper.getSize(name);
-                view.setSize(size);
-              }
-              if (showTableColumns) {
-                Vector metaData = helper.getMetaData(view, name);
-                view.setMetadata(metaData);
-              }
+    		BookmarkContentProvider provider = BookmarkContentProvider.getInstance();
+    		if (current != null) {
+                
+                Map groups = new HashMap();
+                DatabaseAdapter adapter = AdapterFactory.getInstance().getAdapter(current.getType());
+                
+                setStatus(Messages.getString("bookmarkview.retrieveEntities")); //$NON-NLS-1$
+                Entity[] entities = adapter.getEntities(current);
+                for (int i = 0, length = (entities == null) ? 0 : entities.length; i < length; i++) {
+                    
+                    Entity entity = entities[i];
+                    String type = entity.getType();
+                    
+                    if (!groups.containsKey(type)) {
+                        groups.put(type, new GroupNode(current, type));
+                    }
+                    GroupNode group = (GroupNode) groups.get(type);
+                    TreeNode treeNode = null;
+                    if (type.equals(DbElementsConstants.Table)) {
+                        treeNode = new TableNode(group, this.showTableSizes, (Table) entity);
+                    } else if (type.equals(DbElementsConstants.View)) { 
+                        treeNode = new ViewNode(group, this.showTableSizes, (View) entity); 
+                    } else if (type.equals(DbElementsConstants.Sequence)) {
+                        treeNode = new SequenceNode(group, (Sequence) entity);
+                    }
+                    
+                    if (treeNode != null) {
+                        group.addChild(treeNode);
+                    }
+                }
+                
+                Vector children = new Vector(groups.values());
+                Collections.sort(children);
+                
+        		provider.setChildren(current, children);
+        		BookmarkView.getInstance().refresh();
+        		setStatus(Messages.getString("bookmarkview.done")); //$NON-NLS-1$
             }
-          }
-        } catch (FeatureNotSupported e) {
-          setStatus(Messages.getString("bookmarkview.noViews")); //$NON-NLS-1$
-        }
-        children.addAll(tables);
-        children.addAll(views);
-        setStatus(Messages.getString("bookmarkview.retrieveSeqData")); //$NON-NLS-1$
-        try {
-          children.addAll(helper.getSequenceList(current));
-        } catch (FeatureNotSupported e) {
-          setStatus(Messages.getString("bookmarkview.noSequences")); //$NON-NLS-1$
+        } catch (SQLException e) {
+            LogProxy.getInstance().addText(LogProxy.ERROR, e);
         }
-        provider.setChildren(current, children);
-        BookmarkView.getInstance().refresh();
-        setStatus(Messages.getString("bookmarkview.done")); //$NON-NLS-1$
-      } catch (NoSuchAdapterException e) {
-        setStatus(Messages.getString("bookmarkview.metaDataError")); //$NON-NLS-1$
-        log.addText(SQLLogView.ERROR, "Error occurred: " + e.toString()); //$NON-NLS-1$
-        e.printStackTrace();
-      }
-    }
-  }
-  public void expandCurrent(BookmarkNode node) {
-    treeViewer.setExpandedState(node, true);
-    treeViewer.refresh(node, false);
-  }
-  public void refresh() {
-    treeViewer.refresh();
-  }
-  public void disconnect() {
-    MultiSQLServer server = MultiSQLServer.getInstance();
-    BookmarkNode current = (BookmarkNode) server.getConnected();
-    if (current != null) {
-      setStatus(Messages.getString("bookmarkview.disconnect") + current.getName()); //$NON-NLS-1$
-      MultiSQLServer.getInstance().disconnect(current);
-      BookmarkContentProvider provider = BookmarkContentProvider.getInstance();
-      provider.setChildren(current, new Vector());
-      BookmarkView.getInstance().refresh();
-      setStatus(Messages.getString("bookmarkview.done")); //$NON-NLS-1$
-    }
-  }
-  public void createPartControl(org.eclipse.swt.widgets.Composite parent) {
-    instance = this;
-    initActions();
-    Composite main = new Composite(parent, SWT.NONE);
-    GridLayout layout = new GridLayout(1, false);
-    layout.horizontalSpacing = 0;
-    layout.verticalSpacing = 0;
-    main.setLayout(layout);
+	}
 
-    enableTableSizes = new Action() {
-      public void run() {
-        showTableSizes = enableTableSizes.isChecked();
-        refreshBookmarkData();
-      }
-    };
-    enableTableSizes.setText("Show Table Sizes");
-    enableTableSizes.setChecked(false);
+	public void expandCurrent(BookmarkNode node) {
+		treeViewer.setExpandedState(node, true);
+		treeViewer.refresh(node, false);
+	}
+	public void refresh() {
+		treeViewer.refresh();
+	}
+	public void disconnect() {
+		//Changed for multiple connections
+		BookmarkNode current = getCurrentBookmark();
+		if (current != null) {
+			setStatus(Messages.getString("bookmarkview.disconnect") + current.getName()); //$NON-NLS-1$
+			MultiSQLServer.getInstance().disconnect(current, current.getConnection());
+			BookmarkContentProvider provider = BookmarkContentProvider.getInstance();
+			provider.setChildren(current, new Vector());
+			BookmarkView.getInstance().refresh();
+			setStatus(Messages.getString("bookmarkview.done")); //$NON-NLS-1$
+		}
+	}
+	public void createPartControl(org.eclipse.swt.widgets.Composite parent) {
+		instance = this;
+		initActions();
+		sysClip = new Clipboard(getSite().getShell().getDisplay());
+		Composite main = new Composite(parent, SWT.NONE);
+		GridLayout layout = new GridLayout(1, false);
+		layout.horizontalSpacing = 0;
+		layout.verticalSpacing = 0;
+		main.setLayout(layout);
 
-    enableTableColumns = new Action() {
-      public void run() {
-        showTableColumns = enableTableColumns.isChecked();
-        refreshBookmarkData();
-      }
-    };
-    enableTableColumns.setText("Show Table Column Data");
-    enableTableColumns.setChecked(false);
+		enableTableSizes = new Action() {
+			public void run() {
+				showTableSizes = enableTableSizes.isChecked();
+				refreshBookmarkData();
+			}
+		};
+		enableTableSizes.setText(Messages.getString("BookmarkView.ShowTableSizes")); //$NON-NLS-1$
+		enableTableSizes.setChecked(false);
+		
+		IActionBars actionBars = getViewSite().getActionBars();
+		actionBars.getMenuManager().add(enableTableSizes);
+	
+		treeViewer = new TreeViewer(main);
+		treeViewer.setContentProvider(provider);
+		treeViewer.setLabelProvider(new BookmarkLabelProvider());
+		treeViewer.setInput(Root.ROOT);
+		MenuManager manager = new MenuManager();
+		manager.setRemoveAllWhenShown(true);
+		Menu fTextContextMenu =
+			manager.createContextMenu(treeViewer.getControl());
+		treeViewer.getControl().setMenu(fTextContextMenu);
+		treeViewer.addDoubleClickListener(new IDoubleClickListener() {
+			public void doubleClick(DoubleClickEvent event) {
+				Object sel = getCurrent();
+				if (sel instanceof BookmarkNode) {
+					BookmarkNode node = (BookmarkNode) sel;
+					if (!node.isConnected()) {
+						connectAction.run();
+					}
+				} else if (sel instanceof TableNode || sel instanceof ViewNode) {
+					viewTableAction.run();
+				}
+			}
+		});
+		manager.addMenuListener(new IMenuListener() {
+			public void menuAboutToShow(IMenuManager mgr) {
+				Object sel = getCurrent();
+				if (sel instanceof BookmarkNode) {
+					BookmarkNode node = (BookmarkNode) sel;
+					if (node.isConnected()) {
+						mgr.add(disconnectAction);
+					} else {
+						mgr.add(connectAction);
+					}
+					mgr.add(new Separator());
+					mgr.add(newBookmarkAction);
+					mgr.add(editBookmarkAction);
+					mgr.add(deleteBookmarkAction);
+					mgr.add(new Separator());
+					mgr.add(copyAction);
+					copyAction.setText(Messages.getString("BookmarkView.Copy")); //$NON-NLS-1$
+					copyAction.setImageDescriptor(
+						PHPEclipseSQLPlugin.getImageDescriptor("copy.gif")); //$NON-NLS-1$
+					mgr.add(pasteAction);
+					pasteAction.setText(Messages.getString("BookmarkView.Paste")); //$NON-NLS-1$
+					pasteAction.setImageDescriptor(
+						PHPEclipseSQLPlugin.getImageDescriptor("paste.gif")); //$NON-NLS-1$
+					if (node.isConnected()) {
+						mgr.add(new Separator());
+						mgr.add(refreshBookmarkAction);
+					}
+				} else if (sel instanceof TableNode || sel instanceof ViewNode) {
+					mgr.add(copyAction);
+					copyAction.setText(Messages.getString("BookmarkView.Copy")); //$NON-NLS-1$
+					copyAction.setImageDescriptor(
+						PHPEclipseSQLPlugin.getImageDescriptor("copy.gif")); //$NON-NLS-1$
+					mgr.add(viewTableAction);
+					mgr.add(exportXMLAction);
+					mgr.add(viewTableDetailsAction);
+					mgr.add(new Separator());
+					mgr.add(newBookmarkAction);
+                    mgr.add(new Separator());
+                    mgr.add(BookmarkView.this.deleteAllRowsAction);
+				} else if (sel instanceof SequenceNode) {
+					mgr.add(nextSequenceAction);
+					mgr.add(new Separator());
+					mgr.add(newBookmarkAction);
+				} else {
+					mgr.add(newBookmarkAction);
+				}
+			}
+		});
+		GridData gridData = new GridData();
+		gridData.horizontalAlignment = GridData.FILL;
+		gridData.verticalAlignment = GridData.FILL;
+		gridData.grabExcessHorizontalSpace = true;
+		gridData.grabExcessVerticalSpace = true;
+		treeViewer.getControl().setLayoutData(gridData);
+		status = new Label(main, SWT.NONE);
+		gridData = new GridData();
+		gridData.horizontalAlignment = GridData.FILL;
+		gridData.grabExcessHorizontalSpace = true;
+		status.setLayoutData(gridData);
+		
+		IActionBars bars = getViewSite().getActionBars();
+		bars.setGlobalActionHandler(IWorkbenchActionConstants.COPY, copyAction);
+		bars.setGlobalActionHandler(IWorkbenchActionConstants.PASTE, pasteAction);
+		bars.setGlobalActionHandler(IWorkbenchActionConstants.DELETE, deleteBookmarkAction);
 
-    IActionBars actionBars = getViewSite().getActionBars();
-    actionBars.getMenuManager().add(enableTableSizes);
-    actionBars.getMenuManager().add(enableTableColumns);
+		IToolBarManager toolBar = getViewSite().getActionBars().getToolBarManager();
+		toolBar.add(newBookmarkAction);
+		
+		status.setText(Messages.getString("bookmarkview.done")); //$NON-NLS-1$
+	}
+	public void initActions() {
+		connectAction = new ConnectAction();
+		connectAction.setText(Messages.getString("bookmarkview.connect")); //$NON-NLS-1$
+		connectAction.setImageDescriptor(
+			PHPEclipseSQLPlugin.getImageDescriptor("refresh.gif")); //$NON-NLS-1$
+		connectAction.init(this);
+		disconnectAction = new DisconnectAction();
+		disconnectAction.setText(Messages.getString("bookmarkview.disconnect")); //$NON-NLS-1$
+		disconnectAction.setImageDescriptor(
+			PHPEclipseSQLPlugin.getImageDescriptor("stop.gif")); //$NON-NLS-1$
+		disconnectAction.init(this);
+		newBookmarkAction = new NewBookmarkAction();
+		newBookmarkAction.setText(Messages.getString("bookmarkview.newBookmark")); //$NON-NLS-1$
+		newBookmarkAction.setToolTipText(Messages.getString("bookmarkview.newBookmark")); //$NON-NLS-1$
+		newBookmarkAction.setImageDescriptor(
+			PHPEclipseSQLPlugin.getImageDescriptor("bookmarks.gif")); //$NON-NLS-1$
+		newBookmarkAction.init(this);
+		editBookmarkAction = new EditBookmarkAction();
+		editBookmarkAction.setText(Messages.getString("bookmarkview.editBookmark")); //$NON-NLS-1$
+		editBookmarkAction.setImageDescriptor(
+			PHPEclipseSQLPlugin.getImageDescriptor("edit.gif")); //$NON-NLS-1$
+		editBookmarkAction.init(this);
+		deleteBookmarkAction = new DeleteBookmarkAction();
+		deleteBookmarkAction.setText(Messages.getString("bookmarkview.deleteBookmark")); //$NON-NLS-1$
+		deleteBookmarkAction.setImageDescriptor(
+			PHPEclipseSQLPlugin.getImageDescriptor("delete.gif")); //$NON-NLS-1$
+		deleteBookmarkAction.init(this);
+		refreshBookmarkAction = new RefreshBookmarkAction();
+		refreshBookmarkAction.setText(Messages.getString("bookmarkview.refresh")); //$NON-NLS-1$
+		refreshBookmarkAction.setImageDescriptor(
+			PHPEclipseSQLPlugin.getImageDescriptor("refresh.gif")); //$NON-NLS-1$
+		refreshBookmarkAction.init(this);
+		viewTableAction = new ViewTableAction();
+		viewTableAction.setText(Messages.getString("bookmarkview.viewTable")); //$NON-NLS-1$
+		viewTableAction.setImageDescriptor(
+			PHPEclipseSQLPlugin.getImageDescriptor("table.gif")); //$NON-NLS-1$
+		viewTableAction.init(this);
+		exportXMLAction = new ExportXMLAction();
+		exportXMLAction.setText(Messages.getString("bookmarkview.exportXML")); //$NON-NLS-1$
+		exportXMLAction.setImageDescriptor(
+			PHPEclipseSQLPlugin.getImageDescriptor("xml.gif")); //$NON-NLS-1$
+		exportXMLAction.init(this);
+		viewTableDetailsAction = new ViewTableDetailsAction();
+		viewTableDetailsAction.setText(Messages.getString("bookmarkview.viewTableDetails")); //$NON-NLS-1$
+		viewTableDetailsAction.setImageDescriptor(
+			PHPEclipseSQLPlugin.getImageDescriptor("table.gif")); //$NON-NLS-1$
+		viewTableDetailsAction.init(this);
+		nextSequenceAction = new NextSequenceAction();
+		nextSequenceAction.setText(Messages.getString("bookmarkview.nextSequence")); //$NON-NLS-1$
+		nextSequenceAction.setImageDescriptor(
+			PHPEclipseSQLPlugin.getImageDescriptor("table.gif")); //$NON-NLS-1$
+		nextSequenceAction.init(this);
 
-    treeViewer = new TreeViewer(main);
-    treeViewer.setContentProvider(provider);
-    treeViewer.setLabelProvider(new BookmarkLabelProvider());
-    treeViewer.setInput(Root.ROOT);
-    MenuManager manager = new MenuManager();
-    manager.setRemoveAllWhenShown(true);
-    Menu fTextContextMenu = manager.createContextMenu(treeViewer.getControl());
-    treeViewer.getControl().setMenu(fTextContextMenu);
-    treeViewer.addDoubleClickListener(new IDoubleClickListener() {
-      public void doubleClick(DoubleClickEvent event) {
-        Object sel = getCurrent();
-        if (sel instanceof BookmarkNode) {
-          BookmarkNode node = (BookmarkNode) sel;
-          MultiSQLServer server = MultiSQLServer.getInstance();
-          if (server.getConnected() == null
-            || !node.equals(server.getConnected())) {
-            connectAction.run();
-          }
-        } else if (sel instanceof TableNode) {
-          viewTableAction.run();
-        } else if (sel instanceof ViewNode) {
-          viewTableAction.run();
-        }
-      }
-    });
-    manager.addMenuListener(new IMenuListener() {
-      public void menuAboutToShow(IMenuManager mgr) {
-        Object sel = getCurrent();
-        if (sel instanceof BookmarkNode) {
-          BookmarkNode node = (BookmarkNode) sel;
-          MultiSQLServer server = MultiSQLServer.getInstance();
-          boolean connected = false;
-          if (server.getConnected() != null
-            && node.equals(server.getConnected())) {
-            connected = true;
-          } else {
-            connected = false;
-          }
-          if (connected) {
-            mgr.add(disconnectAction);
-          } else {
-            mgr.add(connectAction);
-          }
-          mgr.add(new Separator());
-          mgr.add(newBookmarkAction);
-          mgr.add(editBookmarkAction);
-          mgr.add(deleteBookmarkAction);
-          mgr.add(new Separator());
-          mgr.add(copyAction);
-          copyAction.setText("Copy");
-          copyAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("copy.gif")); //$NON-NLS-1$
-          mgr.add(pasteAction);
-          pasteAction.setText("Paste");
-          pasteAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("paste.gif")); //$NON-NLS-1$
-          if (connected) {
-            mgr.add(new Separator());
-            mgr.add(refreshBookmarkAction);
-          }
-        } else if (sel instanceof TableNode || sel instanceof ViewNode) {
-          mgr.add(viewTableAction);
-          mgr.add(viewTableDetailsAction);
-          mgr.add(new Separator());
-          mgr.add(newBookmarkAction);
-        } else if (sel instanceof SequenceNode) {
-          mgr.add(nextSequenceAction);
-          mgr.add(new Separator());
-          mgr.add(newBookmarkAction);
-        } else {
-          mgr.add(newBookmarkAction);
-        }
-      }
-    });
-    GridData gridData = new GridData();
-    gridData.horizontalAlignment = GridData.FILL;
-    gridData.verticalAlignment = GridData.FILL;
-    gridData.grabExcessHorizontalSpace = true;
-    gridData.grabExcessVerticalSpace = true;
-    treeViewer.getControl().setLayoutData(gridData);
-    status = new Label(main, SWT.NONE);
-    gridData = new GridData();
-    gridData.horizontalAlignment = GridData.FILL;
-    gridData.grabExcessHorizontalSpace = true;
-    status.setLayoutData(gridData);
+        this.deleteAllRowsAction = new DeleteAllRowsAction();        
+        this.deleteAllRowsAction.setText(Messages.getString("bookmarkview.deleteRowsAction"));
+        this.deleteAllRowsAction.setImageDescriptor(
+            PHPEclipseSQLPlugin.getImageDescriptor("delete.gif")); //$NON-NLS-1$
+        this.deleteAllRowsAction.init(this);
+	}
+	
+	public void setFocus() {
+		if (treeViewer == null) return;
+		BookmarkContentProvider provider = (BookmarkContentProvider) treeViewer.getContentProvider();
+		Object[] objects = provider.getElements(Root.ROOT);
+		for (int i = 0; i < objects.length; i++) {
+			BookmarkNode current = (BookmarkNode) objects[i];
+			if (current.isConnected() && (!current.hasChildren())) refreshOneBookmarkData(current);
+		}
+	}
+	
+	private Action copyAction = new Action() {
+		public void run() {
+			Object sel = getCurrent();
+			
+			if (sel instanceof BookmarkNode) {
+				clipboard = (BookmarkNode) sel;
+				sysClip.setContents(
+					new Object[] { clipboard.getName()},
+					new Transfer[] { TextTransfer.getInstance()});
+				
+			} else if (sel instanceof TableNode || sel instanceof ViewNode) {
+				XmlDocument doc = new XmlDocument();
+				ExportXMLAction.ExportXMLSelection(doc, (StructuredSelection) treeViewer.getSelection());
+				StringWriter text = new StringWriter();
+				try {
+					doc.write(text);
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+				String textXml = new String(text.getBuffer());
+				sysClip.setContents(
+					new Object[] { textXml },
+					new Transfer[] { TextTransfer.getInstance()});
+
+			}
+			
+		}
+	};
+	private Action pasteAction = new Action() {
+		public void run() {
+			if (clipboard != null) {
+				BookmarkNode node = new BookmarkNode(clipboard);
+				node.setName(Messages.getString("BookmarkView.CopyOf") + node.getName()); //$NON-NLS-1$
+				provider.addBookmark(node);
+				refresh();
+			}
+		}
+	};
+	public void addNewBookmark(BookmarkNode bookmark) {
+		provider.addBookmark(bookmark);
+		treeViewer.refresh();
+	}
+	public void setStatus(String text) {
+		status.setText(text);
+	}
 
-    IActionBars bars = getViewSite().getActionBars();
-    bars.setGlobalActionHandler(IWorkbenchActionConstants.COPY, copyAction);
-    bars.setGlobalActionHandler(IWorkbenchActionConstants.PASTE, pasteAction);
-    bars.setGlobalActionHandler(
-      IWorkbenchActionConstants.DELETE,
-      deleteBookmarkAction);
+	/**
+	 * @return
+	 */
+	public BookmarkNode getClipboard() {
+		return clipboard;
+	}
+	
+	/**
+	 * Finds a child of the BookmarkView with the said name 
+	 * @param name
+	 * @return the TreeNode found. null if none
+	 */
+	public BookmarkNode find(String name){
+		if (treeViewer == null) return null;
+		BookmarkContentProvider provider = (BookmarkContentProvider) treeViewer.getContentProvider();
+		Object[] objects = provider.getElements(Root.ROOT);
+		for (int i = 0; i < objects.length; i++) {
+			BookmarkNode current = (BookmarkNode) objects[i];
+			if (name.equals(current.getName())) return current;
+		}
+		return null;
+	}
+	
+	/**
+	 * Returs a Vector with all the elements of the treeViewer
+	 * @return
+	 */
+	public Vector getElements(){
+		Vector result = new Vector();
+		if (treeViewer == null) return result;
+		BookmarkContentProvider provider = (BookmarkContentProvider) treeViewer.getContentProvider();
+		Object[] objects = provider.getElements(Root.ROOT);
+		for (int i = 0; i < objects.length; i++) {
+			BookmarkNode current = (BookmarkNode) objects[i];
+			result.add(current);
+		}
+		return result;
+	}
 
-    IToolBarManager toolBar = getViewSite().getActionBars().getToolBarManager();
-    toolBar.add(newBookmarkAction);
+	public void dispose(){
+		sysClip.dispose();
+		super.dispose();
+	}
 
-    status.setText(Messages.getString("bookmarkview.done")); //$NON-NLS-1$
-  }
-  public void initActions() {
-    connectAction = new ConnectAction();
-    connectAction.setText(Messages.getString("bookmarkview.connect")); //$NON-NLS-1$
-    connectAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("refresh.gif")); //$NON-NLS-1$
-    connectAction.init(this);
-    disconnectAction = new DisconnectAction();
-    disconnectAction.setText(Messages.getString("bookmarkview.disconnect")); //$NON-NLS-1$
-    disconnectAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("stop.gif")); //$NON-NLS-1$
-    disconnectAction.init(this);
-    newBookmarkAction = new NewBookmarkAction();
-    newBookmarkAction.setText(Messages.getString("bookmarkview.newBookmark")); //$NON-NLS-1$
-    newBookmarkAction.setToolTipText(
-      Messages.getString("bookmarkview.newBookmark"));
-    newBookmarkAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("bookmarks.gif")); //$NON-NLS-1$
-    newBookmarkAction.init(this);
-    editBookmarkAction = new EditBookmarkAction();
-    editBookmarkAction.setText(Messages.getString("bookmarkview.editBookmark")); //$NON-NLS-1$
-    editBookmarkAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("edit.gif")); //$NON-NLS-1$
-    editBookmarkAction.init(this);
-    deleteBookmarkAction = new DeleteBookmarkAction();
-    deleteBookmarkAction.setText(Messages.getString("bookmarkview.deleteBookmark")); //$NON-NLS-1$
-    deleteBookmarkAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("delete.gif")); //$NON-NLS-1$
-    deleteBookmarkAction.init(this);
-    refreshBookmarkAction = new RefreshBookmarkAction();
-    refreshBookmarkAction.setText(Messages.getString("bookmarkview.refresh")); //$NON-NLS-1$
-    refreshBookmarkAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("refresh.gif")); //$NON-NLS-1$
-    refreshBookmarkAction.init(this);
-    viewTableAction = new ViewTableAction();
-    viewTableAction.setText(Messages.getString("bookmarkview.viewTable")); //$NON-NLS-1$
-    viewTableAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("table.gif")); //$NON-NLS-1$
-    viewTableAction.init(this);
-    viewTableDetailsAction = new ViewTableDetailsAction();
-    viewTableDetailsAction.setText(Messages.getString("bookmarkview.viewTableDetails")); //$NON-NLS-1$
-    viewTableDetailsAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("table.gif")); //$NON-NLS-1$
-    viewTableDetailsAction.init(this);
-    nextSequenceAction = new NextSequenceAction();
-    nextSequenceAction.setText(Messages.getString("bookmarkview.nextSequence"));
-    nextSequenceAction.setImageDescriptor(
-      PHPEclipseSQLPlugin.getImageDescriptor("table.gif"));
-    nextSequenceAction.init(this);
-  }
-  public void setFocus() {
-  }
-  private Action copyAction = new Action() {
-    public void run() {
-      Object sel = getCurrent();
-      if (sel instanceof BookmarkNode) {
-        clipboard = (BookmarkNode) sel;
-      }
-    }
-  };
-  private Action pasteAction = new Action() {
-    public void run() {
-      if (clipboard != null) {
-        BookmarkNode node = new BookmarkNode(clipboard);
-        node.setName("Copy of " + node.getName());
-        provider.addBookmark(node);
-        refresh();
-      }
-    }
-  };
-  public void addNewBookmark(BookmarkNode bookmark) {
-    provider.addBookmark(bookmark);
-    treeViewer.refresh();
-  }
-  public void setStatus(String text) {
-    status.setText(text);
-  }
 }
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/LogProxy.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/LogProxy.java
index a97de7f..cf5ff06 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/LogProxy.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/LogProxy.java
@@ -1,5 +1,8 @@
 package net.sourceforge.phpdt.sql.view;
 
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
 public class LogProxy implements LogConstants {
 	private static LogProxy instance = null;
 	private SQLLogView log = null;
@@ -17,4 +20,15 @@ public class LogProxy implements LogConstants {
 			log.addText(type, text);
 		}
 	}
+
+    public void addText(int type, String text, Exception e) {
+        addText(type, text);
+        StringWriter writer = new StringWriter();
+        e.printStackTrace(new PrintWriter(writer));
+        addText(type, writer.toString());
+    }
+
+    public void addText(int type, Exception e) {
+        addText(type, "Error occured: " + e, e); //$NON-NLS-1$
+    }
 }
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/Messages.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/Messages.java
index 601d48d..e69de29 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/Messages.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/Messages.java
@@ -1,22 +0,0 @@
-package net.sourceforge.phpdt.sql.view;
-
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-public class Messages {
-
-	private static final String BUNDLE_NAME = "net.sourceforge.phpdt.sql.PHPEclipseSQLResources"; //$NON-NLS-1$
-
-	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
-
-	private Messages() {
-	}
-
-	public static String getString(String key) {
-		try {
-			return RESOURCE_BUNDLE.getString(key);
-		} catch (MissingResourceException e) {
-			return '!' + key + '!';
-		}
-	}
-}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/PHPSourceConsole.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/PHPSourceConsole.java
index 0578019..e4035fb 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/PHPSourceConsole.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/PHPSourceConsole.java
@@ -8,11 +8,9 @@ which accompanies this distribution, and is available at
 http://www.eclipse.org/legal/cpl-v10.html
 
 Contributors:
-    IBM Corporation - Initial implementation
-    Klaus Hartlage - www.eclipseproject.de
+	IBM Corporation - Initial implementation
+	Klaus Hartlage - www.eclipseproject.de
 **********************************************************************/
-import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
-
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jface.action.Action;
@@ -31,6 +29,9 @@ import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.part.ViewPart;
 
+import net.sourceforge.phpdt.sql.Messages;
+import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
+
 /**
  * The PHPSourceConsole is used to display the output from the PHP SQL wizards
  * @see ViewPart
@@ -38,9 +39,9 @@ import org.eclipse.ui.part.ViewPart;
 public class PHPSourceConsole extends ViewPart {
 
   public static final String CONSOLE_ID =
-    "net.sourceforge.phpdt.sql.view.phpsourceconsoleview";
+	"net.sourceforge.phpdt.sql.view.phpsourceconsoleview";
 
-  private TextViewer viewer = null;
+  TextViewer viewer = null;
   private Document document = null;
 
   /**
@@ -54,34 +55,34 @@ public class PHPSourceConsole extends ViewPart {
    * @see ViewPart#createPartControl
    */
   public void createPartControl(Composite parent) {
-    viewer = new TextViewer(parent, SWT.WRAP | SWT.V_SCROLL | SWT.H_SCROLL);
-    GridData viewerData = new GridData(GridData.FILL_BOTH);
-    viewer.getControl().setLayoutData(viewerData);
-    viewer.setEditable(false);
-
-    StyledText widget = viewer.getTextWidget();
-    widget.setFont(
-      JFaceResources.getFontRegistry().get(JFaceResources.TEXT_FONT));
-    Action cutAction = new Action() {
-      public void run() {
-        viewer.getTextWidget().cut();
-      }
-    };
-    Action copyAction = new Action() {
-      public void run() {
-        viewer.getTextWidget().copy();
-      }
-    };
-    Action pasteAction = new Action() {
-      public void run() {
-        viewer.getTextWidget().paste();
-      }
-    };
-
-    IActionBars bars = this.getViewSite().getActionBars();
-    bars.setGlobalActionHandler(IWorkbenchActionConstants.CUT, cutAction);
-    bars.setGlobalActionHandler(IWorkbenchActionConstants.COPY, copyAction);
-    bars.setGlobalActionHandler(IWorkbenchActionConstants.PASTE, pasteAction);
+	viewer = new TextViewer(parent, SWT.WRAP | SWT.V_SCROLL | SWT.H_SCROLL);
+	GridData viewerData = new GridData(GridData.FILL_BOTH);
+	viewer.getControl().setLayoutData(viewerData);
+	viewer.setEditable(false);
+
+	StyledText widget = viewer.getTextWidget();
+	widget.setFont(
+	  JFaceResources.getFontRegistry().get(JFaceResources.TEXT_FONT));
+	Action cutAction = new Action() {
+	  public void run() {
+		viewer.getTextWidget().cut();
+	  }
+	};
+	Action copyAction = new Action() {
+	  public void run() {
+		viewer.getTextWidget().copy();
+	  }
+	};
+	Action pasteAction = new Action() {
+	  public void run() {
+		viewer.getTextWidget().paste();
+	  }
+	};
+
+	IActionBars bars = this.getViewSite().getActionBars();
+	bars.setGlobalActionHandler(IWorkbenchActionConstants.CUT, cutAction);
+	bars.setGlobalActionHandler(IWorkbenchActionConstants.COPY, copyAction);
+	bars.setGlobalActionHandler(IWorkbenchActionConstants.PASTE, pasteAction);
   }
 
   /**
@@ -95,62 +96,62 @@ public class PHPSourceConsole extends ViewPart {
    * Set the text for the viewer
    */
   private void setOutputText(String text) {
-    document = new Document(text);
-    viewer.setDocument(document);
+	document = new Document(text);
+	viewer.setDocument(document);
   }
 
   private void appendOutputText(String text) {
-    try {
-      if (document == null) {
-        document = new Document(text);
-        viewer.setDocument(document);
-      }
-      document.replace(document.getLength(), 0, text);
-    } catch (BadLocationException e) {
-    }
-    //  viewer.setDocument(document);
+	try {
+	  if (document == null) {
+		document = new Document(text);
+		viewer.setDocument(document);
+	  }
+	  document.replace(document.getLength(), 0, text);
+	} catch (BadLocationException e) {
+	}
+	//  viewer.setDocument(document);
   }
 
   public static PHPSourceConsole getInstance() {
-    IWorkbenchPage page =
-      PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
-    PHPSourceConsole console = (PHPSourceConsole) page.findView(PHPSourceConsole.CONSOLE_ID);
-    // if (PHPeclipsePlugin.SHOW_OUTPUT_IN_CONSOLE.getDefault().getPreferenceStore().getBoolean(PHPeclipsePlugin.SHOW_OUTPUT_IN_CONSOLE) == true) {
-
-    try {
-      page.showView(PHPSourceConsole.CONSOLE_ID);
-      if (console == null) { 
-        console = (PHPSourceConsole) page.findView(PHPSourceConsole.CONSOLE_ID);
-      }
-    } catch (PartInitException e) {
-      PHPEclipseSQLPlugin.getDefault().getLog().log(
-        new Status(
-          IStatus.ERROR,
-          PHPEclipseSQLPlugin.PLUGIN_ID,
-          0,
-          Messages.getString("sqlconsole.viewopeningproblem"),
-          e));
-    }
-
-    //   }
-    return console;
+	IWorkbenchPage page =
+	  PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+	PHPSourceConsole console = (PHPSourceConsole) page.findView(PHPSourceConsole.CONSOLE_ID);
+	// if (PHPeclipsePlugin.SHOW_OUTPUT_IN_CONSOLE.getDefault().getPreferenceStore().getBoolean(PHPeclipsePlugin.SHOW_OUTPUT_IN_CONSOLE) == true) {
+
+	try {
+	  page.showView(PHPSourceConsole.CONSOLE_ID);
+	  if (console == null) { 
+		console = (PHPSourceConsole) page.findView(PHPSourceConsole.CONSOLE_ID);
+	  }
+	} catch (PartInitException e) {
+	  PHPEclipseSQLPlugin.getDefault().getLog().log(
+		new Status(
+		  IStatus.ERROR,
+		  PHPEclipseSQLPlugin.PLUGIN_ID,
+		  0,
+		  Messages.getString("sqlconsole.viewopeningproblem"),
+		  e));
+	}
+
+	//   }
+	return console;
   }
 
   /**
    * Prints out the string represented by the string buffer
    */
   public synchronized void print(String output) {
-    appendOutputText(output);
+	appendOutputText(output);
   }
 
   /**
    * Prints out the string represented by the string buffer
    */
   public synchronized void println(String output) {
-    appendOutputText(output+'\n');
+	appendOutputText(output+'\n');
   }
 
   public synchronized void clear() {
-    setOutputText("");
+	setOutputText("");
   }
 }
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/SQLLogView.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/SQLLogView.java
index 66552d9..a5f57cf 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/SQLLogView.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/SQLLogView.java
@@ -1,7 +1,5 @@
 package net.sourceforge.phpdt.sql.view;
 
-import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
-
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IToolBarManager;
 import org.eclipse.swt.SWT;
@@ -16,6 +14,9 @@ import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.IWorkbenchActionConstants;
 import org.eclipse.ui.part.ViewPart;
 
+import net.sourceforge.phpdt.sql.Messages;
+import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
+
 public class SQLLogView extends ViewPart implements LogConstants {
 	private Color QUERY_COLOR;
 	private Color WARNING_COLOR;
@@ -24,7 +25,7 @@ public class SQLLogView extends ViewPart implements LogConstants {
 	private Color RESULTS_COLOR;
 	private StyledText widget;
 	private static SQLLogView instance = null;
-	private static final String newLine = "\n";
+	private static final String newLine = "\n"; //$NON-NLS-1$
 	public static SQLLogView getInstance() {
 		return instance;
 	}
@@ -42,8 +43,8 @@ public class SQLLogView extends ViewPart implements LogConstants {
 		bars.setGlobalActionHandler(IWorkbenchActionConstants.SELECT_ALL, selectAllAction);
 
 		IToolBarManager toolBar = getViewSite().getActionBars().getToolBarManager();
-		clearAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("clear.gif"));
-		clearAction.setToolTipText("Clear Log");
+		clearAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("clear.gif")); //$NON-NLS-1$
+		clearAction.setToolTipText(Messages.getString("SQLLogView.ClearLog")); //$NON-NLS-1$
 		toolBar.add(clearAction);
 
  		widget.setEditable(false);
@@ -102,7 +103,7 @@ public class SQLLogView extends ViewPart implements LogConstants {
 	};
 	private Action clearAction = new Action() {
 		public void run() {
-			widget.setText("");
+			widget.setText(""); //$NON-NLS-1$
 		}
 	};
 }
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/SQLQueryView.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/SQLQueryView.java
index 24ae30d..81a97d7 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/SQLQueryView.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/SQLQueryView.java
@@ -4,15 +4,6 @@ import java.util.LinkedList;
 import java.util.NoSuchElementException;
 import java.util.Vector;
 
-import net.sourceforge.phpdt.sql.IConstants;
-import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
-import net.sourceforge.phpdt.sql.actions.ExecuteAction;
-import net.sourceforge.phpdt.sql.actions.ExportQueryAction;
-import net.sourceforge.phpdt.sql.actions.ImportQueryAction;
-import net.sourceforge.phpdt.sql.parser.SQLLexx;
-import net.sourceforge.phpdt.sql.parser.Token;
-import net.sourceforge.phpdt.sql.sql.MultiSQLServer;
-
 import org.eclipse.jface.action.Action;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.ExtendedModifyEvent;
@@ -35,10 +26,23 @@ import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.IWorkbenchActionConstants;
 import org.eclipse.ui.part.ViewPart;
 
+import net.sourceforge.phpdt.sql.IConstants;
+import net.sourceforge.phpdt.sql.Messages;
+import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
+import net.sourceforge.phpdt.sql.actions.ExecuteAction;
+import net.sourceforge.phpdt.sql.actions.ExportQueryAction;
+import net.sourceforge.phpdt.sql.actions.GeneratePHPAction;
+import net.sourceforge.phpdt.sql.actions.ImportQueryAction;
+import net.sourceforge.phpdt.sql.sql.MultiSQLServer;
+import net.sourceforge.phpdt.sql.sql.parser.SQLLexx;
+import net.sourceforge.phpdt.sql.sql.parser.Token;
+import net.sourceforge.phpdt.sql.view.bookmark.BookmarkNode;
+
 public class SQLQueryView extends ViewPart implements IConstants {
-	private ExecuteAction executeAction;
-	private ImportQueryAction importQueryAction;
-	private ExportQueryAction exportQueryAction;
+	ExecuteAction executeAction;
+	ImportQueryAction importQueryAction;
+	ExportQueryAction exportQueryAction;
+	GeneratePHPAction generatePHPAction;
 	private Clipboard clip;
 	private Label statusImage;
 	private Label status;
@@ -109,13 +113,23 @@ public class SQLQueryView extends ViewPart implements IConstants {
 			}
 		});
 		item = new ToolItem(toolbar, SWT.PUSH);
+		item.setImage(PHPEclipseSQLPlugin.getImage("php.gif")); //$NON-NLS-1$
+		item.setToolTipText(Messages.getString("sqlqueryview.generatePHP")); //$NON-NLS-1$
+		item.addSelectionListener(new SelectionListener() {
+			public void widgetDefaultSelected(SelectionEvent e) {
+			}
+			public void widgetSelected(SelectionEvent e) {
+				generatePHPAction.run();
+			}
+		});		
+		item = new ToolItem(toolbar, SWT.PUSH);
 		item.setImage(PHPEclipseSQLPlugin.getImage("clear.gif")); //$NON-NLS-1$
 		item.setToolTipText(Messages.getString("sqlqueryview.clear")); //$NON-NLS-1$
 		item.addSelectionListener(new SelectionListener() {
 			public void widgetDefaultSelected(SelectionEvent e) {
 			}
 			public void widgetSelected(SelectionEvent e) {
-				setQuery("");
+				setQuery(""); //$NON-NLS-1$
 			}
 		});
 
@@ -124,12 +138,13 @@ public class SQLQueryView extends ViewPart implements IConstants {
 		item = new ToolItem(toolbar, SWT.PUSH);
 		final ToolItem commit = item;
 		item.setImage(PHPEclipseSQLPlugin.getImage("commit.gif")); //$NON-NLS-1$
-		item.setToolTipText("Commit");
+		item.setToolTipText(Messages.getString("SQLQueryView.Commit")); //$NON-NLS-1$
 		item.addSelectionListener(new SelectionListener() {
 			public void widgetDefaultSelected(SelectionEvent e) {
 			}
 			public void widgetSelected(SelectionEvent e) {
-				MultiSQLServer.getInstance().commit();
+				BookmarkNode node = BookmarkView.getInstance().getCurrentBookmark();
+				MultiSQLServer.getInstance().commit(node.getConnection());
 			}
 		});
 		item.setEnabled(false);
@@ -137,12 +152,13 @@ public class SQLQueryView extends ViewPart implements IConstants {
 		item = new ToolItem(toolbar, SWT.PUSH);
 		final ToolItem rollback = item;
 		item.setImage(PHPEclipseSQLPlugin.getImage("rollback.gif")); //$NON-NLS-1$
-		item.setToolTipText("RollBack");
+		item.setToolTipText(Messages.getString("SQLQueryView.RollBack")); //$NON-NLS-1$
 		item.addSelectionListener(new SelectionListener() {
 			public void widgetDefaultSelected(SelectionEvent e) {
 			}
 			public void widgetSelected(SelectionEvent e) {
-				MultiSQLServer.getInstance().rollback();
+				BookmarkNode node = BookmarkView.getInstance().getCurrentBookmark();
+				MultiSQLServer.getInstance().rollback(node.getConnection());
 			}
 		});
 		item.setEnabled(false);
@@ -150,12 +166,14 @@ public class SQLQueryView extends ViewPart implements IConstants {
 		item = new ToolItem(toolbar, SWT.CHECK);
 		final ToolItem autocommit = item;
 		item.setImage(PHPEclipseSQLPlugin.getImage("autocommit.gif")); //$NON-NLS-1$
-		item.setToolTipText("AutoCommit");
+		item.setToolTipText(Messages.getString("SQLQueryView.AutoCommit")); //$NON-NLS-1$
 		item.addSelectionListener(new SelectionListener() {
 			public void widgetDefaultSelected(SelectionEvent e) {
 			}
 			public void widgetSelected(SelectionEvent e) {
-				MultiSQLServer.getInstance().setAutoCommit(autocommit.getSelection());
+				BookmarkNode node = BookmarkView.getInstance().getCurrentBookmark();
+				
+				MultiSQLServer.getInstance().setAutoCommit(node.getConnection(), autocommit.getSelection());
 				if (autocommit.getSelection()) {
 					commit.setEnabled(false);
 					rollback.setEnabled(false);
@@ -207,8 +225,8 @@ public class SQLQueryView extends ViewPart implements IConstants {
 
 		progress = new ProgressBar(bottomStatus, SWT.HORIZONTAL);
 
-		status.setText(Messages.getString("sqlqueryview.done"));
-		statusImage.setImage(PHPEclipseSQLPlugin.getImage("success.gif"));
+		status.setText(Messages.getString("sqlqueryview.done")); //$NON-NLS-1$
+		statusImage.setImage(PHPEclipseSQLPlugin.getImage("success.gif")); //$NON-NLS-1$
 		progress.setMinimum(0);
 	}
 
@@ -224,6 +242,8 @@ public class SQLQueryView extends ViewPart implements IConstants {
 		importQueryAction.init(this);
 		exportQueryAction = new ExportQueryAction();
 		exportQueryAction.init(this);
+		generatePHPAction = new GeneratePHPAction();
+		generatePHPAction.init(this);
 	}
 
 	public void setStatus(String text) {
@@ -244,10 +264,10 @@ public class SQLQueryView extends ViewPart implements IConstants {
 		widget.setText(text);
 	}
 	
-	private String[] keywords = {"SELECT", "DROP", "FROM", 
-		"INSERT", "INTO", "VALUES",
-		"CREATE", "TABLE", "VIEW", "SEQUENCE",
-		"UPDATE", "SET", "WHERE"};
+	private String[] keywords = {"SELECT", "DROP", "FROM",  //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		"INSERT", "INTO", "VALUES", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		"CREATE", "TABLE", "VIEW", "SEQUENCE", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+		"UPDATE", "SET", "WHERE"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 
 	SyntaxHighlighter textUpdater = new SyntaxHighlighter();
 	
@@ -315,7 +335,7 @@ public class SQLQueryView extends ViewPart implements IConstants {
 						if (upper || lower || both) {
 							min = Math.min(start, min);
 							max = Math.max(max, start + length);
-							if (t.getType() == t.IDENTIFIER) {
+							if (t.getType() == Token.IDENTIFIER) {
 								boolean keyword = false;
 								for (int index = 0; index < keywords.length; index++) {
 									if (value.equals(keywords[index])) {
@@ -329,13 +349,13 @@ public class SQLQueryView extends ViewPart implements IConstants {
 									styleRange.foreground = DEFAULT;
 								}
 								styles.addElement(styleRange);
-							} else if (t.getType() == t.COMMENT) {
+							} else if (t.getType() == Token.COMMENT) {
 								styleRange.foreground = COMMENT;
 								styles.addElement(styleRange);
-							} else if (t.getType() == t.LITERAL) {
+							} else if (t.getType() == Token.LITERAL) {
 								styleRange.foreground = STRING_LITERAL;
 								styles.addElement(styleRange);
-							} else if (t.getType() == t.NUMERIC) {
+							} else if (t.getType() == Token.NUMERIC) {
 								styleRange.foreground = NUMERIC;
 								styles.addElement(styleRange);
 							} else {
@@ -369,10 +389,8 @@ public class SQLQueryView extends ViewPart implements IConstants {
 						widget.setStyleRange(styles[i]);
 					}
 				} catch (Throwable t) {
-          if (DEBUG) {
-					System.out.println("Error with styles: " + t.getClass().toString());
+					System.out.println("Error with styles: " + t.getClass().toString()); //$NON-NLS-1$
 					// ignore any errors
-          }
 				}
 			}
 		});
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/SubsetLabelProvider.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/SubsetLabelProvider.java
new file mode 100644
index 0000000..10b0fa2
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/SubsetLabelProvider.java
@@ -0,0 +1,104 @@
+package net.sourceforge.phpdt.sql.view;
+
+import java.net.URL;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.swt.graphics.Image;
+
+import net.sourceforge.phpdt.sql.Messages;
+import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
+import net.sourceforge.phpdt.sql.view.bookmark.ColumnMetaData;
+import net.sourceforge.phpdt.sql.view.bookmark.Root;
+import net.sourceforge.phpdt.sql.view.bookmark.SequenceNode;
+import net.sourceforge.phpdt.sql.view.bookmark.SubsetNode;
+import net.sourceforge.phpdt.sql.view.bookmark.TableNode;
+import net.sourceforge.phpdt.sql.view.bookmark.ViewNode;
+
+/**
+ * @author root
+ *
+ * Implements the ILabelProvider for the Bookmarks.
+ */
+public class SubsetLabelProvider implements ILabelProvider {
+	/**
+	 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(Object)
+	 */
+	public Image getImage(Object element) {
+	 ImageDescriptor descriptor = null;
+	   if (element instanceof SubsetNode) {
+	   	try {
+           URL installURL = PHPEclipseSQLPlugin.getDefault().getDescriptor().getInstallURL();
+           URL url = new URL(installURL, "icons/subset.gif"); //$NON-NLS-1$
+      	   descriptor = ImageDescriptor.createFromURL(url);
+	   	} catch (Exception e) {
+	   		e.printStackTrace();
+	   	}
+	   } else if (element instanceof ColumnMetaData){
+		try {
+			ColumnMetaData columnMetaData = (ColumnMetaData) element;
+			return columnMetaData.getImage();
+		 } catch (Exception e) {
+			 e.printStackTrace();
+		 }
+	   } else {
+	   	return null;
+	}
+	   return descriptor.createImage();
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ILabelProvider#getText(Object)
+	 */
+	public String getText(Object element) {
+		if (element instanceof SubsetNode) {
+			SubsetNode subset = (SubsetNode) element;
+			return subset.getName();
+		} else if (element.equals(Root.ROOT)) {
+			return "ROOT"; //$NON-NLS-1$
+		} else if (element instanceof TableNode) {
+			TableNode node = (TableNode) element;
+			if (node.isSizeVisible()) {
+				return Messages.getString("BookmarkLabelProvider.TablePrefix") + element.toString() + " (" + node.getSize() + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			} else {
+				return Messages.getString("BookmarkLabelProvider.TablePrefix") + element.toString(); //$NON-NLS-1$
+			}
+		} else if (element instanceof ViewNode) {
+			ViewNode node = (ViewNode) element;
+			if (node.isSizeVisible()) {
+				return Messages.getString("BookmarkLabelProvider.ViewPrefix") + element.toString() + " (" + node.getSize() + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			} else {
+				return Messages.getString("BookmarkLabelProvider.ViewPrefix") + element.toString(); //$NON-NLS-1$
+			}
+		} else if (element instanceof SequenceNode) {
+			return Messages.getString("BookmarkLabelProvider.SequencePrefix") + element.toString(); //$NON-NLS-1$
+		}
+		return element.toString();
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(ILabelProviderListener)
+	 */
+	public void addListener(ILabelProviderListener listener) {
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+	 */
+	public void dispose() {
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(Object, String)
+	 */
+	public boolean isLabelProperty(Object element, String property) {
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(ILabelProviderListener)
+	 */
+	public void removeListener(ILabelProviderListener listener) {
+     }
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/SubsetView.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/SubsetView.java
new file mode 100644
index 0000000..0563a81
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/SubsetView.java
@@ -0,0 +1,344 @@
+package net.sourceforge.phpdt.sql.view;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.Vector;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.apache.crimson.tree.XmlDocument;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.TextTransfer;
+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.Menu;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.part.ViewPart;
+import org.w3c.dom.Element;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+import net.sourceforge.phpdt.sql.Messages;
+import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
+import net.sourceforge.phpdt.sql.actions.DeleteColumnAction;
+import net.sourceforge.phpdt.sql.actions.DeleteObjectAction;
+import net.sourceforge.phpdt.sql.actions.DeleteSubsetAction;
+import net.sourceforge.phpdt.sql.actions.ExportXMLAction;
+import net.sourceforge.phpdt.sql.actions.NewSubsetAction;
+import net.sourceforge.phpdt.sql.actions.ViewTableAction;
+import net.sourceforge.phpdt.sql.view.bookmark.ColumnMetaData;
+import net.sourceforge.phpdt.sql.view.bookmark.ObjectNode;
+import net.sourceforge.phpdt.sql.view.bookmark.Root;
+import net.sourceforge.phpdt.sql.view.bookmark.SubsetContentProvider;
+import net.sourceforge.phpdt.sql.view.bookmark.SubsetNode;
+import net.sourceforge.phpdt.sql.view.bookmark.TreeNode;
+
+/**
+ * @author panic
+ *
+ * View for subsets
+ * */
+public class SubsetView extends ViewPart {
+	
+	private SubsetContentProvider provider = SubsetContentProvider.getInstance();
+	private NewSubsetAction newSubsetAction;
+	private DeleteSubsetAction deleteSubsetAction;
+	private DeleteObjectAction deleteObjectAction;
+	private DeleteColumnAction deleteColumnAction;
+	private ViewTableAction viewTableAction;
+	private ExportXMLAction exportXMLAction;
+	private static SubsetView instance = null;
+	private TreeViewer treeViewer;
+	private Label status;
+	private Clipboard sysClip;
+	public synchronized static SubsetView getInstance() {
+		return instance;
+	}
+	/**
+	 * Returns the current selected object in the tree. If it's a multiple selection, return the first.
+	 * @return
+	 */
+	public Object getCurrent() {
+		if (treeViewer == null) return null;
+		return ((StructuredSelection) treeViewer.getSelection())
+					.getFirstElement();
+	}
+	/**
+	 * Returns the current selected objects in the tree, in the form of a StructuredSelection.
+	 * @return
+	 */
+	public StructuredSelection getSelection() {
+		if (treeViewer == null) return null;
+		return ((StructuredSelection) treeViewer.getSelection());
+	}
+	
+	/** 
+	 * Navigates the tree to get the current subset (root) of the selected element.
+	 * If it's a multiple selection, it takes the first one.
+	 * @return
+	 */
+	public SubsetNode getCurrentSubset() {
+		TreeNode current = (TreeNode) getCurrent();
+		
+		return getRoot(current);
+	}
+
+	/**
+	 * Navigates a given TreeNode till finds a SubsetNode
+	 * @param node
+	 * @return
+	 */
+	private static SubsetNode getRoot(TreeNode node){
+		while (!( node instanceof SubsetNode))
+		{
+			node = (TreeNode) node.getParent();
+		}
+		return (SubsetNode) node;
+
+	}
+
+ 
+	/**
+	 * Deletes the current node (first selected) in the tree
+	 */
+	public void deleteCurrent() {
+		provider.removeSubset(getCurrentSubset());
+		treeViewer.refresh();
+	}
+	
+	public void refreshSubsetData(){
+		//if (treeViewer == null) return;
+		//SubsetContentProvider provider = (SubsetContentProvider) treeViewer.getContentProvider();
+		//Object[] objects = provider.getElements(Root.ROOT);
+		//for (int i = 0; i < objects.length; i++) {
+			//SubsetNode current = (SubsetNode) objects[i];
+			
+		//}
+	}
+	
+	public void expandCurrent(SubsetNode node) {
+		treeViewer.setExpandedState(node, true);
+		treeViewer.refresh(node, false);
+	}
+	public void refresh() {
+		treeViewer.refresh();
+	}
+	public void disconnect() {
+	}
+	
+	public void createPartControl(org.eclipse.swt.widgets.Composite parent) {
+		instance = this;
+		initActions();
+		sysClip = new Clipboard(getSite().getShell().getDisplay());
+		Composite main = new Composite(parent, SWT.NONE);
+		GridLayout layout = new GridLayout(1, false);
+		layout.horizontalSpacing = 0;
+		layout.verticalSpacing = 0;
+		main.setLayout(layout);
+
+	
+		treeViewer = new TreeViewer(main);
+		treeViewer.setContentProvider(provider);
+		treeViewer.setLabelProvider(new SubsetLabelProvider());
+		treeViewer.setInput(Root.ROOT);
+		MenuManager manager = new MenuManager();
+		manager.setRemoveAllWhenShown(true);
+		Menu fTextContextMenu =
+			manager.createContextMenu(treeViewer.getControl());
+		treeViewer.getControl().setMenu(fTextContextMenu);
+		treeViewer.addDoubleClickListener(new IDoubleClickListener() {
+			public void doubleClick(DoubleClickEvent event) {
+				Object sel = getCurrent();
+				if (sel instanceof ObjectNode) {
+					viewTableAction.run();
+				}
+			}
+		});
+
+		manager.addMenuListener(new IMenuListener() {
+			public void menuAboutToShow(IMenuManager mgr) {
+				Object sel = getCurrent();
+				if (sel instanceof SubsetNode) {
+					mgr.add(deleteSubsetAction);
+					deleteSubsetAction.setText(Messages.getString("SubsetView.Delete")); //$NON-NLS-1$
+					deleteSubsetAction.setImageDescriptor(
+						PHPEclipseSQLPlugin.getImageDescriptor("delete.gif")); //$NON-NLS-1$
+					mgr.add(pasteAction);
+					pasteAction.setText(Messages.getString("SubsetView.Paste")); //$NON-NLS-1$
+					pasteAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("paste.gif")); //$NON-NLS-1$
+					mgr.add(exportXMLAction);
+					exportXMLAction.setText(Messages.getString("bookmarkview.exportXML")); //$NON-NLS-1$
+					exportXMLAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("xml.gif")); //$NON-NLS-1$
+				} else 	if (sel instanceof ObjectNode) {
+					mgr.add(deleteObjectAction);
+					deleteObjectAction.setText(Messages.getString("SubsetView.Delete")); //$NON-NLS-1$
+					deleteObjectAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("delete.gif")); //$NON-NLS-1$
+					mgr.add(viewTableAction);
+					viewTableAction.setText(Messages.getString("bookmarkview.viewTable")); //$NON-NLS-1$
+					viewTableAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("table.gif")); //$NON-NLS-1$
+					mgr.add(exportXMLAction);
+					exportXMLAction.setText(Messages.getString("bookmarkview.exportXML")); //$NON-NLS-1$
+					exportXMLAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("xml.gif")); //$NON-NLS-1$
+
+				} else if (sel instanceof ColumnMetaData){
+					mgr.add(deleteColumnAction);
+					deleteColumnAction.setText(Messages.getString("SubsetView.Delete")); //$NON-NLS-1$
+					deleteColumnAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("delete.gif")); //$NON-NLS-1$				
+				} else {
+					mgr.add(newSubsetAction);
+				}
+			}
+		});
+
+		GridData gridData = new GridData();
+		gridData.horizontalAlignment = GridData.FILL;
+		gridData.verticalAlignment = GridData.FILL;
+		gridData.grabExcessHorizontalSpace = true;
+		gridData.grabExcessVerticalSpace = true;
+		treeViewer.getControl().setLayoutData(gridData);
+		status = new Label(main, SWT.NONE);
+		gridData = new GridData();
+		gridData.horizontalAlignment = GridData.FILL;
+		gridData.grabExcessHorizontalSpace = true;
+		status.setLayoutData(gridData);
+		
+		IActionBars bars = getViewSite().getActionBars();
+		bars.setGlobalActionHandler(IWorkbenchActionConstants.PASTE, pasteAction);
+		bars.setGlobalActionHandler(IWorkbenchActionConstants.DELETE, deleteSubsetAction);
+
+		IToolBarManager toolBar = getViewSite().getActionBars().getToolBarManager();
+		toolBar.add(newSubsetAction);
+		
+		status.setText(Messages.getString("bookmarkview.done")); //$NON-NLS-1$
+	}
+	public void initActions() {
+		newSubsetAction = new NewSubsetAction();
+		newSubsetAction.setText("New Subset"); //$NON-NLS-1$
+		newSubsetAction.setToolTipText(Messages.getString("SubsetView.CreatesANewEmptySubset")); //$NON-NLS-1$
+		newSubsetAction.setImageDescriptor(
+			PHPEclipseSQLPlugin.getImageDescriptor("subset.gif")); //$NON-NLS-1$
+		newSubsetAction.init(this);
+		deleteColumnAction = new DeleteColumnAction();
+		deleteColumnAction.setText("Delete Column"); //$NON-NLS-1$
+		deleteColumnAction.setToolTipText(Messages.getString("SubsetView.DeletesTheSelectedColumns")); //$NON-NLS-1$
+		deleteColumnAction.setImageDescriptor(
+			PHPEclipseSQLPlugin.getImageDescriptor("delete.gif")); //$NON-NLS-1$
+		deleteColumnAction.init(this);
+		deleteObjectAction = new DeleteObjectAction();
+		deleteObjectAction.setText("Delete Object"); //$NON-NLS-1$
+		deleteObjectAction.setToolTipText(Messages.getString("SubsetView.DeletesTheSelectedObject")); //$NON-NLS-1$
+		deleteObjectAction.setImageDescriptor(
+			PHPEclipseSQLPlugin.getImageDescriptor("delete.gif")); //$NON-NLS-1$
+		deleteObjectAction.init(this);
+		deleteSubsetAction = new DeleteSubsetAction();
+		deleteSubsetAction.setText("Delete Subset"); //$NON-NLS-1$
+		deleteSubsetAction.setToolTipText(Messages.getString("SubsetView.DeletesTheSelectedSubset")); //$NON-NLS-1$
+		deleteSubsetAction.setImageDescriptor(
+			PHPEclipseSQLPlugin.getImageDescriptor("delete.gif")); //$NON-NLS-1$
+		deleteSubsetAction.init(this);
+		viewTableAction = new ViewTableAction();
+		viewTableAction.setText(Messages.getString("bookmarkview.viewTable")); //$NON-NLS-1$
+		viewTableAction.setImageDescriptor(
+			PHPEclipseSQLPlugin.getImageDescriptor("table.gif")); //$NON-NLS-1$
+		viewTableAction.init(this);
+		exportXMLAction = new ExportXMLAction();
+		exportXMLAction.setText(Messages.getString("bookmarkview.exportXML")); //$NON-NLS-1$
+		exportXMLAction.setImageDescriptor(
+			PHPEclipseSQLPlugin.getImageDescriptor("table.gif")); //$NON-NLS-1$
+		exportXMLAction.init(this);
+		
+	}
+	public void setFocus() {
+	}
+	
+	private Action pasteAction = new Action() {
+		public void run() {
+			Object sel = getCurrent();
+			if (sel == null) return;
+			if (!(sel instanceof SubsetNode)) return;
+			
+			SubsetNode subset = (SubsetNode) sel;
+			
+			TextTransfer transfer = TextTransfer.getInstance();
+			String xmlMetaData = (String) sysClip.getContents(transfer);
+			StringReader text = new StringReader(xmlMetaData);
+			XmlDocument doc = new XmlDocument();
+			InputSource source = new InputSource(text);
+			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ 			DocumentBuilder parser;
+			try {
+				parser = factory.newDocumentBuilder();
+				doc = (XmlDocument) parser.parse(source);
+ 			} catch (ParserConfigurationException e) {
+				e.printStackTrace();
+				return;
+			} catch (SAXException e) {
+				e.printStackTrace();
+				return;
+			} catch (IOException e) {
+				e.printStackTrace();
+				return;
+			}
+ 			Element root = doc.getDocumentElement();
+ 			subset.importXML(root, false);
+			treeViewer.refresh();
+			provider.setHasChanged(true);
+
+		}
+	};
+	
+	public void addNewSubset(SubsetNode subset) {
+		provider.addSubset(subset);
+		treeViewer.refresh();
+	}
+	public void setStatus(String text) {
+		status.setText(text);
+	}
+	public void dispose(){
+		sysClip.dispose();
+		super.dispose();
+	}
+
+	/**
+	 * Returs a Vector with all the elements of the treeViewer
+	 * @return
+	 */
+	public Vector getElements(){
+		Vector result = new Vector();
+		if (treeViewer == null) return result;
+		SubsetContentProvider provider = (SubsetContentProvider) treeViewer.getContentProvider();
+		Object[] objects = provider.getElements(Root.ROOT);
+		for (int i = 0; i < objects.length; i++) {
+			SubsetNode current = (SubsetNode) objects[i];
+			result.add(current);
+		}
+		return result;
+	}
+	
+	public void deleteColumn (ColumnMetaData column){
+		provider.deleteColumn(column);
+		treeViewer.refresh();
+	}
+
+	public void deleteObject (ObjectNode object){
+		provider.deleteObject(object);
+		treeViewer.refresh();
+	}
+
+
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/TableView.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/TableView.java
index 6f0123c..d0048a5 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/TableView.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/TableView.java
@@ -1,21 +1,5 @@
 package net.sourceforge.phpdt.sql.view;
 
-import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
-import net.sourceforge.phpdt.sql.actions.CloseTableAction;
-import net.sourceforge.phpdt.sql.actions.RefreshTableAction;
-import net.sourceforge.phpdt.sql.sql.SQLResults;
-import net.sourceforge.phpdt.sql.sql.TableRow;
-import net.sourceforge.phpdt.sql.view.tableview.TableAdapter;
-import net.sourceforge.phpdt.sql.wizards.DeleteRowPage;
-import net.sourceforge.phpdt.sql.wizards.InsertRowPage;
-import net.sourceforge.phpdt.sql.wizards.PHPDeleteRowPage;
-import net.sourceforge.phpdt.sql.wizards.PHPInsertRowPage;
-import net.sourceforge.phpdt.sql.wizards.PHPSelectRowPage;
-import net.sourceforge.phpdt.sql.wizards.PHPUpdateRowPage;
-import net.sourceforge.phpdt.sql.wizards.SQLRowWizard;
-import net.sourceforge.phpdt.sql.wizards.SortFilterPage;
-import net.sourceforge.phpdt.sql.wizards.UpdateRowPage;
-
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IMenuListener;
 import org.eclipse.jface.action.IMenuManager;
@@ -44,436 +28,403 @@ import org.eclipse.ui.ISelectionListener;
 import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.part.ViewPart;
 
-public class TableView extends ViewPart implements ISelectionListener {
-  public static String TABLEVIEW_ID =
-    "net.sourceforge.phpdt.sql.view.tableview";
-  private Clipboard clip;
-  private RefreshTableAction refreshTableAction;
-  private CloseTableAction closeTableAction;
-  private static TableView instance = null;
-  private TabFolder tabs;
-  private Composite parent;
-  public TableView() {
-    super();
-  }
-  public void setFocus() {
-  }
-  public static TableView getInstance() {
-    return instance;
-  }
-  public void closeCurrent() {
-    TabItem item = tabs.getItem(tabs.getSelectionIndex());
-    item.dispose();
-  }
-  public void refreshCurrent() {
-    TabItem item = tabs.getItem(tabs.getSelectionIndex());
-    TableAdapter adapter = (TableAdapter) item.getData();
-    String table = adapter.getTable();
-    if (table == null) {
-      loadTable(item, null, null, true, true);
-    } else {
-      loadTable(item, null, null, true, true);
-    }
-  }
-  public void loadQuery(SQLResults results) {
-    loadTable(null, null, results, true, false);
-  }
-  public void loadTable(String table) {
-    loadTable(null, table, null, false, true);
-  }
-  public void loadTable(
-    TabItem tabItem,
-    String entity,
-    SQLResults results,
-    boolean query,
-    boolean reload) {
-    TableAdapter adapter;
-    if (tabItem == null) {
-      tabItem = new TabItem(tabs, SWT.NONE);
-      if (query) {
-        adapter = TableAdapter.createFromQuery(results);
-      } else {
-        adapter = TableAdapter.createFromTable(entity);
-      }
-      tabItem.setData(adapter);
-    } else {
-      adapter = (TableAdapter) tabItem.getData();
-    }
-
-    final TableAdapter ta = adapter;
-
-    Composite main = new Composite(tabs, SWT.NONE);
-    GridLayout layout = new GridLayout(1, false);
-    layout.horizontalSpacing = 0;
-    layout.verticalSpacing = 0;
-    main.setLayout(layout);
-
-    // load up main
-    ToolBar toolbar = new ToolBar(main, SWT.HORIZONTAL);
-    final Table table = new Table(main, SWT.FULL_SELECTION | SWT.MULTI);
-    final Label label = new Label(main, SWT.NULL);
-
-    final Action copyAction = new Action() {
-      public void run() {
-        TableItem items[] = table.getSelection();
-        StringBuffer text = new StringBuffer();
-        for (int i = 0; i < items.length; i++) {
-          int columns = table.getColumnCount();
-          for (int col = 0; col < columns; col++) {
-            text.append(items[i].getText(col));
-            text.append('\t');
-          }
-          text.append('\n');
-        }
-        clip.setContents(
-          new Object[] { text.toString()},
-          new Transfer[] { TextTransfer.getInstance()});
-      }
-    };
-    final Action selectAllAction = new Action() {
-      public void run() {
-        table.selectAll();
-      }
-    };
-
-    // load toobar
-    ToolItem toolItem = new ToolItem(toolbar, SWT.PUSH);
-    toolItem.setImage(PHPEclipseSQLPlugin.getImage("refresh.gif")); //$NON-NLS-1$
-    toolItem.setToolTipText(Messages.getString("tableview.refresh")); //$NON-NLS-1$
-    toolItem.addSelectionListener(new SelectionListener() {
-      public void widgetDefaultSelected(SelectionEvent e) {
-      }
-      public void widgetSelected(SelectionEvent e) {
-        refreshTableAction.run();
-      }
-    });
-    toolItem = new ToolItem(toolbar, SWT.PUSH);
-    toolItem.setImage(PHPEclipseSQLPlugin.getImage("copy.gif")); //$NON-NLS-1$
-    toolItem.setToolTipText(Messages.getString("tableview.copy")); //$NON-NLS-1$
-    toolItem.addSelectionListener(new SelectionListener() {
-      public void widgetDefaultSelected(SelectionEvent e) {
-      }
-      public void widgetSelected(SelectionEvent e) {
-        copyAction.run();
-      }
-    });
-    toolItem = new ToolItem(toolbar, SWT.PUSH);
-    toolItem.setImage(PHPEclipseSQLPlugin.getImage("table.gif")); //$NON-NLS-1$
-    toolItem.setToolTipText(Messages.getString("tableview.selectAll")); //$NON-NLS-1$
-    toolItem.addSelectionListener(new SelectionListener() {
-      public void widgetDefaultSelected(SelectionEvent e) {
-      }
-      public void widgetSelected(SelectionEvent e) {
-        selectAllAction.run();
-      }
-    });
-
-    ToolItem filter = new ToolItem(toolbar, SWT.PUSH);
-    filter.setImage(PHPEclipseSQLPlugin.getImage("filter.gif")); //$NON-NLS-1$
-    filter.setToolTipText(Messages.getString("tableview.filterSort")); //$NON-NLS-1$
-
-    toolItem = new ToolItem(toolbar, SWT.SEPARATOR);
-
-    final ToolItem fullMode = new ToolItem(toolbar, SWT.PUSH | SWT.CHECK);
-
-    final ToolItem previous = new ToolItem(toolbar, SWT.PUSH);
-    final ToolItem next = new ToolItem(toolbar, SWT.PUSH);
-
-    fullMode.setImage(PHPEclipseSQLPlugin.getImage("fulldata.gif"));
-    fullMode.setToolTipText(Messages.getString("tableview.showAll")); //$NON-NLS-1$
-    fullMode.setSelection(false);
-    fullMode.addSelectionListener(new SelectionListener() {
-      public void widgetDefaultSelected(SelectionEvent e) {
-      }
-      public void widgetSelected(SelectionEvent e) {
-        if (ta.getPageSize() == Integer.MAX_VALUE) {
-          ta.resetMode();
-        } else {
-          ta.fullMode();
-        }
-        ta.loadData();
-        table.removeAll();
-        for (int i = table.getColumnCount() - 1; i >= 0; i--) {
-          table.getColumn(i).dispose();
-        }
-        ta.loadTable(table);
-        label.setText(ta.getStatusString());
-        previous.setEnabled(ta.hasPreviousPage());
-        next.setEnabled(ta.hasNextPage());
-      }
-    });
-    previous.setImage(PHPEclipseSQLPlugin.getImage("previous.gif"));
-    previous.setToolTipText("Previous");
-    previous.addSelectionListener(new SelectionListener() {
-      public void widgetDefaultSelected(SelectionEvent e) {
-      }
-      public void widgetSelected(SelectionEvent e) {
-        ta.previousPage();
-        ta.loadData();
-        table.removeAll();
-        for (int i = table.getColumnCount() - 1; i >= 0; i--) {
-          table.getColumn(i).dispose();
-        }
-        ta.loadTable(table);
-        label.setText(ta.getStatusString());
-        previous.setEnabled(ta.hasPreviousPage());
-        next.setEnabled(ta.hasNextPage());
-      }
-    });
-    next.setImage(PHPEclipseSQLPlugin.getImage("next.gif"));
-    next.setToolTipText("Next");
-    next.addSelectionListener(new SelectionListener() {
-      public void widgetDefaultSelected(SelectionEvent e) {
-      }
-      public void widgetSelected(SelectionEvent e) {
-        ta.nextPage();
-        ta.loadData();
-        table.removeAll();
-        for (int i = table.getColumnCount() - 1; i >= 0; i--) {
-          table.getColumn(i).dispose();
-        }
-        ta.loadTable(table);
-        label.setText(ta.getStatusString());
-        previous.setEnabled(ta.hasPreviousPage());
-        next.setEnabled(ta.hasNextPage());
-      }
-    });
-
-    toolItem = new ToolItem(toolbar, SWT.SEPARATOR);
-
-    toolItem = new ToolItem(toolbar, SWT.PUSH);
-    toolItem.setImage(PHPEclipseSQLPlugin.getImage("close.gif")); //$NON-NLS-1$
-    toolItem.setToolTipText(Messages.getString("tableview.close")); //$NON-NLS-1$
-    toolItem.addSelectionListener(new SelectionListener() {
-      public void widgetDefaultSelected(SelectionEvent e) {
-      }
-      public void widgetSelected(SelectionEvent e) {
-        closeTableAction.run();
-      }
-    });
-
-    // load table
-    if (reload) {
-      adapter.resetOffset();
-      adapter.loadData();
-    }
-    adapter.loadTable(table);
-    String tableName = adapter.getTable();
-    if (tableName != null) {
-      tabItem.setText(tableName);
-    } else {
-      tabItem.setText(adapter.getQuery());
-    }
-
-    previous.setEnabled(adapter.hasPreviousPage());
-    next.setEnabled(adapter.hasNextPage());
-    label.setText(ta.getStatusString());
-
-    GridData gridData = new GridData();
-    gridData.horizontalAlignment = GridData.FILL;
-    gridData.verticalAlignment = GridData.FILL;
-    gridData.grabExcessHorizontalSpace = true;
-    gridData.grabExcessVerticalSpace = true;
-    table.setLayoutData(gridData);
-
-    gridData = new GridData();
-    gridData.horizontalAlignment = GridData.FILL;
-    label.setLayoutData(gridData);
-
-    // create empty table row
-    TableColumn[] columns = table.getColumns();
-    String columnNames[] = new String[columns.length];
-    for (int i = 0; i < columns.length; i++) {
-      columnNames[i] = columns[i].getText();
-    }
-    String data[] = new String[columnNames.length];
-    for (int i = 0; i < columns.length; i++) {
-      data[i] = "";
-    }
-    final TableRow emptyRow = new TableRow(ta.getTable(), columnNames, data);
-
-    filter.addSelectionListener(new SelectionListener() {
-      public void widgetDefaultSelected(SelectionEvent e) {
-      }
-      public void widgetSelected(SelectionEvent e) {
-        SortFilterPage page = new SortFilterPage("");
-        SQLRowWizard wizard = new SQLRowWizard();
-        wizard.init("Filter and Sort", page, emptyRow, ta);
-        WizardDialog dialog = new WizardDialog(getSite().getShell(), wizard);
-        dialog.open();
-      }
-    });
-
-    final Action defaultEncodingAction = new Action() {
-      public void run() {
-        ta.setEncoding(TableAdapter.DEFAULT);
-      }
-    };
-    defaultEncodingAction.setText(Messages.getString("tableview.defaultEncoding")); //$NON-NLS-1$
-    final Action UTF8EncodingAction = new Action() {
-      public void run() {
-        ta.setEncoding(TableAdapter.UTF_8);
-      }
-    };
-    UTF8EncodingAction.setText(Messages.getString("tableview.UTF8Encoding")); //$NON-NLS-1$
-    final Action UTF16EncodingAction = new Action() {
-      public void run() {
-        ta.setEncoding(TableAdapter.UTF_16);
-      }
-    };
-    UTF16EncodingAction.setText(Messages.getString("tableview.UTF16Encoding")); //$NON-NLS-1$
-
-    IMenuListener menuListener = new IMenuListener() {
-      public void menuAboutToShow(IMenuManager mgr) {
-        if (ta.getTable() != null) {
-          TableItem[] selection = table.getSelection();
-          TableColumn[] columns = table.getColumns();
-          String columnNames[] = new String[columns.length];
-          for (int i = 0; i < columns.length; i++) {
-            columnNames[i] = columns[i].getText();
-          }
-          String data[] = new String[columnNames.length];
-          if (selection != null && selection.length > 0) {
-            TableItem sel = selection[0];
-            for (int i = 0; i < columns.length; i++) {
-              data[i] = sel.getText(i);
-            }
-          } else {
-            for (int i = 0; i < columns.length; i++) {
-              data[i] = "";
-            }
-          }
-          final TableRow row = new TableRow(ta.getTable(), columnNames, data);
-          Action updateAction = new Action() {
-            public void run() {
-              UpdateRowPage page = new UpdateRowPage("");
-              SQLRowWizard wizard = new SQLRowWizard();
-              wizard.init("Update Row", page, row, ta);
-              WizardDialog dialog =
-                new WizardDialog(getSite().getShell(), wizard);
-              dialog.open();
-            }
-          };
-          updateAction.setText(Messages.getString("tableview.update")); //$NON-NLS-1$
-          Action insertAction = new Action() {
-            public void run() {
-              InsertRowPage page = new InsertRowPage("");
-              SQLRowWizard wizard = new SQLRowWizard();
-              wizard.init("Insert Row", page, row, ta);
-              WizardDialog dialog =
-                new WizardDialog(getSite().getShell(), wizard);
-              dialog.open();
-            }
-          };
-          insertAction.setText(Messages.getString("tableview.insert")); //$NON-NLS-1$
-          Action deleteAction = new Action() {
-            public void run() {
-              DeleteRowPage page = new DeleteRowPage("");
-              SQLRowWizard wizard = new SQLRowWizard();
-              wizard.init("Delete Row", page, row, ta);
-              WizardDialog dialog =
-                new WizardDialog(getSite().getShell(), wizard);
-              dialog.open();
-            }
-          };
-          deleteAction.setText(Messages.getString("tableview.delete")); //$NON-NLS-1$
-
-          Action phpSelectAction = new Action() {
-            public void run() {
-              PHPSelectRowPage page = new PHPSelectRowPage("");
-              SQLRowWizard wizard = new SQLRowWizard();
-              wizard.init("PHP Select Generator", page, row, ta);
-              WizardDialog dialog =
-                new WizardDialog(getSite().getShell(), wizard);
-              dialog.open();
-            }
-          };
-          phpSelectAction.setText(Messages.getString("tableview.phpselect")); //$NON-NLS-1$
-
-          Action phpUpdateAction = new Action() {
-            public void run() {
-              PHPUpdateRowPage page = new PHPUpdateRowPage("");
-              SQLRowWizard wizard = new SQLRowWizard();
-              wizard.init("PHP Update Generator", page, row, ta);
-              WizardDialog dialog =
-                new WizardDialog(getSite().getShell(), wizard);
-              dialog.open();
-            }
-          };
-          phpUpdateAction.setText(Messages.getString("tableview.phpupdate")); //$NON-NLS-1$
-
-          Action phpInsertAction = new Action() {
-            public void run() {
-              PHPInsertRowPage page = new PHPInsertRowPage("");
-              SQLRowWizard wizard = new SQLRowWizard();
-              wizard.init("PHP Insert Generator", page, row, ta);
-              WizardDialog dialog =
-                new WizardDialog(getSite().getShell(), wizard);
-              dialog.open();
-            }
-          };
-          phpInsertAction.setText(Messages.getString("tableview.phpinsert")); //$NON-NLS-1$
-
-          Action phpDeleteAction = new Action() {
-            public void run() {
-              PHPDeleteRowPage page = new PHPDeleteRowPage("");
-              SQLRowWizard wizard = new SQLRowWizard();
-              wizard.init("PHP Delete Generator", page, row, ta);
-              WizardDialog dialog =
-                new WizardDialog(getSite().getShell(), wizard);
-              dialog.open();
-            }
-          };
-          phpDeleteAction.setText(Messages.getString("tableview.phpdelete")); //$NON-NLS-1$
-
-          mgr.add(phpSelectAction);
-          mgr.add(phpUpdateAction);
-          mgr.add(phpInsertAction);
-          mgr.add(phpDeleteAction);
-
-          mgr.add(insertAction);
-          mgr.add(updateAction);
-          mgr.add(deleteAction);
-
-        }
-        mgr.add(defaultEncodingAction);
-        mgr.add(UTF8EncodingAction);
-        mgr.add(UTF16EncodingAction);
-      }
-    };
-
-    // final setup
-    MenuManager manager = new MenuManager();
-    manager.setRemoveAllWhenShown(true);
-    Menu fTextContextMenu = manager.createContextMenu(table);
-    table.setMenu(fTextContextMenu);
-    table.setLinesVisible(true);
-    manager.addMenuListener(menuListener);
-
-    tabItem.setControl(main);
-    tabs.setSelection(tabs.indexOf(tabItem));
-  }
-
-  public void createPartControl(Composite parent) {
-    instance = this;
-    this.parent = parent;
-    initActions();
-    clip = new Clipboard(getSite().getShell().getDisplay());
-    tabs = new TabFolder(parent, SWT.NONE);
-  }
-  public void initActions() {
-    refreshTableAction = new RefreshTableAction();
-    refreshTableAction.setText(Messages.getString("tableview.refresh"));
-    refreshTableAction.setImageDescriptor(
-      PHPEclipseSQLPlugin.getImageDescriptor("refresh.gif"));
-    refreshTableAction.init(this);
-    closeTableAction = new CloseTableAction();
-    closeTableAction.setText(Messages.getString("tableview.close"));
-    closeTableAction.setImageDescriptor(
-      PHPEclipseSQLPlugin.getImageDescriptor("close.gif"));
-    closeTableAction.init(this);
-  }
+import net.sourceforge.phpdt.sql.Messages;
+import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
+import net.sourceforge.phpdt.sql.actions.CloseTableAction;
+import net.sourceforge.phpdt.sql.actions.RefreshTableAction;
+import net.sourceforge.phpdt.sql.sql.SQLResults;
+import net.sourceforge.phpdt.sql.sql.TableRow;
+import net.sourceforge.phpdt.sql.view.bookmark.BookmarkNode;
+import net.sourceforge.phpdt.sql.view.tableview.TableAdapter;
+import net.sourceforge.phpdt.sql.wizards.DeleteRowPage;
+import net.sourceforge.phpdt.sql.wizards.InsertRowPage;
+import net.sourceforge.phpdt.sql.wizards.SQLRowWizard;
+import net.sourceforge.phpdt.sql.wizards.SortFilterPage;
+import net.sourceforge.phpdt.sql.wizards.UpdateRowPage;
 
-  public void selectionChanged(IWorkbenchPart part, ISelection selection) {
-  }
+public class TableView extends ViewPart implements ISelectionListener {
+	private Clipboard clip;
+	private RefreshTableAction refreshTableAction;
+	private CloseTableAction closeTableAction;
+	private static TableView instance = null;
+	private TabFolder tabs;
+	private Composite parent;
+	public TableView() {
+		super();
+	}
+	public void setFocus() {
+	}
+	public static TableView getInstance() {
+		return instance;
+	}
+	public void closeCurrent() {
+		TabItem item = tabs.getItem(tabs.getSelectionIndex());
+		item.dispose();
+	}
+	public void refreshCurrent() {
+		TabItem item = tabs.getItem(tabs.getSelectionIndex());
+		TableAdapter adapter = (TableAdapter) item.getData();
+		BookmarkView bookmarkView = BookmarkView.getInstance();
+		BookmarkNode bookmark = bookmarkView.getCurrentBookmark();
+		String table = adapter.getTable();
+		if (table == null) {
+			loadTable(bookmark, item, null, null, true, true);
+		} else {
+			loadTable(bookmark, item, null, null, true, true);
+		}
+	}
+	public void loadQuery(BookmarkNode bookmark, SQLResults results) {
+		loadTable(bookmark, null, null, results, true, false);
+	}
+	public void loadTable(BookmarkNode bookmark, String table) {
+		loadTable(bookmark, null, table, null, false, true);
+	}
+	public void loadTable(BookmarkNode bookmark, TabItem tabItem, String entity, SQLResults results, boolean query, boolean reload) {
+		TableAdapter adapter;
+		if (tabItem == null) {
+			tabItem = new TabItem(tabs, SWT.NONE);
+			if (query) {
+				adapter = TableAdapter.createFromQuery(bookmark, results);
+			} else {
+				adapter = TableAdapter.createFromTable(bookmark, entity);
+			}
+			tabItem.setData(adapter);
+		} else {
+			adapter = (TableAdapter) tabItem.getData();
+		}
+
+		final TableAdapter ta = adapter;
+		
+		Composite main = new Composite(tabs, SWT.NONE);
+		GridLayout layout = new GridLayout(1, false);
+		layout.horizontalSpacing = 0;
+		layout.verticalSpacing = 0;
+		main.setLayout(layout);
+
+		// load up main
+		ToolBar toolbar = new ToolBar(main, SWT.HORIZONTAL);
+		final Table table = new Table(main, SWT.FULL_SELECTION | SWT.MULTI);
+		final Label label = new Label(main, SWT.NULL);
+
+		final Action copyAction = new Action() {
+			public void run() {
+				TableItem items[] = table.getSelection();
+				StringBuffer text = new StringBuffer();
+				for (int i = 0; i < items.length; i++) {
+					int columns = table.getColumnCount();
+					for (int col = 0; col < columns; col++) {
+						text.append(items[i].getText(col));
+						text.append('\t');
+					}
+					text.append('\n');
+				}
+				clip.setContents(
+					new Object[] { text.toString()},
+					new Transfer[] { TextTransfer.getInstance()});
+			}
+		};
+		final Action selectAllAction = new Action() {
+			public void run() {
+				table.selectAll();
+			}
+		};
+
+		// load toobar
+		ToolItem toolItem = new ToolItem(toolbar, SWT.PUSH);
+		toolItem.setImage(PHPEclipseSQLPlugin.getImage("refresh.gif")); //$NON-NLS-1$
+		toolItem.setToolTipText(Messages.getString("tableview.refresh")); //$NON-NLS-1$
+		toolItem.addSelectionListener(new SelectionListener() {
+			public void widgetDefaultSelected(SelectionEvent e) {
+			}
+			public void widgetSelected(SelectionEvent e) {
+				refreshTableAction.run();
+			}
+		});
+		toolItem = new ToolItem(toolbar, SWT.PUSH);
+		toolItem.setImage(PHPEclipseSQLPlugin.getImage("copy.gif")); //$NON-NLS-1$
+		toolItem.setToolTipText(Messages.getString("tableview.copy")); //$NON-NLS-1$
+		toolItem.addSelectionListener(new SelectionListener() {
+			public void widgetDefaultSelected(SelectionEvent e) {
+			}
+			public void widgetSelected(SelectionEvent e) {
+				copyAction.run();
+			}
+		});
+		toolItem = new ToolItem(toolbar, SWT.PUSH);
+		toolItem.setImage(PHPEclipseSQLPlugin.getImage("table.gif")); //$NON-NLS-1$
+		toolItem.setToolTipText(Messages.getString("tableview.selectAll")); //$NON-NLS-1$
+		toolItem.addSelectionListener(new SelectionListener() {
+			public void widgetDefaultSelected(SelectionEvent e) {
+			}
+			public void widgetSelected(SelectionEvent e) {
+				selectAllAction.run();
+			}
+		});
+
+		ToolItem filter = new ToolItem(toolbar, SWT.PUSH);
+		filter.setImage(PHPEclipseSQLPlugin.getImage("filter.gif")); //$NON-NLS-1$
+		filter.setToolTipText(Messages.getString("tableview.filterSort")); //$NON-NLS-1$
+
+		toolItem = new ToolItem(toolbar, SWT.SEPARATOR);
+
+		final ToolItem fullMode = new ToolItem(toolbar, SWT.PUSH | SWT.CHECK);
+
+		final ToolItem previous = new ToolItem(toolbar, SWT.PUSH);
+		final ToolItem next = new ToolItem(toolbar, SWT.PUSH);
+
+		fullMode.setImage(PHPEclipseSQLPlugin.getImage("fulldata.gif")); //$NON-NLS-1$
+		fullMode.setToolTipText(Messages.getString("tableview.showAll")); //$NON-NLS-1$
+		fullMode.setSelection(false);
+		fullMode.addSelectionListener(new SelectionListener() {
+			public void widgetDefaultSelected(SelectionEvent e) {
+			}
+			public void widgetSelected(SelectionEvent e) {
+				if (ta.getPageSize() == Integer.MAX_VALUE) {
+					ta.resetMode();
+				} else {
+					ta.fullMode();
+				}
+				ta.loadData();
+				table.removeAll();
+				for (int i = table.getColumnCount() - 1; i >= 0; i--) {
+					table.getColumn(i).dispose();
+				}
+				ta.loadTable(table);
+				label.setText(ta.getStatusString());
+				previous.setEnabled(ta.hasPreviousPage());
+				next.setEnabled(ta.hasNextPage());
+			}
+		});
+		previous.setImage(PHPEclipseSQLPlugin.getImage("previous.gif")); //$NON-NLS-1$
+		previous.setToolTipText("Previous"); //$NON-NLS-1$
+		previous.addSelectionListener(new SelectionListener() {
+			public void widgetDefaultSelected(SelectionEvent e) {
+			}
+			public void widgetSelected(SelectionEvent e) {
+				ta.previousPage();
+				ta.loadData();
+				table.removeAll();
+				for (int i = table.getColumnCount() - 1; i >= 0; i--) {
+					table.getColumn(i).dispose();
+				}
+				ta.loadTable(table);
+				label.setText(ta.getStatusString());
+				previous.setEnabled(ta.hasPreviousPage());
+				next.setEnabled(ta.hasNextPage());
+			}
+		});
+		next.setImage(PHPEclipseSQLPlugin.getImage("next.gif")); //$NON-NLS-1$
+		next.setToolTipText("Next"); //$NON-NLS-1$
+		next.addSelectionListener(new SelectionListener() {
+			public void widgetDefaultSelected(SelectionEvent e) {
+			}
+			public void widgetSelected(SelectionEvent e) {
+				ta.nextPage();
+				ta.loadData();
+				table.removeAll();
+				for (int i = table.getColumnCount() - 1; i >= 0; i--) {
+					table.getColumn(i).dispose();
+				}
+				ta.loadTable(table);
+				label.setText(ta.getStatusString());
+				previous.setEnabled(ta.hasPreviousPage());
+				next.setEnabled(ta.hasNextPage());
+			}
+		});
+
+		toolItem = new ToolItem(toolbar, SWT.SEPARATOR);
+
+		toolItem = new ToolItem(toolbar, SWT.PUSH);
+		toolItem.setImage(PHPEclipseSQLPlugin.getImage("close.gif")); //$NON-NLS-1$
+		toolItem.setToolTipText(Messages.getString("tableview.close")); //$NON-NLS-1$
+		toolItem.addSelectionListener(new SelectionListener() {
+										  public void widgetDefaultSelected(SelectionEvent e) {
+										  }
+										  public void widgetSelected(SelectionEvent e) {
+											  closeTableAction.run();
+										  }
+									  });
+
+		// load table
+		if (reload) {
+			adapter.resetOffset();
+			adapter.loadData();
+		}
+		adapter.loadTable(table);
+		String tableName = adapter.getTable();
+		if (tableName != null) {
+			tabItem.setText(tableName);
+		} else {
+			tabItem.setText(adapter.getQuery());
+		}
+
+		previous.setEnabled(adapter.hasPreviousPage());
+		next.setEnabled(adapter.hasNextPage());
+		label.setText(ta.getStatusString());
+		
+		GridData gridData = new GridData();
+		gridData.horizontalAlignment = GridData.FILL;
+		gridData.verticalAlignment = GridData.FILL;
+		gridData.grabExcessHorizontalSpace = true;
+		gridData.grabExcessVerticalSpace = true;
+		table.setLayoutData(gridData);
+
+		gridData = new GridData();
+		gridData.horizontalAlignment = GridData.FILL;
+		label.setLayoutData(gridData);
+
+		// create empty table row
+		TableColumn[] columns = table.getColumns();
+		String columnNames[] = new String[columns.length];
+		for (int i = 0; i < columns.length; i++) {
+			columnNames[i] = columns[i].getText();
+		}
+		String data[] = new String[columnNames.length];
+		for (int i = 0; i < columns.length; i++) {
+			data[i] = ""; //$NON-NLS-1$
+		}
+		
+		final TableRow emptyRow =
+			new TableRow(ta.getBookmark(), ta.getTable(), columnNames, data);
+		
+		filter.addSelectionListener(new SelectionListener() {
+			public void widgetDefaultSelected(SelectionEvent e) {
+			}
+			public void widgetSelected(SelectionEvent e) {
+					SortFilterPage page = new SortFilterPage(""); //$NON-NLS-1$
+					SQLRowWizard wizard = new SQLRowWizard();
+					wizard.init(Messages.getString("TableView.FilterAndSort"), page, emptyRow, ta); //$NON-NLS-1$
+					WizardDialog dialog =
+						new WizardDialog(
+							getSite().getShell(),
+							wizard);
+					dialog.open();
+			}
+		});
+
+
+		final Action defaultEncodingAction = new Action() {
+			public void run() {
+				ta.setEncoding(TableAdapter.DEFAULT);
+			}
+		};
+		defaultEncodingAction.setText(Messages.getString("tableview.defaultEncoding")); //$NON-NLS-1$
+		final Action UTF8EncodingAction = new Action() {
+			public void run() {
+				ta.setEncoding(TableAdapter.UTF_8);
+			}
+		};
+		UTF8EncodingAction.setText(Messages.getString("tableview.UTF8Encoding")); //$NON-NLS-1$
+		final Action UTF16EncodingAction = new Action() {
+			public void run() {
+				ta.setEncoding(TableAdapter.UTF_16);
+			}
+		};
+		UTF16EncodingAction.setText(Messages.getString("tableview.UTF16Encoding")); //$NON-NLS-1$
+
+		IMenuListener menuListener = new IMenuListener() {
+			public void menuAboutToShow(IMenuManager mgr) {
+				if (ta.getTable() != null) {
+					TableItem[] selection = table.getSelection();
+					TableColumn[] columns = table.getColumns();
+					String columnNames[] = new String[columns.length];
+					for (int i = 0; i < columns.length; i++) {
+						columnNames[i] = columns[i].getText();
+					}
+					String data[] = new String[columnNames.length];
+					if (selection != null && selection.length > 0) {
+						TableItem sel = selection[0];
+						for (int i = 0; i < columns.length; i++) {
+							data[i] = sel.getText(i);
+						}
+					} else {
+						for (int i = 0; i < columns.length; i++) {
+							data[i] = ""; //$NON-NLS-1$
+						}
+					}
+					final TableRow row =
+						new TableRow(ta.getBookmark(), ta.getTable(), columnNames, data);
+						Action updateAction = new Action() {
+							public void run() {
+								UpdateRowPage page = new UpdateRowPage(""); //$NON-NLS-1$
+								SQLRowWizard wizard = new SQLRowWizard();
+								wizard.init(Messages.getString("TableView.UpdateRow"), page, row, ta); //$NON-NLS-1$
+								WizardDialog dialog =
+									new WizardDialog(
+										getSite().getShell(),
+										wizard);
+								dialog.open();
+							}
+						};
+						updateAction.setText(Messages.getString("tableview.update")); //$NON-NLS-1$
+						Action insertAction = new Action() {
+							public void run() {
+								InsertRowPage page = new InsertRowPage(""); //$NON-NLS-1$
+								SQLRowWizard wizard = new SQLRowWizard();
+								wizard.init(Messages.getString("TableView.InsertRow"), page, row, ta); //$NON-NLS-1$
+								WizardDialog dialog =
+									new WizardDialog(
+										getSite().getShell(),
+										wizard);
+								dialog.open();
+							}
+						};
+						insertAction.setText(Messages.getString("tableview.insert")); //$NON-NLS-1$
+						Action deleteAction = new Action() {
+							public void run() {
+								DeleteRowPage page = new DeleteRowPage(""); //$NON-NLS-1$
+								SQLRowWizard wizard = new SQLRowWizard();
+								wizard.init(Messages.getString("TableView.DeleteRow"), page, row, ta); //$NON-NLS-1$
+								WizardDialog dialog =
+									new WizardDialog(
+										getSite().getShell(),
+										wizard);
+								dialog.open();
+							}
+						};
+						deleteAction.setText(Messages.getString("tableview.delete")); //$NON-NLS-1$
+						mgr.add(insertAction);
+						mgr.add(updateAction);
+						mgr.add(deleteAction);
+					}
+					mgr.add(defaultEncodingAction);
+					mgr.add(UTF8EncodingAction);
+					mgr.add(UTF16EncodingAction);
+				}
+		};
+
+		// final setup
+		MenuManager manager = new MenuManager();
+		manager.setRemoveAllWhenShown(true);
+		Menu fTextContextMenu = manager.createContextMenu(table);
+		table.setMenu(fTextContextMenu);
+		table.setLinesVisible(true);
+		manager.addMenuListener(menuListener);
+		
+		tabItem.setControl(main);
+		tabs.setSelection(tabs.indexOf(tabItem));
+	}
+
+	public void createPartControl(Composite parent) {
+		instance = this;
+		this.parent = parent;
+		initActions();
+		clip = new Clipboard(getSite().getShell().getDisplay());
+		tabs = new TabFolder(parent, SWT.NONE);
+	}
+	public void initActions() {
+		refreshTableAction = new RefreshTableAction();
+		refreshTableAction.setText(Messages.getString("tableview.refresh")); //$NON-NLS-1$
+		refreshTableAction.setImageDescriptor(
+			PHPEclipseSQLPlugin.getImageDescriptor("refresh.gif")); //$NON-NLS-1$
+		refreshTableAction.init(this);
+		closeTableAction = new CloseTableAction();
+		closeTableAction.setText(Messages.getString("tableview.close")); //$NON-NLS-1$
+		closeTableAction.setImageDescriptor(
+			PHPEclipseSQLPlugin.getImageDescriptor("close.gif")); //$NON-NLS-1$
+		closeTableAction.init(this);
+	}
+
+	public void selectionChanged(IWorkbenchPart part, ISelection selection) {
+	}
 }
\ No newline at end of file
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/BookmarkContentProvider.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/BookmarkContentProvider.java
index efa2799..da8fceb 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/BookmarkContentProvider.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/BookmarkContentProvider.java
@@ -2,201 +2,241 @@ package net.sourceforge.phpdt.sql.view.bookmark;
 
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileOutputStream;
 import java.util.Properties;
 import java.util.Vector;
 
-import net.sourceforge.phpdt.sql.IConstants;
-import net.sourceforge.phpdt.sql.bookmarks.Bookmark;
-
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.Viewer;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
 
-public class BookmarkContentProvider implements ITreeContentProvider, IConstants {
-  private Vector bookmarks = new Vector();
-  private static BookmarkContentProvider instance = null;
-  private boolean hasChanged = false;
-
-  /**
-   * Singleton accessor
-   */
-  public static synchronized BookmarkContentProvider getInstance() {
-    if (instance == null) {
-      instance = new BookmarkContentProvider();
-    }
-    return instance;
-  }
-
-  private BookmarkContentProvider() {
-  }
-
-  public void importBookmarks(File file) {
-    hasChanged = true;
-    if (DEBUG) {
-      System.out.println("Importing Bookmarks: Loading from file: " + file);
-    }
-    try {
-      Properties props = new Properties();
-      FileInputStream in = new FileInputStream(file);
-      props.load(in);
-      in.close();
-      fromProperties(false, props);
-    } catch (Throwable e) {
-      e.printStackTrace();
-    }
-  }
-  public void load(File file) {
-    if (DEBUG) {
-      System.out.println("Bookmarks: Loading from file: " + file);
-    }
-    try {
-      Properties props = new Properties();
-      FileInputStream in = new FileInputStream(file);
-      props.load(in);
-      in.close();
-      fromProperties(true, props);
-    } catch (Throwable e) {
-      e.printStackTrace();
-    }
-  }
-  public void save(File file) {
-    if (DEBUG) {
-      System.out.println("Bookmarks: Saving to file: " + file);
-    }
-    try {
-      Properties props = getProperties();
-      FileOutputStream out = new FileOutputStream(file);
-      props.store(out, "");
-      out.close();
-    } catch (Throwable e) {
-      e.printStackTrace();
-    }
-  }
-
-  public Object[] getChildren(Object parentElement) {
-    if (parentElement.equals(Root.ROOT)) {
-      return bookmarks.toArray();
-    } else if (parentElement instanceof TreeNode) {
-      TreeNode node = (TreeNode) parentElement;
-      return node.getChildren();
-    }
-    return Root.EMPTY_ARRAY;
-  }
-
-  public Object[] getElements(Object inputElement) {
-    return getChildren(inputElement);
-  }
-
-  public Object getParent(Object element) {
-    if (element.equals(Root.ROOT)) {
-      return null;
-    } else if (element instanceof TreeNode) {
-      TreeNode node = (TreeNode) element;
-      return node.getParent();
-    }
-    return null;
-  }
-
-  public boolean hasChildren(Object element) {
-    if (element.equals(Root.ROOT)) {
-      return true;
-    } else if (element instanceof TreeNode) {
-      TreeNode node = (TreeNode) element;
-      return node.hasChildren();
-    }
-    return false;
-  }
-
-  public void setChildren(BookmarkNode b, Vector tables) {
-    b.setChildren(tables);
-  }
-
-  public void addBookmark(BookmarkNode b) {
-    hasChanged = true;
-    if (!bookmarks.contains(b)) {
-      bookmarks.addElement(b);
-    }
-  }
-  public void removeBookmark(BookmarkNode b) {
-    hasChanged = true;
-    if (bookmarks.contains(b)) {
-      bookmarks.removeElement(b);
+import net.sourceforge.phpdt.sql.bookmarks.Bookmark;
+import net.sourceforge.phpdt.sql.sql.metadata.MetaDataXMLInterface;
+
+public class BookmarkContentProvider implements ITreeContentProvider {
+	private Vector bookmarks = new Vector();
+	private static BookmarkContentProvider instance = null;
+	private boolean hasChanged = false;
+
+   /**
+    * Singleton accessor
+    */
+	public static synchronized BookmarkContentProvider getInstance() {
+		if (instance == null) {
+			instance = new BookmarkContentProvider();
+		}
+		return instance;
+	}
+
+	private BookmarkContentProvider() {
+	}
+
+	/**
+	 * Imports the bookmars from a File, supposed to be in XML format and have the correct tags.
+	 * @param file
+	 */
+	public void load(File file) {
+		System.out.println("Bookmarks: Loading from file: " + file); //$NON-NLS-1$
+		try {
+		Properties props = new Properties();
+		FileInputStream in = new FileInputStream(file);
+		props.load(in);
+		in.close();
+		fromProperties(true, props);
+		} catch (Throwable e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * Exports a Bookmark data to an XMLDocument Element
+	 * The complementary function is importXML()
+	 * @param root	The Element to fill up with the bookmark info
+	 */
+	public void exportXML(Element root) {
+		System.out.println("Bookmarks: Saving to Element"); //$NON-NLS-1$
+		Element bookmarkRoot = MetaDataXMLInterface.createElementText(root,"bookmarks", ""); //$NON-NLS-1$ //$NON-NLS-2$
+		for (int i = 0; i < bookmarks.size(); i++) {
+			Bookmark b = (Bookmark) bookmarks.elementAt(i);
+			Element bookmark = MetaDataXMLInterface.createElementText(bookmarkRoot,"bookmark", ""); //$NON-NLS-1$ //$NON-NLS-2$
+			MetaDataXMLInterface.createElementText(bookmark,"name", b.getName()); //$NON-NLS-1$
+			MetaDataXMLInterface.createElementText(bookmark,"username", b.getUsername()); //$NON-NLS-1$
+			MetaDataXMLInterface.createElementText(bookmark,"password", b.getPassword()); //$NON-NLS-1$
+			MetaDataXMLInterface.createElementText(bookmark,"schema", b.getSchema()); //$NON-NLS-1$
+			MetaDataXMLInterface.createElementText(bookmark,"connect", b.getConnect()); //$NON-NLS-1$
+			MetaDataXMLInterface.createElementText(bookmark,"driver", b.getDriver()); //$NON-NLS-1$
+			MetaDataXMLInterface.createElementText(bookmark,"type", b.getType()); //$NON-NLS-1$
+			MetaDataXMLInterface.createElementText(bookmark,"driverLocation", b.getDriverFile()); //$NON-NLS-1$
+		}
+	}
+	
+	/**
+	 * Imports a Bookmark data from an XMLDocument Element
+	 * The complementary function is exportXML()
+	 * @param root	The Element from which to load
+	 */
+	public void importXML(Element root) {
+		System.out.println("Bookmarks: Loading from Element"); //$NON-NLS-1$
+		Vector newBookmarks = new Vector();
+		NodeList nodes = root.getElementsByTagName("bookmark"); //$NON-NLS-1$
+		for (int i = 0; i < nodes.getLength(); i++) {
+			Bookmark bookmark = new BookmarkNode();
+			Element column = (Element) nodes.item(i);
+			
+			String name = MetaDataXMLInterface.getElementText(column,"name"); //$NON-NLS-1$
+			if (name == null) break;
+			bookmark.setName(name);
+			
+			MetaDataXMLInterface.getElementText(column,"name"); //$NON-NLS-1$
+			bookmark.setUsername(MetaDataXMLInterface.getElementText(column,"username")); //$NON-NLS-1$
+			bookmark.setPassword(MetaDataXMLInterface.getElementText(column,"password")); //$NON-NLS-1$
+			bookmark.setConnect(MetaDataXMLInterface.getElementText(column,"connect")); //$NON-NLS-1$
+			bookmark.setDriver(MetaDataXMLInterface.getElementText(column,"driver")); //$NON-NLS-1$
+			bookmark.setSchema(MetaDataXMLInterface.getElementText(column,"schema")); //$NON-NLS-1$
+			bookmark.setType(MetaDataXMLInterface.getElementText(column,"type")); //$NON-NLS-1$
+			bookmark.setDriverFile(MetaDataXMLInterface.getElementText(column,"driverLocation")); //$NON-NLS-1$
+			System.out.println(bookmark.toString());
+			if (!bookmark.isEmpty()) {
+				newBookmarks.addElement(bookmark);
+			}
+		}
+		bookmarks = newBookmarks;
+	}
+	
+	public Object[] getChildren(Object parentElement) {
+		if (parentElement.equals(Root.ROOT)) {
+			return bookmarks.toArray();
+		} else if (parentElement instanceof TreeNode) {
+			TreeNode node = (TreeNode) parentElement;
+			return node.getChildren();
+		}
+		return Root.EMPTY_ARRAY;
+	}
+	/**
+	 * Finds a Bookmark with the specified name, and returs it. Null if nothing found.
+	 * @param name
+	 * @return
+	 */
+	public BookmarkNode find(String name){
+		for (int i = 0; i < bookmarks.size(); i++) {
+			BookmarkNode b = (BookmarkNode) bookmarks.elementAt(i);
+			if (b.getName().equals(name)) return b;
+		}
+		return null;
+	}
+	
+	public Object[] getElements(Object inputElement) {
+		return getChildren(inputElement);
+	}
+
+	public Object getParent(Object element) {
+		if (element.equals(Root.ROOT)) {
+			return null;
+		} else if (element instanceof TreeNode) {
+			TreeNode node = (TreeNode) element;
+			return node.getParent();
+		}
+		return null;
+	}
+
+	public boolean hasChildren(Object element) {
+		if (element.equals(Root.ROOT)) {
+			return true;
+		} else if (element instanceof TreeNode) {
+			TreeNode node = (TreeNode) element;
+			return node.hasChildren();
+		}
+		return false;
+	}
+
+    public void setChildren(BookmarkNode b, Vector tables) {
+    	b.setChildren(tables);
     }
-  }
 
-  public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-  }
-
-  public void dispose() {
-  }
-
-  public boolean hasChanged() {
-    return hasChanged;
-  }
-
-  public int getSize() {
-    return bookmarks.size();
-  }
-
-  public void fromProperties(boolean overwrite, Properties props) {
-    Vector newBookmarks = new Vector();
-    int i = 0;
-    while (true) {
-      Bookmark bookmark = new BookmarkNode();
-      String name = props.getProperty(i + ".name");
-      if (name == null) {
-        break;
-      }
-      bookmark.setName(name);
-      bookmark.setUsername(props.getProperty(i + ".username"));
-      bookmark.setPassword(props.getProperty(i + ".password"));
-      bookmark.setConnect(props.getProperty(i + ".connect"));
-      bookmark.setDriver(props.getProperty(i + ".driver"));
-      String schema = props.getProperty(i + ".schema");
-      if (schema != null) {
-        bookmark.setSchema(schema);
-      } else {
-        bookmark.setSchema("");
-      }
-      String type = props.getProperty(i + ".type");
-      if (type != null) {
-        bookmark.setType(type);
-      } else {
-        bookmark.setType("");
-      }
-      String driverFile = props.getProperty(i + ".driverLocation");
-      if (driverFile != null) {
-        bookmark.setDriverFile(driverFile);
-      } else {
-        bookmark.setDriverFile("");
-      }
-      if (DEBUG) {
-        System.out.println(bookmark.toString());
-      }
-      if (!bookmark.isEmpty()) {
-        newBookmarks.addElement(bookmark);
-      }
-      i++;
-    }
-    if (overwrite) {
-      bookmarks = newBookmarks;
-    } else {
-      bookmarks.addAll(newBookmarks);
-    }
-  }
-  public Properties getProperties() {
-    Properties props = new Properties();
-    for (int i = 0; i < bookmarks.size(); i++) {
-      Bookmark b = (Bookmark) bookmarks.elementAt(i);
-      props.put(i + ".name", b.getName());
-      props.put(i + ".username", b.getUsername());
-      props.put(i + ".password", b.getPassword());
-      props.put(i + ".schema", b.getSchema());
-      props.put(i + ".connect", b.getConnect());
-      props.put(i + ".driver", b.getDriver());
-      props.put(i + ".type", b.getType());
-      props.put(i + ".driverLocation", b.getDriverFile());
-    }
-    return props;
-  }
+	public void addBookmark(BookmarkNode b) {
+		hasChanged = true;
+		if (!bookmarks.contains(b)) {
+			bookmarks.addElement(b);
+		}
+	}
+	public void removeBookmark(BookmarkNode b) {
+		hasChanged = true;
+		if (bookmarks.contains(b)) {
+			bookmarks.removeElement(b);
+		}
+	}
+	
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+	}
+	
+	public void dispose() {
+	}
+	
+	public boolean hasChanged() {
+		return hasChanged;
+	}
+	
+	public int getSize() {
+		return bookmarks.size();
+	}
+	
+	public void fromProperties(boolean overwrite, Properties props) {
+		Vector newBookmarks = new Vector();
+		int i = 0;
+		while (true) {
+			Bookmark bookmark = new BookmarkNode();
+			String name = props.getProperty(i + ".name"); //$NON-NLS-1$
+			if (name == null) {
+				break;
+			}
+			bookmark.setName(name);
+			bookmark.setUsername(props.getProperty(i + ".username")); //$NON-NLS-1$
+			bookmark.setPassword(props.getProperty(i + ".password")); //$NON-NLS-1$
+			bookmark.setConnect(props.getProperty(i + ".connect")); //$NON-NLS-1$
+			bookmark.setDriver(props.getProperty(i + ".driver")); //$NON-NLS-1$
+			String schema = props.getProperty(i + ".schema"); //$NON-NLS-1$
+			if (schema != null) {
+				bookmark.setSchema(schema);
+			} else {
+				bookmark.setSchema(""); //$NON-NLS-1$
+			}
+			String type = props.getProperty(i + ".type"); //$NON-NLS-1$
+			if (type != null) {
+				bookmark.setType(type);
+			} else {
+				bookmark.setType(""); //$NON-NLS-1$
+			}
+			String driverFile = props.getProperty(i + ".driverLocation"); //$NON-NLS-1$
+			if (driverFile != null) {
+				bookmark.setDriverFile(driverFile);
+			} else {
+				bookmark.setDriverFile(""); //$NON-NLS-1$
+			}
+			System.out.println(bookmark.toString());
+			if (!bookmark.isEmpty()) {
+				newBookmarks.addElement(bookmark);
+			}
+			i++;
+		}
+		if (overwrite) {
+			bookmarks = newBookmarks;
+		} else {
+			bookmarks.addAll(newBookmarks);
+		}
+	}
+	public Properties getProperties() {
+		Properties props = new Properties();
+		for (int i = 0; i < bookmarks.size(); i++) {
+			Bookmark b = (Bookmark) bookmarks.elementAt(i);
+			props.put(i + ".name", b.getName()); //$NON-NLS-1$
+			props.put(i + ".username", b.getUsername()); //$NON-NLS-1$
+			props.put(i + ".password", b.getPassword()); //$NON-NLS-1$
+			props.put(i + ".schema", b.getSchema()); //$NON-NLS-1$
+			props.put(i + ".connect", b.getConnect()); //$NON-NLS-1$
+			props.put(i + ".driver", b.getDriver()); //$NON-NLS-1$
+			props.put(i + ".type", b.getType()); //$NON-NLS-1$
+			props.put(i + ".driverLocation", b.getDriverFile()); //$NON-NLS-1$
+		}
+		return props;
+	}
 }
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/BookmarkNode.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/BookmarkNode.java
index 53b1fe8..401d9af 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/BookmarkNode.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/BookmarkNode.java
@@ -1,13 +1,17 @@
 package net.sourceforge.phpdt.sql.view.bookmark;
 
-import java.util.Collections;
 import java.util.Vector;
 
+import org.eclipse.core.runtime.CoreException;
+
 import net.sourceforge.phpdt.sql.bookmarks.Bookmark;
+import net.sourceforge.phpdt.sql.sql.metadata.ObjectMetaData;
 
 public class BookmarkNode extends Bookmark implements TreeNode {
     private Vector children = new Vector();
-    
+    public ObjectMetaData getMetaData() {
+    	return null;	//no metadata implementation for now
+    }
     public BookmarkNode() {
     }
 
@@ -35,7 +39,6 @@ public class BookmarkNode extends Bookmark implements TreeNode {
 			Object obj = children.elementAt(i);
 			isValid(obj);
 		}
-		Collections.sort(children);
 		this.children = children;
 	}
 	
@@ -43,11 +46,35 @@ public class BookmarkNode extends Bookmark implements TreeNode {
 		boolean valid = false;
 		if (child instanceof TableNode ||
 		    child instanceof ViewNode ||
-		    child instanceof SequenceNode) {
+		    child instanceof SequenceNode ||
+		    child instanceof GroupNode) {
 			valid = true;
 		}
 		if (!valid) {
-			throw new RuntimeException("Invalid BookmarkNode child: " + child.getClass().getName());
+			throw new RuntimeException("Invalid BookmarkNode child: " + child.getClass().getName()); //$NON-NLS-1$
+		}
+	}
+	
+	public void dispose() throws CoreException {
+		if (isConnected()) {
+            disconnect();
+        } 
+	}
+
+	/**
+	 * Finds a child of the BookmarkNode with the said name 
+	 * @param name
+	 * @return the TreeNode found. null if none
+	 */
+	public TreeNode find(String name){
+		for (int i = 0; i <  children.size(); i++) {
+			Object obj = children.elementAt(i);
+			if (obj instanceof TreeNode){
+				TreeNode node = (TreeNode) obj;
+				if (name.equals(node.getName())) return node;			
+			}
 		}
+		return null;
 	}
+
 }
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/ColumnMetaData.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/ColumnMetaData.java
new file mode 100644
index 0000000..beeaf51
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/ColumnMetaData.java
@@ -0,0 +1,202 @@
+/*
+ * Created on 2/04/2003
+ *
+ */
+package net.sourceforge.phpdt.sql.view.bookmark;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Vector;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.graphics.Image;
+
+import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
+import net.sourceforge.phpdt.sql.sql.SQLHelper;
+import net.sourceforge.phpdt.sql.sql.metadata.ObjectMetaData;
+import net.sourceforge.phpdt.sql.sql.metadata.StringMatrix;
+
+/**
+ * 
+ * Class that holds the MetaData for a Column in a table or view.
+ * primaryKeyOrder holds value 0 or the sequence number of the column in the primary key.
+ */
+public class ColumnMetaData implements TreeNode {
+	
+	StringMatrix matrix = null;
+	TreeNode parent = null;
+	int primaryKeyOrder = 0;
+
+	public ColumnMetaData( StringMatrix metaData , TreeNode parent) {
+			this.matrix = metaData;
+			this.parent = parent;
+		}
+
+	/**
+	 * @return the display size of the column
+	 */
+	public int getDisplaySize() {
+		String result = matrix.get("COLUMN_SIZE", 0); //$NON-NLS-1$
+		if (result == null) return 0;
+		else return Integer.parseInt(result);
+	}
+
+	// Is a node that has no children
+	public Object[] getChildren() {
+		return null;
+	}
+	public boolean hasChildren() {
+		return false;
+	}
+	
+
+	/**
+	 * @return if the column is nullable (can have nulls). Values as constants in ResultSetMetaData
+	 */
+	public boolean getIsNullable() {
+		String result = matrix.get("IS_NULLABLE", 0); //$NON-NLS-1$
+		if (result != null && result == "YES") return true; //$NON-NLS-1$
+		else return false;
+	}
+
+	/**
+	 * @return the order of the column in the primary key of the table 
+	 * (0 is is not part of it)
+	 */
+	public int getPrimaryKeyOrder() {
+		return primaryKeyOrder;
+	}
+	/**
+	 * @param i : The order of the column in the primary key of the table
+	 * (0 if not part of it)
+	 */
+	public void setPrimaryKeyOrder(int i) {
+		primaryKeyOrder = i;
+	}
+
+	/**
+	 * @return the name of the column
+	 */
+	public String getName() {
+		return matrix.get("COLUMN_NAME", 0); //$NON-NLS-1$
+	}
+
+	/**
+	 * @return the precision of the column (digits left of the digital point)
+	 */
+	public int getPrecision() {
+		return getDisplaySize();
+	}
+
+	/**
+	 * @return the scale of the column (digits right of the digital point)
+	 */
+	public int getScale() {
+		String result = matrix.get("DECIMAL_DIGITS", 0); //$NON-NLS-1$
+		if (result == null) return 0;
+		else return Integer.parseInt(result);
+	}
+
+	/**
+	 * @return the type of the column (as a string)
+	 */
+	public String getTypeName() {
+		return matrix.get("TYPE_NAME", 0); //$NON-NLS-1$
+	}
+
+
+
+	/* (non-Javadoc)
+	 * @see java.lang.Object#toString()
+	 */
+	public String toString() {
+		String sDesc =  getName() + " " + getTypeName(); //$NON-NLS-1$
+		if (isNumeric())
+		{
+			if (getPrecision() > 0 || getScale() > 0) sDesc += "(" + Integer.toString(getPrecision()); //$NON-NLS-1$
+			if (getScale() > 0) sDesc += "," + Integer.toString(getScale()); //$NON-NLS-1$
+			if (getPrecision() > 0 || getScale() > 0) sDesc += ")"; //$NON-NLS-1$
+		} else
+		{
+			if (getDisplaySize() > 0) sDesc += "(" + Integer.toString(getDisplaySize()) + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		return sDesc;
+	}
+
+	/**
+	 * @return an Image object to appear in the view
+	 * @throws MalformedURLException
+	 */
+	public Image getImage() throws MalformedURLException {
+		// We'll return an icon if it's part of the primary key
+		if (getPrimaryKeyOrder() > 0) {
+			URL installURL = PHPEclipseSQLPlugin.getDefault().getDescriptor().getInstallURL();
+			URL url = new URL(installURL, "icons/key.gif"); //$NON-NLS-1$
+			ImageDescriptor descriptor = ImageDescriptor.createFromURL(url);
+			return descriptor.createImage();
+		} else
+			return null;
+	}
+	public boolean isReal() {
+		int type = getType();
+		return SQLHelper.isReal(type);
+	}
+
+	public boolean isNumeric() {
+		int type = getType();
+		return SQLHelper.isNumeric(type);
+	}
+
+	/**
+	 * @return the type of the column, as a numeric constant definde in java.sql.
+	 */
+	public int getType() {
+		String result = matrix.get("DATA_TYPE", 0); //$NON-NLS-1$
+		int type = -1;
+		if (result != null)  type = Integer.parseInt(result);
+		return type;
+	}
+
+	public String getTable(){
+		return matrix.get("TABLE_NAME", 0); //$NON-NLS-1$
+	}
+
+	/**
+	 * @return
+	 */
+	public Object getParent() {
+		return parent;
+	}
+
+	/**
+	 * @param node
+	 */
+	public void setParent(TreeNode node) {
+		parent = node;
+	}
+
+	/* (non-Javadoc)
+	 * @see net.sourceforge.phpdt.view.bookmark.TreeNode#getMetaData()
+	 */
+	public ObjectMetaData getMetaData() {
+		return null;
+	}
+	/**
+	 * @return a Vector of ColumnMetaData objects representing all the columns of
+	 * the Object. 
+	 */
+	public static Vector getColumnsMetaData(ObjectMetaData metadata, TreeNode node)
+	{
+		StringMatrix columns = metadata.getColumns();
+		Vector ret = new Vector(columns.size(),1);
+		for (int i = 0; i< columns.size(); i++){
+			ColumnMetaData columnMD = new ColumnMetaData(columns.rowMatrix(i), node);
+			columnMD.setPrimaryKeyOrder(metadata.getPrimaryKeyOrder(columnMD.getName()));
+			ret.add(columnMD);		
+		}
+		
+		return ret;
+		
+	}
+
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/GroupNode.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/GroupNode.java
new file mode 100644
index 0000000..4f58bf4
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/GroupNode.java
@@ -0,0 +1,101 @@
+/*
+ * Created on 27/06/2003
+ *
+ */
+package net.sourceforge.phpdt.sql.view.bookmark;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Collections;
+import java.util.Vector;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.graphics.Image;
+
+import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
+import net.sourceforge.phpdt.sql.sql.metadata.ObjectMetaData;
+
+/**
+ * GroupNode represents a level of grouping in the BookmarkView hierarchy
+ * It will have categories like "TABLE", "VIEW" and so on, usually gotten from
+ * the JDBC driver.
+ * @author panic
+ *
+ */
+public class GroupNode implements TreeNode, Comparable {
+	private BookmarkNode parent = null;
+	private Vector children = new Vector();
+	private String name = null;
+	private int size = -1;
+
+	public GroupNode(BookmarkNode parent, String name) {
+		this.parent = parent;
+		this.name = name;
+	}
+	public ObjectMetaData getMetaData() {
+		return null;	//no metadata
+	}
+
+	public boolean hasChildren() {
+		if (children != null && children.size() > 0) {
+			return true;
+		}
+		return false;
+	}
+	public Object[] getChildren() {
+		return children.toArray();
+	}
+
+	public Object getParent() {
+		return parent;
+	}
+	public String getName() {
+		return name;
+	}
+	
+	public String toString() {
+		return name;
+	}
+	
+	public void addChild(Object child)
+	{
+		if (!(child instanceof TreeNode)) return;
+		if (name == "TABLE" && !(child instanceof TableNode)) return;
+		if (name == "VIEW" && !(child instanceof ViewNode)) return;
+		if (name == "SEQUENCE" && !(child instanceof SequenceNode)) return;
+		children.add(child);
+		Collections.sort(children);
+	}
+
+	public int compareTo(Object o) {
+		if (o instanceof GroupNode) {
+			GroupNode node = (GroupNode) o;
+			return name.compareTo(node.getName());
+		} 
+		return 0;
+	}
+	/**
+	 * @return an Image object to appear in the view
+	 * @throws MalformedURLException
+	 */
+	public Image getImage() throws MalformedURLException {
+		// We'll return an icon if it's part of the primary key
+		URL installURL = PHPEclipseSQLPlugin.getDefault().getDescriptor().getInstallURL();
+		URL url = null;	
+		if (name == "TABLE") {
+			url = new URL(installURL, "icons/greentable.gif"); //$NON-NLS-1$
+		} else if (name == "VIEW") {
+			url = new URL(installURL, "icons/view.gif"); //$NON-NLS-1$
+		} else if (name == "SEQUENCE") {
+			url = new URL(installURL, "icons/sequence.gif"); //$NON-NLS-1$
+		}
+		
+		if (url != null) {
+			ImageDescriptor descriptor = ImageDescriptor.createFromURL(url);
+			return descriptor.createImage();
+		} else
+			return null;
+	}
+
+
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/MetaDataNode.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/MetaDataNode.java
index 26b71e0..e69de29 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/MetaDataNode.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/MetaDataNode.java
@@ -1,49 +0,0 @@
-package net.sourceforge.phpdt.sql.view.bookmark;
-
-public class MetaDataNode implements TreeNode {
-	TreeNode parent;
-	String name;
-	String type;
-	
-	public MetaDataNode(TableNode node, String name, String type) {
-		this.parent = node;
-		this.name = name;
-		this.type = type;
-	}
-	public MetaDataNode(ViewNode node, String name, String type) {
-		this.parent = node;
-		this.name = name;
-		this.type = type;
-	}
-	public String getName() {
-		return name;
-	}
-
-	public String getType() {
-		return type;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public void setType(String type) {
-		this.type = type;
-	}
-
-	public Object[] getChildren() {
-		return Root.EMPTY_ARRAY;
-	}
-
-	public Object getParent() {
-		return parent;
-	}
-
-	public boolean hasChildren() {
-		return false;
-	}
-
-	public String toString() {
-		return name + " " + type;
-	}
-}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/ObjectNode.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/ObjectNode.java
new file mode 100644
index 0000000..61e9d9a
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/ObjectNode.java
@@ -0,0 +1,168 @@
+package net.sourceforge.phpdt.sql.view.bookmark;
+
+import org.apache.crimson.tree.XmlDocument;
+import org.w3c.dom.Element;
+
+import net.sourceforge.phpdt.sql.Messages;
+import net.sourceforge.phpdt.sql.sql.metadata.MetaDataXMLInterface;
+import net.sourceforge.phpdt.sql.sql.metadata.ObjectMetaData;
+
+/**
+ * Defines a node for the Subset. It contains an editable ObjectMetaData 
+ * where you can erase columns you are not interested in. 
+ * @author jparrai
+ *
+ */
+public class ObjectNode implements TreeNode, Comparable {
+	private SubsetNode parent = null;
+	private String bookmark = null;
+	private String name = null;
+	private ObjectMetaData metadata = null;
+	private int size = -1;
+	private int order = 0;
+	
+	public ObjectNode(SubsetNode parent, ObjectMetaData metadata, String bookmark, String name) {
+		this.parent = parent;
+		this.bookmark = bookmark;
+		this.metadata = metadata;
+		this.name = name;
+	}
+	
+	public ObjectNode(){
+	}
+
+	/* (non-Javadoc)
+	 * @see net.sourceforge.phpdt.view.bookmark.TreeNode#getChildren()
+	 * We consider the columns of the metadata to be the children.
+	 */
+	public Object[] getChildren() {
+		if (metadata != null && ColumnMetaData.getColumnsMetaData(metadata, this) != null) {
+			return ColumnMetaData.getColumnsMetaData(metadata, this).toArray();
+		} else {
+			return Root.EMPTY_ARRAY;
+		}
+	}
+
+	public Object getParent() {
+		return parent;
+	}
+
+	public boolean hasChildren() {
+		if (metadata == null) return false;
+		return (ColumnMetaData.getColumnsMetaData(metadata, this) != null && 
+				ColumnMetaData.getColumnsMetaData(metadata, this).size() > 0);
+	}
+	
+	public String getName() {
+		return name;
+	}
+	
+	public String toString() {
+		return name;
+	}
+
+	public int compareTo(Object o) {
+		if (o instanceof ObjectNode) {
+			ObjectNode node = (ObjectNode) o;
+			if (node.getOrder() > getOrder()) return -1;
+			if (node.getOrder() < getOrder()) return 1;
+			// If the order is the same, we use alphabetical order 
+			return name.compareTo(node.getName());
+		} else throw new ClassCastException();
+	}
+	
+	public int getSize() {
+		return size;
+	}
+
+	public void setSize(int size) {
+		this.size = size;
+	}
+
+	public void setObjectMetadata(ObjectMetaData metadata) {
+		this.metadata = metadata;
+	}
+	/**
+	 * @return
+	 */
+	public ObjectMetaData getMetaData() {
+		return metadata;
+	}
+
+	/**
+	 * @return The order of this ObjectNode inside the SubsetNode
+	 */
+	public int getOrder() {
+		return order;
+	}
+	/**
+	 * Sets an ordering (inside the SubsetNode) to the ObjectNode
+	 * @param i
+	 */
+	public void setOrder(int i) {
+		order = i;
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 */
+	public boolean equals(Object obj) {
+		if (!(obj instanceof ObjectNode)) return false;
+		return (getName().equals(((ObjectNode) obj).getName()));
+	}
+	
+	/**
+	 * Imports one ObjectNode from an XMLDocument. There must be a tag for the Table Name, another for the Bookmark
+	 * name and other for the metadata. The complement function is exportXML()
+	 * @param root Document to get the data from
+	 * @param parent The SubsetNode to which to add the new ObjectNode
+	 * @return The newly created ObjectNode, or null if some error.
+	 */
+	public static ObjectNode importXML(Element root, SubsetNode parent){
+		// Get the name tag value into objName
+		String objName = MetaDataXMLInterface.getElementText(root, Messages.getString("ExportXMLAction.TableName")); //$NON-NLS-1$
+		if (objName == "") return null;	 //$NON-NLS-1$
+		// Get the bookmark tag value into objName
+		String bookmarkName = MetaDataXMLInterface.getElementText(root, Messages.getString("ExportXMLAction.BookmarkName")); //$NON-NLS-1$
+		if (bookmarkName == "") return null; //$NON-NLS-1$
+		ObjectMetaData metadata = new ObjectMetaData();
+		// The rest of the tags go to be the metadata
+		MetaDataXMLInterface.xmlToMetaData(metadata, root);
+		// We can finally create the new ObjectNode with the collected data
+		ObjectNode objectNode = new ObjectNode(parent, metadata, bookmarkName, objName);
+		return objectNode;					
+	}
+	
+	/**
+	 * Exports an ObjectNode to an XMLDocument. The complement function is importXML()
+	 * @param root	Document to write the XML tags to
+	 */
+	public void exportXML(Element root){
+		XmlDocument doc = (XmlDocument) root.getOwnerDocument();
+		Element sub = (Element) root.appendChild(doc.createElement(Messages.getString("ExportXMLAction.Table"))); //$NON-NLS-1$
+		MetaDataXMLInterface.createElementText(sub,Messages.getString("ExportXMLAction.TableName"), getName()); //$NON-NLS-1$
+		MetaDataXMLInterface.createElementText(sub,Messages.getString("ExportXMLAction.BookmarkName"), bookmark); //$NON-NLS-1$
+		if (this.metadata != null)
+			MetaDataXMLInterface.metaDataToXML(this.metadata, doc, sub);
+	}
+
+	/**
+	 * @return The name of the Bookmark associated with that ObjectNode
+	 */
+	public String getBookmark() {
+		return bookmark;
+	}
+
+	/**
+	 * Generates a query with all the columns in the metadata of the ObjectNode.
+	 * "SELECT *" would not be valid because you can have less columns in the ObjectNode than in the table or view.
+	 * @return	String with the Query
+	 */
+	public String getQuery() {
+		String result = new String(""); //$NON-NLS-1$
+		result = "SELECT " + metadata.getColumnsString() + " FROM " + getName(); //$NON-NLS-1$ //$NON-NLS-2$
+		return result;
+	}
+
+
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/Root.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/Root.java
index 4db7441..736617a 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/Root.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/Root.java
@@ -1,5 +1,7 @@
 package net.sourceforge.phpdt.sql.view.bookmark;
 
+import net.sourceforge.phpdt.sql.sql.metadata.ObjectMetaData;
+
 /**
  * @author root
  *
@@ -21,6 +23,10 @@ public final class Root implements TreeNode {
 		return EMPTY_ARRAY;
 	}
 
+	public ObjectMetaData getMetaData() {
+			return null;	//no metadata implementation for now
+		}
+    
 	/**
 	 * @see net.sourceforge.phpdt.sql.view.bookmark.TreeNode#getParent()
 	 */
@@ -34,5 +40,8 @@ public final class Root implements TreeNode {
 	public boolean hasChildren() {
 		return false;
 	}
-
+	
+	public String getName() {
+		return "phpeclipsesql_root"; //$NON-NLS-1$
+	}
 }
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/SequenceNode.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/SequenceNode.java
index cf12bac..a43cebe 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/SequenceNode.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/SequenceNode.java
@@ -1,14 +1,25 @@
 package net.sourceforge.phpdt.sql.view.bookmark;
 
+import java.net.MalformedURLException;
+
+import org.eclipse.swt.graphics.Image;
+
+import net.sourceforge.phpdt.sql.model.Sequence;
+import net.sourceforge.phpdt.sql.sql.metadata.ObjectMetaData;
+
 public class SequenceNode implements TreeNode, Comparable  {
-    private BookmarkNode parent;
-    private String name;
+    private GroupNode parent;
+    private Sequence sequence;
 
-    public SequenceNode(BookmarkNode parent, String seqName) {
+    public SequenceNode(GroupNode parent, Sequence sequence) {
     	this.parent = parent;
-    	this.name = seqName;
+    	this.sequence = sequence;
     }
 
+	public ObjectMetaData getMetaData() {
+			return null;	//no metadata implementation for now
+		}
+    
 	public Object[] getChildren() {
 		return Root.EMPTY_ARRAY;
 	}
@@ -22,20 +33,44 @@ public class SequenceNode implements TreeNode, Comparable  {
 	}
 	
 	public String getName() {
-		return name;
+		return this.sequence.getQualifiedName();
 	}
 	
 	public String toString() {
-		return name;
+		return getName();
 	}
 
 	public int compareTo(Object o) {
 		if (o instanceof SequenceNode) {
 			SequenceNode node = (SequenceNode) o;
-			return name.compareTo(node.getName());
+			return getName().compareTo(node.getName());
 		} else if (o instanceof TreeNode || o instanceof ViewNode) {
 			return 1;
 		}
 		return 0;
 	}
+	/**
+	 * @return an Image object to appear in the view
+	 * @throws MalformedURLException
+	 */
+	public Image getImage() throws MalformedURLException {
+		if (parent instanceof GroupNode){
+			GroupNode group = (GroupNode) parent;
+			return group.getImage();
+		} else
+			return null;
+	}
+
+	/**
+	 * @return the associated BookmarkNode, by navigating upwards in the tree 
+	 */
+	public BookmarkNode getBookmark() {
+		TreeNode node = parent;
+		while (!( node instanceof BookmarkNode))
+		{
+			node = (TreeNode) node.getParent();
+		}
+		return (BookmarkNode) node;
+	}
+
 }
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/SubsetContentProvider.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/SubsetContentProvider.java
new file mode 100644
index 0000000..d0193d5
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/SubsetContentProvider.java
@@ -0,0 +1,155 @@
+package net.sourceforge.phpdt.sql.view.bookmark;
+
+import java.util.Vector;
+
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+import net.sourceforge.phpdt.sql.Messages;
+import net.sourceforge.phpdt.sql.sql.metadata.MetaDataXMLInterface;
+import net.sourceforge.phpdt.sql.sql.metadata.ObjectMetaData;
+
+public class SubsetContentProvider implements ITreeContentProvider {
+	private Vector subsets = new Vector();
+	private static SubsetContentProvider instance = null;
+	private boolean hasChanged = false;
+
+   /**
+    * Singleton accessor
+    */
+	public static synchronized SubsetContentProvider getInstance() {
+		if (instance == null) {
+			instance = new SubsetContentProvider();
+		}
+		return instance;
+	}
+
+	private SubsetContentProvider() {
+	}
+
+	public void exportXML(Element root) {
+		System.out.println("Subsets: Saving to Element"); //$NON-NLS-1$
+		Element subsetRoot = MetaDataXMLInterface.createElementText(root,Messages.getString("ExportXMLAction.Subsets"), ""); //$NON-NLS-1$ //$NON-NLS-2$
+		for (int i = 0; i < subsets.size(); i++) {
+			SubsetNode current = (SubsetNode) subsets.get(i);
+			current.exportXML(subsetRoot);
+		}
+	}
+	
+	/**
+	 * Imports the data from an XML file to the tree. Does not set the tree to
+	 * changed because it's usually invoked from the initial import routine.
+	 * @param root
+	 */
+	public void importXML(Element root){
+		System.out.println("Bookmarks: Loading from Element"); //$NON-NLS-1$
+		Vector newSubsets = new Vector();
+		NodeList nodes = root.getElementsByTagName(Messages.getString("ExportXMLAction.Subset")); //$NON-NLS-1$
+		for (int i = 0; i < nodes.getLength(); i++) {
+			SubsetNode subset = new SubsetNode();
+			Element node = (Element) nodes.item(i);
+			subset.importXML(node,true);
+			newSubsets.add(subset);
+		}
+		subsets = newSubsets;
+	}
+	
+
+	public Object[] getChildren(Object parentElement) {
+		if (parentElement.equals(Root.ROOT)) {
+			return subsets.toArray();
+		} else if (parentElement instanceof TreeNode) {
+			TreeNode node = (TreeNode) parentElement;
+			return node.getChildren();
+		}
+		return Root.EMPTY_ARRAY;
+	}
+
+	public Object[] getElements(Object inputElement) {
+		return getChildren(inputElement);
+	}
+
+	public Object getParent(Object element) {
+		if (element.equals(Root.ROOT)) {
+			return null;
+		} else if (element instanceof TreeNode) {
+			TreeNode node = (TreeNode) element;
+			return node.getParent();
+		}
+		return null;
+	}
+
+	public boolean hasChildren(Object element) {
+		if (element.equals(Root.ROOT)) {
+			return true;
+		} else if (element instanceof TreeNode) {
+			TreeNode node = (TreeNode) element;
+			return node.hasChildren();
+		}
+		return false;
+	}
+
+    public void setChildren(SubsetNode b, Vector tables) {
+    	b.setChildren(tables);
+    }
+
+	public void addSubset(SubsetNode b) {
+		hasChanged = true;
+		if (!subsets.contains(b)) {
+			subsets.addElement(b);
+		}
+	}
+	public void removeSubset(SubsetNode b) {
+		hasChanged = true;
+		if (subsets.contains(b)) {
+			subsets.removeElement(b);
+		}
+	}
+	
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+	}
+	
+	public void dispose() {
+	}
+	
+	public boolean hasChanged() {
+		return hasChanged;
+	}
+	
+	public int getSize() {
+		return subsets.size();
+	}
+	
+	/**
+	 * @param b
+	 */
+	public void setHasChanged(boolean b) {
+		hasChanged = b;
+	}
+
+	/**
+	 * @param column
+	 */
+	public void deleteColumn(ColumnMetaData column) {
+		TreeNode node = (TreeNode) column.getParent();
+		ObjectMetaData metadata = node.getMetaData();
+		if (metadata == null) return;
+		metadata.dropColumn(column.getName());
+		setHasChanged(true);
+		
+	}
+
+	/**
+	 * @param object
+	 */
+	public void deleteObject(ObjectNode object) {
+		SubsetNode node = (SubsetNode) object.getParent();
+		if (!(node instanceof SubsetNode)) return;
+		node.remove(object);
+		setHasChanged(true);
+		
+	}
+
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/SubsetNode.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/SubsetNode.java
new file mode 100644
index 0000000..4f9e996
--- /dev/null
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/SubsetNode.java
@@ -0,0 +1,154 @@
+package net.sourceforge.phpdt.sql.view.bookmark;
+
+import java.util.Collections;
+import java.util.Vector;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+import net.sourceforge.phpdt.sql.Messages;
+import net.sourceforge.phpdt.sql.sql.metadata.MetaDataXMLInterface;
+import net.sourceforge.phpdt.sql.sql.metadata.ObjectMetaData;
+
+public class SubsetNode implements TreeNode {
+	private String name = null;
+    private Vector children = new Vector();
+
+	public SubsetNode(SubsetNode param) {
+		name = param.name;		
+		children.addAll(param.children);
+	}
+	
+   
+    public ObjectMetaData getMetaData() {
+    	return null;	//no metadata implementation for now
+    }
+    public SubsetNode() {
+    }
+
+    public SubsetNode(String name) {
+    	this.name = name;
+    }
+    
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+    public String getName(){
+    	return name;
+    }
+
+	public Object[] getChildren() {
+		return children.toArray();
+	}
+
+	public Object getParent() {
+		return Root.ROOT;
+	}
+
+	public boolean hasChildren() {
+		if (children != null && children.size() > 0) {
+			return true;
+		}
+		return false;
+	}
+
+	public void setChildren(Vector children) {
+		for (int i = 0; i <  children.size(); i++) {
+			Object obj = children.elementAt(i);
+			isValid(obj);
+		}
+		Collections.sort(children);
+		this.children = children;
+	}
+	
+	public void isValid(Object child) {
+		boolean valid = false;
+		if (child instanceof ObjectNode ) {
+			valid = true;
+		}
+		if (!valid) {
+			throw new RuntimeException("Invalid SubsetNode child: " + child.getClass().getName()); //$NON-NLS-1$
+		}
+	}
+	
+	
+	/**
+	 * Finds a child of the SubsetNode with the said name 
+	 * @param name
+	 * @return the TreeNode found. null if none
+	 */
+	public TreeNode find(String name){
+		for (int i = 0; i <  children.size(); i++) {
+			Object obj = children.elementAt(i);
+			if (obj instanceof TreeNode){
+				TreeNode node = (TreeNode) obj;
+				if (name.equals(node.getName())) return node;			
+			}
+		}
+		return null;
+	}
+	
+	public boolean add(ObjectNode object){
+		if (children.indexOf(object) >= 0) return false;
+		children.add(object);
+		return true;
+	}
+
+	public boolean addReplace(ObjectNode object){
+		children.remove(object);
+		return add(object);
+	}
+	
+	public boolean remove(ObjectNode object){
+		return children.remove(object);
+	}
+	
+	public void exportXML(Element root) {
+		Element sub = MetaDataXMLInterface.createElementText(root,Messages.getString("ExportXMLAction.Subset"), ""); //$NON-NLS-1$ //$NON-NLS-2$
+		MetaDataXMLInterface.createElementText(sub,Messages.getString("ExportXMLAction.SubsetName"), getName()); //$NON-NLS-1$
+		for (int i = 0; i <  children.size(); i++) {
+			Object obj = children.elementAt(i);
+			if (obj instanceof ObjectNode){
+				((ObjectNode) obj).exportXML(sub);	
+			}
+		}
+		
+	}
+
+	/**
+	 * Imports a set of XML tags (parsed into a XMLDocument) into a Subset
+	 * @param root	Document to get the data from
+	 * @param replace	True if you want to replace already-existing elements with the same name, false if not
+	 */
+	public void importXML(Element root, boolean replace) {
+		if (replace) {
+			String name = MetaDataXMLInterface.getElementText(root, Messages.getString("ExportXMLAction.SubsetName")); //$NON-NLS-1$
+			if (name == "") return;	 //$NON-NLS-1$
+			setName(name);
+		}
+		importElementXML(root, replace, Messages.getString("ExportXMLAction.Table")); //$NON-NLS-1$
+		importElementXML(root, replace, Messages.getString("ExportXMLAction.View")); //$NON-NLS-1$
+
+	}
+
+
+	/**
+	 * 
+	 * Imports one type of element from a XMLDocument (possibly a part of one) into a Subset
+	 * @param root Document to get the data from
+	 * @param replace True if you want to replace already-existing elements with the same name, false if not
+	 * @param type The type of element to import, has to correspond with the XML tag
+	 */
+	private void importElementXML(Element root, boolean replace, String type) {
+		// We get all the tags named as the type
+		NodeList tables = root.getElementsByTagName(type); 
+		for (int i = 0; i < tables.getLength(); i++) {
+			Element table = (Element) tables.item(i);
+			ObjectNode objectNode = ObjectNode.importXML(table, this);
+			if (replace)addReplace(objectNode);
+			else add(objectNode);	
+		}
+	}
+
+}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/TableNode.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/TableNode.java
index 1d22537..96baa0f 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/TableNode.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/TableNode.java
@@ -1,46 +1,76 @@
 package net.sourceforge.phpdt.sql.view.bookmark;
 
-import java.util.Vector;
+import java.net.MalformedURLException;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import org.eclipse.swt.graphics.Image;
+
+import net.sourceforge.phpdt.sql.adapters.AdapterFactory;
+import net.sourceforge.phpdt.sql.adapters.DatabaseAdapter;
+import net.sourceforge.phpdt.sql.adapters.NoSuchAdapterException;
+import net.sourceforge.phpdt.sql.model.Table;
+import net.sourceforge.phpdt.sql.sql.MultiSQLServer;
+import net.sourceforge.phpdt.sql.sql.metadata.ObjectMetaData;
 
 public class TableNode implements TreeNode, Comparable {
-	private Vector metadata;
-    private BookmarkNode parent;
-    private String name;
-    private int size = -1;
-
-    public TableNode(BookmarkNode parent, String tableName) {
-    	this.parent = parent;
-    	this.name = tableName;
-    }
+	private ObjectMetaData metadata = null;
+	private TreeNode parent = null;
+    private Table table;
+    private boolean sizeVisible;
+	
+	public TableNode(TreeNode parent, boolean sizeVisible, Table table) {
+		this.parent = parent;
+		this.table = table;
+        this.sizeVisible = sizeVisible;
+	}
 
 	public Object[] getChildren() {
-		if (metadata != null) {
-			return metadata.toArray();
+		obtainMetaData();
+		if (metadata != null && ColumnMetaData.getColumnsMetaData(metadata, this) != null) {
+			return ColumnMetaData.getColumnsMetaData(metadata, this).toArray();
 		} else {
 			return Root.EMPTY_ARRAY;
 		}
 	}
 
+	private void obtainMetaData() {
+		Connection con = getBookmark().getConnection();
+		if (metadata == null) try {
+			metadata = MultiSQLServer.getInstance().getObjectMetadata(con, this);
+		} catch (SQLException e) {
+			metadata = null;
+			e.printStackTrace();
+		} 
+	}
+
 	public Object getParent() {
 		return parent;
 	}
 
+	public DatabaseAdapter getAdapter() throws NoSuchAdapterException {
+			return AdapterFactory.getInstance().getAdapter(getBookmark().getType());
+	}
+
 	public boolean hasChildren() {
-		return (metadata != null) && (metadata.size() > 0);
+		// If it has no metadata set, we suppose it can have some, and return true anyway
+		if (metadata == null) return true;
+		return (ColumnMetaData.getColumnsMetaData(metadata, this) != null && 
+				ColumnMetaData.getColumnsMetaData(metadata, this).size() > 0);
 	}
 	
 	public String getName() {
-		return name;
+		return this.table.getQualifiedName();
 	}
 	
 	public String toString() {
-		return name;
+		return getName();
 	}
 
 	public int compareTo(Object o) {
 		if (o instanceof TableNode) {
 			TableNode node = (TableNode) o;
-			return name.compareTo(node.getName());
+			return getName().compareTo(node.getName());
 		} else if (o instanceof ViewNode ||
 		  o instanceof SequenceNode) {
 			return -1;
@@ -49,14 +79,50 @@ public class TableNode implements TreeNode, Comparable {
 	}
 	
 	public int getSize() {
-		return size;
+        return this.table.getSize();
 	}
 
-	public void setSize(int size) {
-		this.size = size;
+	public void setObjectMetadata(ObjectMetaData metadata) {
+		this.metadata = metadata;
+	}
+	/**
+	 * @return
+	 */
+	public ObjectMetaData getMetaData() {
+		if (metadata == null) obtainMetaData();
+		return metadata;
+	}
+	/**
+	 * @return an Image object to appear in the view
+	 * @throws MalformedURLException
+	 */
+	public Image getImage() throws MalformedURLException {
+		if (parent instanceof GroupNode){
+			GroupNode group = (GroupNode) parent;
+			return group.getImage();
+		} else
+			return null;
 	}
 
-	public void setMetadata(Vector metadata) {
-		this.metadata = metadata;
+	/**
+	 * @return the associated BookmarkNode, by navigating upwards in the tree 
+	 */
+	public BookmarkNode getBookmark() {
+		TreeNode node = parent;
+		while (!( node instanceof BookmarkNode))
+		{
+			node = (TreeNode) node.getParent();
+		}
+		return (BookmarkNode) node;
 	}
+    /**
+     * @return
+     */
+    public boolean isSizeVisible() {
+        return this.sizeVisible;
+    }
+    
+    public Table getTable() {
+        return this.table;
+    }
 }
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/TreeNode.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/TreeNode.java
index f9d6a00..b920d2f 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/TreeNode.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/TreeNode.java
@@ -1,15 +1,15 @@
 package net.sourceforge.phpdt.sql.view.bookmark;
 
+import net.sourceforge.phpdt.sql.sql.metadata.ObjectMetaData;
 /**
  * @author root
- *
- * To change this generated comment edit the template variable "typecomment":
- * Window>Preferences>Java>Templates.
- * To enable and disable the creation of type comments go to
- * Window>Preferences>Java>Code Generation.
+ * Interface for all nodes of the internal tree of data
  */
 public interface TreeNode {
 	public Object[] getChildren();
 	public Object getParent();
 	public boolean hasChildren();
+	public String getName();
+	public ObjectMetaData getMetaData();
+
 }
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/ViewNode.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/ViewNode.java
index 2398e1d..d178256 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/ViewNode.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/bookmark/ViewNode.java
@@ -1,33 +1,49 @@
 package net.sourceforge.phpdt.sql.view.bookmark;
 
-import java.util.Vector;
+import java.net.MalformedURLException;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import org.eclipse.swt.graphics.Image;
+
+import net.sourceforge.phpdt.sql.adapters.AdapterFactory;
+import net.sourceforge.phpdt.sql.adapters.DatabaseAdapter;
+import net.sourceforge.phpdt.sql.adapters.NoSuchAdapterException;
+import net.sourceforge.phpdt.sql.model.View;
+import net.sourceforge.phpdt.sql.sql.MultiSQLServer;
+import net.sourceforge.phpdt.sql.sql.metadata.ObjectMetaData;
 
 public class ViewNode implements TreeNode, Comparable  {
-    private BookmarkNode parent;
-    private Vector metadata;
-    private String name;
-    private int size = -1;
-    public ViewNode(BookmarkNode parent, String tableName) {
-    	this.parent = parent;
-    	this.name = tableName;
-    }
+	private ObjectMetaData metadata = null;
+	private TreeNode parent;
+    private View view;
+    private boolean sizeVisible;
+	
+	public ViewNode(TreeNode parent, boolean sizeVisible, View view) {
+		this.parent = parent;
+		this.view = view;
+	}
 
 	public Object getParent() {
 		return parent;
 	}
 
+	public DatabaseAdapter getAdapter()  throws NoSuchAdapterException {
+			return AdapterFactory.getInstance().getAdapter(getBookmark().getType());
+	}
+
 	public String getName() {
-		return name;
+		return this.view.getQualifiedName();
 	}
 	
 	public String toString() {
-		return name;
+		return getName();
 	}
 
 	public int compareTo(Object o) {
 		if (o instanceof ViewNode) {
 			ViewNode node = (ViewNode) o;
-			return name.compareTo(node.getName());
+			return getName().compareTo(node.getName());
 		} else if (o instanceof SequenceNode) {
 			return -1;
 		} else if (o instanceof TreeNode) {
@@ -37,26 +53,78 @@ public class ViewNode implements TreeNode, Comparable  {
 	}
 	
 	public int getSize() {
-		return size;
-	}
-
-	public void setSize(int size) {
-		this.size = size;
+		return this.view.getSize();
 	}
 
 	public boolean hasChildren() {
-		return (metadata != null) && (metadata.size() > 0);
+		// If it has no metadata set, we suppose it can have some, and return true
+		if (metadata == null) return true;
+		return (ColumnMetaData.getColumnsMetaData(metadata, this) != null && 
+				ColumnMetaData.getColumnsMetaData(metadata, this).size() > 0);
 	}
 
 	public Object[] getChildren() {
-		if (metadata != null) {
-			return metadata.toArray();
+		obtainMetaData();
+		if (metadata != null && ColumnMetaData.getColumnsMetaData(metadata, this) != null) {
+			return ColumnMetaData.getColumnsMetaData(metadata, this).toArray();
 		} else {
 			return Root.EMPTY_ARRAY;
 		}
 	}
 	
-	public void setMetadata(Vector metadata) {
+	public void setObjectMetadata(ObjectMetaData metadata) {
 		this.metadata = metadata;
 	}
+	
+	/**
+	 * @return
+	 */
+	public ObjectMetaData getMetaData() {
+		if (metadata == null) obtainMetaData();
+		return metadata;
+	}
+
+	/**
+	 * Checks if there is metadata present, and if not, tries to get it
+	 */
+	private void obtainMetaData() {
+		Connection con = getBookmark().getConnection();
+		if (metadata == null) try {
+			metadata = MultiSQLServer.getInstance().getObjectMetadata(con, this);
+		} catch (SQLException e) {
+			metadata = null;
+			e.printStackTrace();
+		} 
+	}
+	/**
+	 * @return an Image object to appear in the view
+	 * @throws MalformedURLException
+	 */
+	public Image getImage() throws MalformedURLException {
+		if (parent instanceof GroupNode){
+			GroupNode group = (GroupNode) parent;
+			return group.getImage();
+		} else
+			return null;
+	}
+
+	/**
+	 * @return the associated BookmarkNode, by navigating upwards in the tree 
+	 */
+	public BookmarkNode getBookmark() {
+		TreeNode node = parent;
+		while (!( node instanceof BookmarkNode))
+		{
+			node = (TreeNode) node.getParent();
+		}
+		return (BookmarkNode) node;
+	}
+
+    /**
+     * @return
+     */
+    public boolean isSizeVisible() {
+        return sizeVisible;
+    }
+
 }
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/query/QueryNode.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/query/QueryNode.java
index 2069a9b..8b12e4f 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/query/QueryNode.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/query/QueryNode.java
@@ -1,5 +1,6 @@
 package net.sourceforge.phpdt.sql.view.query;
 
+import net.sourceforge.phpdt.sql.sql.metadata.ObjectMetaData;
 import net.sourceforge.phpdt.sql.view.bookmark.Root;
 import net.sourceforge.phpdt.sql.view.bookmark.TreeNode;
 
@@ -19,10 +20,15 @@ public class QueryNode implements TreeNode {
 			trimmed = true;
 		}
 		if (trimmed) {
-			query += "...->";
+			query += "...->"; //$NON-NLS-1$
 		}
 		name = query;
 	}
+
+	public ObjectMetaData getMetaData() {
+		 return null;	//no metadata implementation for now
+	 }
+
 	public String getName() {
 		return name;
 	}
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/tableview/TableAdapter.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/tableview/TableAdapter.java
index 4752c37..3a513ca 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/tableview/TableAdapter.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/tableview/TableAdapter.java
@@ -2,43 +2,42 @@ package net.sourceforge.phpdt.sql.view.tableview;
 
 import java.util.Vector;
 
-import net.sourceforge.phpdt.sql.IConstants;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+
+import net.sourceforge.phpdt.sql.Messages;
 import net.sourceforge.phpdt.sql.adapters.AdapterFactory;
 import net.sourceforge.phpdt.sql.adapters.DatabaseAdapter;
 import net.sourceforge.phpdt.sql.adapters.DatabaseInfo;
-import net.sourceforge.phpdt.sql.adapters.NoSuchAdapterException;
-import net.sourceforge.phpdt.sql.bookmarks.Bookmark;
 import net.sourceforge.phpdt.sql.sql.FilterSort;
-import net.sourceforge.phpdt.sql.sql.MultiSQLServer;
 import net.sourceforge.phpdt.sql.sql.SQLHelper;
 import net.sourceforge.phpdt.sql.sql.SQLResults;
+import net.sourceforge.phpdt.sql.view.bookmark.BookmarkNode;
 
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
-import org.eclipse.swt.widgets.TableItem;
-
-public class TableAdapter implements IConstants {
-	public static final String DEFAULT = "";
-	public static final String UTF_8 = "UTF-8";
-	public static final String UTF_16 = "UTF-16";
+public class TableAdapter {
+	public static final String DEFAULT = ""; //$NON-NLS-1$
+	public static final String UTF_8 = "UTF-8"; //$NON-NLS-1$
+	public static final String UTF_16 = "UTF-16"; //$NON-NLS-1$
 	
 	private int pageSize = DefaultSizes.PAGE_SIZE;
 	private int maxColumnSize = DefaultSizes.MAX_COLUMN_SIZE;
-	private SQLHelper helper = new SQLHelper();
 	private FilterSort extra = new FilterSort();
 	private int offset = 1;
 	private int totalSize = -1;
 	private Vector rows = new Vector();
 	private Vector columnNames = new Vector();
 	private boolean hasMore = false;
-		
+	
+	private BookmarkNode bookmark = null;	
 	private String table;
 	private String query;
 	
-	private String encoding = "";
+	private String encoding = ""; //$NON-NLS-1$
 	
-	private TableAdapter() {
+	private TableAdapter(BookmarkNode bookmark) {
+		this.bookmark = bookmark;
 	}
 	public void fullMode() {
 		offset = 1;
@@ -48,20 +47,20 @@ public class TableAdapter implements IConstants {
 		offset = 1;
 		pageSize = DefaultSizes.PAGE_SIZE;
 	}
-	public static TableAdapter createFromQuery(SQLResults results) {
-		TableAdapter retVal = new TableAdapter();
+	public static TableAdapter createFromQuery(BookmarkNode bookmark, SQLResults results) {
+		TableAdapter retVal = new TableAdapter(bookmark);
 		retVal.setQuery(results.getQuery());
 		retVal.setData(results);
 		return retVal;
 	}
-	public static TableAdapter createFromTable(String table) {
-		TableAdapter retVal = new TableAdapter();
+	public static TableAdapter createFromTable(BookmarkNode bookmark, String table) {
+		TableAdapter retVal = new TableAdapter(bookmark);
 		retVal.setTable(table);
 		return retVal;
 	}
 	private void loadSize() {
 		if (table != null) {
-			totalSize = helper.getSize(getTableCountQuery());
+			totalSize = SQLHelper.getSize(bookmark, getTableCountQuery());
 		}
 	}
 	public int getStartIndex() {
@@ -105,22 +104,16 @@ public class TableAdapter implements IConstants {
 		return false;
 	}
 	public String getTableCountQuery() {
-		if (table != null) {
-			Bookmark current = MultiSQLServer.getInstance().getConnected();
-			return SQLHelper.getFullTableName(current, table);
+		if (table != null && bookmark != null) {
+			return SQLHelper.getFullTableName(bookmark, table);
 		}
 		return query;
 	}
 	public String getQuery() {
 		if (table != null) {
-			MultiSQLServer server = MultiSQLServer.getInstance();
-			Bookmark current = server.getConnected();
-			try {
-				DatabaseAdapter adapter = AdapterFactory.getInstance().getAdapter(current.getType());
-				return adapter.getShowTableQuery(DatabaseInfo.create(current), table) + extra.toString();
-			} catch (NoSuchAdapterException e) {
-				throw new RuntimeException(e.toString());
-			}
+			DatabaseAdapter adapter = AdapterFactory.getInstance().getAdapter(bookmark.getType());
+			if (adapter == null) throw new RuntimeException();
+			else return adapter.getShowTableQuery(DatabaseInfo.create(bookmark), table) + extra.toString();
 		}
 		return query;
 	}
@@ -132,10 +125,8 @@ public class TableAdapter implements IConstants {
 			}
 		}
 		String query = getQuery();
-    if (DEBUG) {
-		System.out.println(offset + " to " + (offset + pageSize - 1));
-    }
-		SQLResults results = helper.getResults(query, offset, offset + pageSize - 1, maxColumnSize, encoding);
+		System.out.println(offset + Messages.getString("TableAdapter.to") + (offset + pageSize - 1)); //$NON-NLS-1$
+		SQLResults results = SQLHelper.getResults(bookmark, query, offset, offset + pageSize - 1, maxColumnSize, encoding);
 		setData(results);
 	}
 	public void resetOffset() {
@@ -208,18 +199,25 @@ public class TableAdapter implements IConstants {
 		this.encoding = encoding;
 	}
 	public String getStatusString() {
-		String status = getStartIndex() + " to " + getEndIndex() + " of " +
+		String status = getStartIndex() + Messages.getString("TableAdapter.to") + getEndIndex() + Messages.getString("TableAdapter.of") + //$NON-NLS-1$ //$NON-NLS-2$
 				getTotalSize();
 		if (!encoding.equals(DEFAULT)) {
-			status += " (" + encoding + ")";
+			status += " (" + encoding + ")"; //$NON-NLS-1$ //$NON-NLS-2$
 		}
 		String filterText = extra.toString();
-		if (!filterText.equals("")) {
-			status += " (" + filterText + ")";
+		if (!filterText.equals("")) { //$NON-NLS-1$
+			status += " (" + filterText + ")"; //$NON-NLS-1$ //$NON-NLS-2$
 		}
 		if (pageSize == Integer.MAX_VALUE) {
-			status += " (FULL)";
+			status += Messages.getString("TableAdapter.full"); //$NON-NLS-1$
 		}
 		return status;
 	}
+	/**
+	 * @return
+	 */
+	public BookmarkNode getBookmark() {
+		return bookmark;
+	}
+
 }
\ No newline at end of file
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/BookmarkWizard.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/BookmarkWizard.java
index 9bdf6db..e5fe89e 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/BookmarkWizard.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/BookmarkWizard.java
@@ -1,12 +1,5 @@
 package net.sourceforge.phpdt.sql.wizards;
 
-import net.sourceforge.phpdt.sql.IConstants;
-import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
-import net.sourceforge.phpdt.sql.adapters.AdapterFactory;
-import net.sourceforge.phpdt.sql.adapters.DriverInfo;
-import net.sourceforge.phpdt.sql.view.BookmarkView;
-import net.sourceforge.phpdt.sql.view.bookmark.BookmarkNode;
-
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.wizard.Wizard;
 import org.eclipse.jface.wizard.WizardPage;
@@ -22,272 +15,266 @@ import org.eclipse.swt.widgets.FileDialog;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
-public class BookmarkWizard extends Wizard implements IConstants {
-  BookmarkPage mainPage;
-
-  private BookmarkNode current;
-
-  public void init(BookmarkNode selection) {
-    if (DEBUG) {
-      System.out.println("Initing workbench");
-    }
-    this.current = selection;
-    setWindowTitle("New Bookmark");
-  }
+import net.sourceforge.phpdt.sql.Messages;
+import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
+import net.sourceforge.phpdt.sql.adapters.AdapterFactory;
+import net.sourceforge.phpdt.sql.adapters.DriverInfo;
+import net.sourceforge.phpdt.sql.view.BookmarkView;
+import net.sourceforge.phpdt.sql.view.bookmark.BookmarkNode;
 
-  public void init() {
-    if (DEBUG) {
-      System.out.println("Initing workbench");
-    }
-    current = null;
-    setWindowTitle("New Bookmark");
-  }
+public class BookmarkWizard extends Wizard {
+	BookmarkPage mainPage;
 
-  public boolean performFinish() {
-    if (DEBUG) {
-      System.out.println("perform finish workbench");
-    }
-    mainPage.performFinish();
-    return true;
-  }
+	private BookmarkNode current;
 
-  public void addPages() {
-    if (DEBUG) {
-      System.out.println("adding pages");
-    }
-    if (current != null) {
-      mainPage = new BookmarkPage("Testing...", current);
-    } else {
-      mainPage = new BookmarkPage("Testing...");
-    }
-    addPage(mainPage);
-    if (DEBUG) {
-      System.out.println("adding pages");
-    }
-  }
+	public void init(BookmarkNode selection) {
+		System.out.println("Initing workbench"); //$NON-NLS-1$
+		this.current = selection;
+		setWindowTitle(Messages.getString("BookmarkWizard.NewBookmark")); //$NON-NLS-1$
+	}
+	public void init() {
+		System.out.println("Initing workbench"); //$NON-NLS-1$
+		current = null;
+		setWindowTitle(Messages.getString("BookmarkWizard.NewBookmark")); //$NON-NLS-1$
+	}
+	public boolean performFinish() {
+		System.out.println("perform finish workbench"); //$NON-NLS-1$
+		mainPage.performFinish();
+		return true;
+	}
+	public void addPages() {
+		System.out.println("adding pages"); //$NON-NLS-1$
+		if (current != null) {
+			mainPage = new BookmarkPage(Messages.getString("BookmarkWizard.Testing"), current); //$NON-NLS-1$
+		} else {
+			mainPage = new BookmarkPage(Messages.getString("BookmarkWizard.Testing")); //$NON-NLS-1$
+		}
+		addPage(mainPage);
+		System.out.println("adding pages"); //$NON-NLS-1$
+	}
 }
 
-class BookmarkPage extends WizardPage implements IConstants {
-  public static final String ADD = "ADD";
-  String action = ADD;
-  Text name;
-  Text username;
-  Text password;
-  Text schema;
-  Text connect;
-  Text driver;
-  //List driverList;
-  Combo type;
-  Text driverFile;
-
-  BookmarkNode initialData = null;
+class BookmarkPage extends WizardPage {
+	public static final String ADD = "ADD"; //$NON-NLS-1$
+	String action = ADD;
+	Text name;
+	Text username;
+	Text password;
+	Text schema;
+	Text connect;
+	Text driver;
+	//List driverList;
+	Combo type;
+	Text driverFile;
+	private IPreferenceStore fStore = 	PHPEclipseSQLPlugin.getDefault().getPreferenceStore();
 
-  FileDialog dialog;
+	BookmarkNode initialData = null;
 
-  DriverInfo[] drivers = AdapterFactory.getInstance().getDriverList();
-  /**
-   * Constructor for BookmarkPage.
-   * @param pageName
-   */
-  public BookmarkPage(String pageName) {
-    super(pageName);
-    initialData = null;
-  }
-  /**
-   * Constructor for BookmarkPage.
-   * @param pageName
-   */
-  public BookmarkPage(String pageName, BookmarkNode bookmark) {
-    super(pageName);
-    this.initialData = bookmark;
-  }
+	FileDialog dialog;
 
-  public void createControl(Composite parent) {
-    if (DEBUG) {
-      System.out.println("page create control");
-    }
-    dialog = new FileDialog(getContainer().getShell(), SWT.OPEN);
-    dialog.setFilterExtensions(new String[] { "*.jar", "*.zip", "*.*" });
-    dialog.setFilterNames(
-      new String[] {
-        "Jar Files (*.jar)",
-        "Zip Files (*.zip)",
-        "All Files (*.*)" });
-    Composite container = new Composite(parent, SWT.NULL);
-    GridLayout layout = new GridLayout();
-    container.setLayout(layout);
-    layout.numColumns = 2;
-    layout.verticalSpacing = 9;
+	DriverInfo[] drivers = AdapterFactory.getInstance().getDriverList();
+	/**
+	 * Constructor for BookmarkPage.
+	 * @param pageName
+	 */
+	public BookmarkPage(String pageName) {
+		super(pageName);
+		initialData = null;
+	}
+	/**
+	 * Constructor for BookmarkPage.
+	 * @param pageName
+	 */
+	public BookmarkPage(String pageName, BookmarkNode bookmark) {
+		super(pageName);
+		this.initialData = bookmark;
+	}
 
-    Label label = new Label(container, SWT.NULL);
-    label.setText("*Bookmark Name");
-    name = new Text(container, SWT.BORDER | SWT.SINGLE);
-    GridData fullHorizontal = new GridData();
-    fullHorizontal.horizontalAlignment = GridData.FILL;
-    name.setLayoutData(fullHorizontal);
+	public void createControl(Composite parent) {
+		System.out.println("page create control"); //$NON-NLS-1$
+		dialog = new FileDialog(getContainer().getShell(), SWT.OPEN);
+		dialog.setFilterExtensions(new String[]{"*.jar", "*.zip","*.*"}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		dialog.setFilterNames(new String[]{Messages.getString("BookmarkWizard.JarFiles"),Messages.getString("BookmarkWizard.ZipFiles"), Messages.getString("BookmarkWizard.AllFiles")}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		Composite container = new Composite(parent, SWT.NULL);
+		GridLayout layout = new GridLayout();
+		container.setLayout(layout);
+		layout.numColumns = 2;
+		layout.verticalSpacing = 9;
 
-    label = new Label(container, SWT.NULL);
-    label.setText("*Username");
-    username = new Text(container, SWT.BORDER | SWT.SINGLE);
-    fullHorizontal = new GridData();
-    fullHorizontal.horizontalAlignment = GridData.FILL;
-    username.setLayoutData(fullHorizontal);
 
-    label = new Label(container, SWT.NULL);
-    label.setText("*Password");
-    password = new Text(container, SWT.BORDER | SWT.SINGLE);
-    password.setEchoChar('*');
-    fullHorizontal = new GridData();
-    fullHorizontal.horizontalAlignment = GridData.FILL;
-    password.setLayoutData(fullHorizontal);
+		Label label = new Label(container, SWT.NULL);
+		label.setText(Messages.getString("BookmarkWizard.BookmarkNameAst")); //$NON-NLS-1$
+		name = new Text(container, SWT.BORDER | SWT.SINGLE);
+ 		GridData fullHorizontal = new GridData();
+		fullHorizontal.horizontalAlignment = GridData.FILL;
+		name.setLayoutData(fullHorizontal);
 
-    label = new Label(container, SWT.NULL);
-    label.setText("Schema (optional)");
-    schema = new Text(container, SWT.BORDER | SWT.SINGLE);
-    fullHorizontal = new GridData();
-    fullHorizontal.horizontalAlignment = GridData.FILL;
-    schema.setLayoutData(fullHorizontal);
+		label = new Label(container, SWT.NULL);
+		label.setText(Messages.getString("BookmarkWizard.UsernameAst")); //$NON-NLS-1$
+		username = new Text(container, SWT.BORDER | SWT.SINGLE);
+ 		fullHorizontal = new GridData();
+		fullHorizontal.horizontalAlignment = GridData.FILL;
+		username.setLayoutData(fullHorizontal);
 
-    label = new Label(container, SWT.NULL);
-    label.setText("*Connect");
-    connect = new Text(container, SWT.BORDER | SWT.SINGLE);
-    fullHorizontal = new GridData();
-    fullHorizontal.horizontalAlignment = GridData.FILL;
-    connect.setLayoutData(fullHorizontal);
+		label = new Label(container, SWT.NULL);
+		label.setText(Messages.getString("BookmarkWizard.PasswordAst")); //$NON-NLS-1$
+		password = new Text(container, SWT.BORDER | SWT.SINGLE);
+		password.setEchoChar('*');
+ 		fullHorizontal = new GridData();
+		fullHorizontal.horizontalAlignment = GridData.FILL;
+		password.setLayoutData(fullHorizontal);
+ 
+		label = new Label(container, SWT.NULL);
+		label.setText(Messages.getString("BookmarkWizard.Schema")); //$NON-NLS-1$
+		schema = new Text(container, SWT.BORDER | SWT.SINGLE);
+ 		fullHorizontal = new GridData();
+		fullHorizontal.horizontalAlignment = GridData.FILL;
+		schema.setLayoutData(fullHorizontal);
 
-    label = new Label(container, SWT.NULL);
-    label.setText("*Driver");
-    driver = new Text(container, SWT.BORDER | SWT.SINGLE);
-    fullHorizontal = new GridData();
-    fullHorizontal.horizontalAlignment = GridData.FILL;
-    driver.setLayoutData(fullHorizontal);
+		label = new Label(container, SWT.NULL);
+		label.setText(Messages.getString("BookmarkWizard.ConnectAst")); //$NON-NLS-1$
+		connect = new Text(container, SWT.BORDER | SWT.SINGLE);
+ 		fullHorizontal = new GridData();
+		fullHorizontal.horizontalAlignment = GridData.FILL;
+		connect.setLayoutData(fullHorizontal);
 
-    //label = new Label(container, SWT.NULL);
-    //fullHorizontal = new GridData();
-    //fullHorizontal.verticalAlignment = GridData.VERTICAL_ALIGN_BEGINNING;
-    //fullHorizontal.verticalSpan = 3;
-    //label.setLayoutData(fullHorizontal);
-    //label.setText("(Drivers Found in File)");
-    /*driverList = new List(container, SWT.SINGLE);
-    	fullHorizontal = new GridData();
-    fullHorizontal.horizontalAlignment = GridData.FILL;
-    fullHorizontal.verticalAlignment = GridData.FILL;
-    fullHorizontal.verticalSpan = 3;
-    driverList.setLayoutData(fullHorizontal);
-    driverList.addSelectionListener(new SelectionListener() {
-    	public void widgetDefaultSelected(SelectionEvent e) {
-    	}
-    	public void widgetSelected(SelectionEvent e) {
-    		String[] selection = driverList.getSelection();
-    		if (selection != null && selection.length > 0) {
-    			driver.setText(selection[0]);
-    		}
-    	}
-    });*/
+		label = new Label(container, SWT.NULL);
+		label.setText(Messages.getString("BookmarkWizard.DriverAst")); //$NON-NLS-1$
+		driver = new Text(container, SWT.BORDER | SWT.SINGLE);
+ 		fullHorizontal = new GridData();
+		fullHorizontal.horizontalAlignment = GridData.FILL;
+		driver.setLayoutData(fullHorizontal);
 
-    label = new Label(container, SWT.NULL);
-    label.setText("*Type");
-    type = new Combo(container, SWT.SIMPLE | SWT.DROP_DOWN | SWT.READ_ONLY);
-    String driverNames[] = new String[drivers.length];
-    for (int i = 0; i < drivers.length; i++) {
-      driverNames[i] = drivers[i].getDisplayName();
-    }
-    type.setItems(driverNames);
-    type.select(0);
-    fullHorizontal = new GridData();
-    fullHorizontal.horizontalAlignment = GridData.FILL;
-    type.setLayoutData(fullHorizontal);
+		//label = new Label(container, SWT.NULL);
+ 		//fullHorizontal = new GridData();
+ 		//fullHorizontal.verticalAlignment = GridData.VERTICAL_ALIGN_BEGINNING;
+		//fullHorizontal.verticalSpan = 3;
+		//label.setLayoutData(fullHorizontal);
+		//label.setText("(Drivers Found in File)");
+		/*driverList = new List(container, SWT.SINGLE);
+ 		fullHorizontal = new GridData();
+		fullHorizontal.horizontalAlignment = GridData.FILL;
+		fullHorizontal.verticalAlignment = GridData.FILL;
+		fullHorizontal.verticalSpan = 3;
+		driverList.setLayoutData(fullHorizontal);
+		driverList.addSelectionListener(new SelectionListener() {
+			public void widgetDefaultSelected(SelectionEvent e) {
+			}
+			public void widgetSelected(SelectionEvent e) {
+				String[] selection = driverList.getSelection();
+				if (selection != null && selection.length > 0) {
+					driver.setText(selection[0]);
+				}
+			}
+		});*/
 
-    label = new Label(container, SWT.NULL);
-    label.setText("*Driver Filename");
-    driverFile = new Text(container, SWT.BORDER | SWT.SINGLE);
-    fullHorizontal = new GridData();
-    fullHorizontal.horizontalAlignment = GridData.FILL;
-    driverFile.setLayoutData(fullHorizontal);
+		label = new Label(container, SWT.NULL);
+		label.setText(Messages.getString("BookmarkWizard.TypeAst")); //$NON-NLS-1$
+		type = new Combo(container, SWT.SIMPLE | SWT.DROP_DOWN | SWT.READ_ONLY);
+		String driverNames[] = new String[drivers.length];
+		for (int i = 0; i < drivers.length; i++) {
+			driverNames[i] = drivers[i].getDisplayName();
+		}
+		type.setItems(driverNames);
+		type.select(0);
+ 		fullHorizontal = new GridData();
+		fullHorizontal.horizontalAlignment = GridData.FILL;
+		type.setLayoutData(fullHorizontal);
 
-    Button button = new Button(container, SWT.PUSH);
-    button.setText("Browse...");
+		label = new Label(container, SWT.NULL);
+		label.setText(Messages.getString("BookmarkWizard.DriverFilenameAst")); //$NON-NLS-1$
+		driverFile = new Text(container, SWT.BORDER | SWT.SINGLE);
+ 		fullHorizontal = new GridData();
+		fullHorizontal.horizontalAlignment = GridData.FILL;
+		driverFile.setLayoutData(fullHorizontal);
 
-    button.addSelectionListener(new SelectionListener() {
-      public void widgetDefaultSelected(SelectionEvent e) {
-      }
-      public void widgetSelected(SelectionEvent e) {
-        String filename = dialog.open();
-        if (filename != null) {
-          driverFile.setText(filename);
-        }
-      }
-    });
-    if (initialData != null) {
-      name.setText(initialData.getName());
-      username.setText(initialData.getUsername());
-      password.setText(initialData.getPassword());
-      schema.setText(initialData.getSchema());
-      connect.setText(initialData.getConnect());
-      driver.setText(initialData.getDriver());
-      String typeData = initialData.getType();
-      int selectedIndex = 0;
-      for (int i = 0; i < drivers.length; i++) {
-        if (typeData.equals(drivers[i].getDriverType())) {
-          selectedIndex = i;
-        }
-      }
-      type.select(selectedIndex);
-      driverFile.setText(initialData.getDriverFile());
-      updateDriverList();
-    } else {
+		Button button = new Button(container, SWT.PUSH);
+		button.setText(Messages.getString("BookmarkWizard.Browse")); //$NON-NLS-1$
+		
+		button.addSelectionListener(new SelectionListener() {
+			public void widgetDefaultSelected(SelectionEvent e) {
+			}
+			public void widgetSelected(SelectionEvent e) {
+				String filename = dialog.open();
+				if (filename != null) {
+					driverFile.setText(filename);
+				}
+			}
+		});
+		if (initialData != null) {
+			name.setText(initialData.getName());
+			username.setText(initialData.getUsername());
+			password.setText(initialData.getPassword());
+			schema.setText(initialData.getSchema());
+			connect.setText(initialData.getConnect());
+			driver.setText(initialData.getDriver());
+			String typeData = initialData.getType();
+			int selectedIndex = 0;
+			for (int i = 0; i < drivers.length; i++) {
+				if (typeData.equals(drivers[i].getDriverType())) {
+					selectedIndex = i;
+				}
+			}
+			type.select(selectedIndex);
+			driverFile.setText(initialData.getDriverFile());
+			updateDriverList();
+		}else {
 
-      IPreferenceStore fStore =
-        PHPEclipseSQLPlugin.getDefault().getPreferenceStore();
-      username.setText(fStore.getString("phpeclipse.sql.username.connect"));
-      connect.setText(fStore.getString("phpeclipse.sql.connect.connect"));
-      driver.setText(fStore.getString("phpeclipse.sql.driver.connect"));
-      String typeData = fStore.getString("phpeclipse.sql.type.connect");
-      int selectedIndex = 0;
-      for (int i = 0; i < drivers.length; i++) {
-        if (typeData.equals(drivers[i].getDisplayName())) {
-          selectedIndex = i;
-        }
-      }
-      type.select(selectedIndex);
-      driverFile.setText(fStore.getString("phpeclipse.sql.filename.connect"));
-      //   updateDriverList();
-    }
-    setControl(container);
+		username.setText(fStore.getString("phpeclipse.sql.username.connect"));
+		connect.setText(fStore.getString("phpeclipse.sql.connect.connect"));
+		driver.setText(fStore.getString("phpeclipse.sql.driver.connect"));
+		String typeData = fStore.getString("phpeclipse.sql.type.connect");
+		int selectedIndex = 0;
+		for (int i = 0; i < drivers.length; i++) {
+			if (typeData.equals(drivers[i].getDisplayName())) {
+				selectedIndex = i;
+			}
+		}
+		type.select(selectedIndex);
+		driverFile.setText(fStore.getString("phpeclipse.sql.filename.connect"));
+	}
+		setControl(container);
 
-    setPageComplete(true);
-  }
-  public void updateDriverList() {
-    /*try {
-    	JarFile file = new JarFile(driverFile.getText());
-    	Enumeration enum = file.entries();
-    	while (enum.hasMoreElements()) {
-    		JarEntry entry = (JarEntry) enum.nextElement();
-    		String className = entry.getName().replace('/', '.');
-    		if (className.endsWith("Driver.class")) {
-    			className = className.substring(0, className.lastIndexOf('.'));
-    			//driverList.add(className);
-    		}
-    	}
-    } catch (IOException ex) {
-    	//driverList.removeAll();
-    }*/
-  }
-  public void performFinish() {
-    if (initialData == null) {
-      initialData = new BookmarkNode();
-    }
-    initialData.setName(name.getText());
-    initialData.setUsername(username.getText());
-    initialData.setPassword(password.getText());
-    initialData.setSchema(schema.getText());
-    initialData.setConnect(connect.getText());
-    initialData.setDriver(driver.getText());
-    int selection = type.getSelectionIndex();
-    if (selection >= 0) {
-      initialData.setType(drivers[selection].getDriverType());
-    }
-    initialData.setDriverFile(driverFile.getText());
-    BookmarkView.getInstance().addNewBookmark(initialData);
-  }
+		setPageComplete(true);
+	}
+	public void updateDriverList() {
+			/*try {
+				JarFile file = new JarFile(driverFile.getText());
+				Enumeration enum = file.entries();
+				while (enum.hasMoreElements()) {
+					JarEntry entry = (JarEntry) enum.nextElement();
+					String className = entry.getName().replace('/', '.');
+					if (className.endsWith("Driver.class")) {
+						className = className.substring(0, className.lastIndexOf('.'));
+						//driverList.add(className);
+					}
+				}
+			} catch (IOException ex) {
+				//driverList.removeAll();
+			}*/
+	}
+	public void performFinish() {
+		if (initialData == null) {
+			initialData = new BookmarkNode();
+		}
+		
+		initialData.setName(name.getText());
+		initialData.setUsername(username.getText());
+		initialData.setPassword(password.getText());
+		initialData.setSchema(schema.getText());
+		initialData.setConnect(connect.getText());
+		initialData.setDriver(driver.getText());
+		int selection = type.getSelectionIndex();
+		if (selection >= 0) {
+			initialData.setType(drivers[selection].getDriverType());
+		}
+		initialData.setDriverFile(driverFile.getText());
+		BookmarkView.getInstance().addNewBookmark(initialData);
+		
+		//PHP Specific section
+		fStore.putValue("phpeclipse.sql.username.connect", username.getText());
+		fStore.putValue("phpeclipse.sql.connect.connect", connect.getText());
+		fStore.putValue("phpeclipse.sql.driver.connect", driver.getText());
+		fStore.putValue("phpeclipse.sql.filename.connect",driverFile.getText());
+	}
 }
\ No newline at end of file
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/DeleteRowPage.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/DeleteRowPage.java
index c16e981..9265126 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/DeleteRowPage.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/DeleteRowPage.java
@@ -13,136 +13,151 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
+import net.sourceforge.phpdt.sql.Messages;
+import net.sourceforge.phpdt.sql.adapters.AdapterFactory;
+import net.sourceforge.phpdt.sql.adapters.DatabaseAdapter;
 import net.sourceforge.phpdt.sql.sql.MultiSQLServer;
 import net.sourceforge.phpdt.sql.sql.TableRow;
+import net.sourceforge.phpdt.sql.sql.metadata.ObjectMetaData;
+import net.sourceforge.phpdt.sql.view.BookmarkView;
+import net.sourceforge.phpdt.sql.view.bookmark.BookmarkNode;
+import net.sourceforge.phpdt.sql.view.bookmark.TreeNode;
 import net.sourceforge.phpdt.sql.view.tableview.TableAdapter;
 
 public class DeleteRowPage extends WizardPage implements SQLPage {
-  TableRow row;
-  String[] columnNames;
-  Text[] values;
-  Button[] whereValues;
-  Label query;
+	TableRow row;
+	String[] columnNames;
+	Text[] values;
+	Button[] whereValues;
+	Text query;
 
-  public DeleteRowPage(String pageName) {
-    super(pageName);
-  }
+	public DeleteRowPage(String pageName) {
+		super(pageName);
+	}
+	
+	public void init(TableRow row, TableAdapter adapter) {
+		this.row = row;
+	}
 
-  public void init(TableRow row, TableAdapter adapter) {
-    this.row = row;
-  }
+	public void createControl(Composite parent) {
+		System.out.println("page create control"); //$NON-NLS-1$
+		Composite container = new Composite(parent, SWT.NULL);
+		GridLayout layout = new GridLayout();
+		container.setLayout(layout);
+		layout.numColumns = 3;
 
-  public void createControl(Composite parent) {
-    if (DEBUG) {
-      System.out.println("page create control");
-    }
-    Composite container = new Composite(parent, SWT.NULL);
-    GridLayout layout = new GridLayout();
-    container.setLayout(layout);
-    int layoutColumns = 3;
-    layout.numColumns = layoutColumns;
+		if (row == null) {
+			System.out.println("Row is null"); //$NON-NLS-1$
+		}
+		if (row.getColumnNames() == null) {
+			System.out.println("Columns are null"); //$NON-NLS-1$
+		}
+		if (row.getTableData() == null) {
+			System.out.println("Data is null"); //$NON-NLS-1$
+		}
+		BookmarkNode bookmark = row.getBookmarkNode();
+		TreeNode node = bookmark.find(row.getTable());
+		ObjectMetaData metadata = null;
+		if (node != null) metadata = node.getMetaData(); 
+		columnNames = row.getColumnNames();
+		String[] data = row.getTableData();
+		for (int i = 0; i < row.getColumnCount(); i++) {
+			System.out.println("data = " + i + "=" + data[i]); //$NON-NLS-1$ //$NON-NLS-2$
+			System.out.println("column = " + i + "=" + columnNames[i]); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		values = new Text[row.getColumnCount()];
+		whereValues = new Button[row.getColumnCount()];
+		new Label(container, SWT.NULL).setText(Messages.getString("DeleteRowPage.ColumnName")); //$NON-NLS-1$
+		new Label(container, SWT.NULL).setText(Messages.getString("DeleteRowPage.Value")); //$NON-NLS-1$
+		new Label(container, SWT.NULL).setText(Messages.getString("DeleteRowPage.IncludeIn")); //$NON-NLS-1$
+		for (int i = 0; i < row.getColumnCount(); i++) {
+			Label label = new Label(container, SWT.NULL);
+			label.setText(columnNames[i]);
+			values[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
+			GridData fullHorizontal = new GridData();
+			fullHorizontal.horizontalAlignment = GridData.FILL;
+			values[i].setLayoutData(fullHorizontal);
+			values[i].setText(data[i]);
 
-    if (DEBUG) {
-      if (row == null) {
-        System.out.println("Row is null");
-      }
+			values[i].addModifyListener(new ModifyListener() {
+				public void modifyText(ModifyEvent e) {
+					updateQuery();
+				}				
+			});
+			
+			whereValues[i] = new Button(container, SWT.CHECK);
+			whereValues[i].setText(Messages.getString("DeleteRowPage.WhereClause")); //$NON-NLS-1$
+			// we check if it's a primary key to select it in the WHERE clause
+			if (metadata != null && metadata.getPrimaryKeyOrder(columnNames[i]) > 0)
+				whereValues[i].setSelection(true);
+			else
+				whereValues[i].setSelection(false);
+			whereValues[i].addSelectionListener(new SelectionListener() {
+				public void widgetDefaultSelected(SelectionEvent e) {
+				}
+				public void widgetSelected(SelectionEvent e) {
+					updateQuery();
+				}
+			});
+		}
+		query = new Text(container, SWT.MULTI | SWT.READ_ONLY | SWT.WRAP);
+ 		GridData gridData = new GridData();
+		gridData.horizontalSpan = layout.numColumns;
+		gridData.verticalSpan = 3;
+		gridData.horizontalAlignment = GridData.FILL;
+		gridData.verticalAlignment = GridData.FILL;
+		gridData.grabExcessHorizontalSpace = true;
+		gridData.grabExcessVerticalSpace = true;
+		query.setLayoutData(gridData);
 
-      if (row.getColumnNames() == null) {
-        System.out.println("Columns are null");
-      }
-      if (row.getTableData() == null) {
-        System.out.println("Data is null");
-      }
-    }
-    columnNames = row.getColumnNames();
-    String[] data = row.getTableData();
-    if (DEBUG) {
-      for (int i = 0; i < row.getColumnCount(); i++) {
-        System.out.println("data = " + i + "=" + data[i]);
-        System.out.println("column = " + i + "=" + columnNames[i]);
-      }
-    }
-    values = new Text[row.getColumnCount()];
-    whereValues = new Button[row.getColumnCount()];
-    Label temp = new Label(container, SWT.NULL);
-    temp.setText("Column Name");
-    temp = new Label(container, SWT.NULL);
-    temp.setText("Value");
-    temp = new Label(container, SWT.NULL);
-    temp.setText("Include in?");
-    for (int i = 0; i < row.getColumnCount(); i++) {
-      Label label = new Label(container, SWT.NULL);
-      label.setText(columnNames[i]);
-      values[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
-      GridData fullHorizontal = new GridData();
-      fullHorizontal.horizontalAlignment = GridData.FILL;
-      values[i].setLayoutData(fullHorizontal);
-      values[i].setText(data[i]);
-
-      values[i].addModifyListener(new ModifyListener() {
-        public void modifyText(ModifyEvent e) {
-          updateQuery();
-        }
-      });
-
-      whereValues[i] = new Button(container, SWT.CHECK);
-      whereValues[i].setText("Where clause");
-      whereValues[i].addSelectionListener(new SelectionListener() {
-        public void widgetDefaultSelected(SelectionEvent e) {
-        }
-        public void widgetSelected(SelectionEvent e) {
-          updateQuery();
-        }
-      });
-    }
-    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;
-    query.setLayoutData(gridData);
-
-    setControl(container);
-    updateQuery();
-
-    setPageComplete(true);
-  }
-  public void updateQuery() {
-    if (DEBUG) {
-      System.out.println("Updating query");
-    }
-    StringBuffer whereClause = new StringBuffer();
-    int numSelected = 0;
-    for (int i = 0; i < columnNames.length; i++) {
-      if (whereValues[i].getSelection()) {
-        numSelected++;
-        whereClause.append(columnNames[i]);
-        whereClause.append(" = ");
-        whereClause.append(values[i].getText());
-        whereClause.append(", ");
-      }
-    }
-    if (whereClause.length() > 1) {
-      whereClause.deleteCharAt(whereClause.length() - 1);
-      whereClause.deleteCharAt(whereClause.length() - 1);
-    }
-    String query = "DELETE FROM " + row.getTable();
-    if (numSelected > 0) {
-      query += " WHERE " + whereClause.toString();
-    }
-    if (numSelected > 0) {
-      setMessage("");
-    } else {
-      setMessage("Warning: no \"where clause\" columns selected, all rows will be deleted");
-    }
-    this.getControl().pack();
-    this.query.setText(query);
-  }
-  public boolean performFinish() {
-    MultiSQLServer server = MultiSQLServer.getInstance();
-    server.execute(query.getText());
-    return true;
-  }
+ 		setControl(container);
+        updateQuery();
+       
+		setPageComplete(true);
+	}
+	public void updateQuery() {
+		System.out.println(Messages.getString("DeleteRowPage.UpdatingQuery")); //$NON-NLS-1$
+		StringBuffer whereClause = new StringBuffer();
+		BookmarkNode bookmark = row.getBookmarkNode();
+		TreeNode node = bookmark.find(row.getTable());
+		ObjectMetaData metadata = null;
+		if (node != null) metadata = node.getMetaData(); 
+		DatabaseAdapter adapter = AdapterFactory.getInstance().getAdapter(bookmark.getType());
+		
+		int numSelected = 0;
+		for (int i = 0; i < columnNames.length; i++) {
+			if (whereValues[i].getSelection()) {
+				if (numSelected > 0) whereClause.append(" AND "); //$NON-NLS-1$
+				numSelected++;
+				whereClause.append("("); //$NON-NLS-1$
+				whereClause.append(columnNames[i]);
+				whereClause.append(" = "); //$NON-NLS-1$
+				if (adapter != null && metadata != null)
+					whereClause.append(adapter.quote(values[i].getText(), metadata.getColumnType(columnNames[i])));
+				else
+					whereClause.append(values[i].getText());
+								
+				whereClause.append(")"); //$NON-NLS-1$
+			}
+		}
+		String query = "DELETE FROM " + row.getTable(); //$NON-NLS-1$
+		if (numSelected > 0) {
+			query += " WHERE " + whereClause.toString(); //$NON-NLS-1$
+		}
+		if (numSelected > 0) {
+			setMessage(""); //$NON-NLS-1$
+		} else {
+			setMessage(Messages.getString("DeleteRowPage.WarningNoWhere")); //$NON-NLS-1$
+		}
+		this.query.setText(query);
+	}
+	
+	
+	public boolean performFinish() {
+	   MultiSQLServer server = MultiSQLServer.getInstance();
+	   BookmarkView bookmarkView = BookmarkView.getInstance(); 
+	   BookmarkNode bookmark = bookmarkView.getCurrentBookmark();
+	   server.execute(bookmark.getConnection(), query.getText());
+	   return true;
+	}
 }
\ No newline at end of file
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/InsertRowPage.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/InsertRowPage.java
index 7098f46..fde6b50 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/InsertRowPage.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/InsertRowPage.java
@@ -10,107 +10,113 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
+import net.sourceforge.phpdt.sql.Messages;
+import net.sourceforge.phpdt.sql.adapters.AdapterFactory;
+import net.sourceforge.phpdt.sql.adapters.DatabaseAdapter;
 import net.sourceforge.phpdt.sql.sql.MultiSQLServer;
 import net.sourceforge.phpdt.sql.sql.TableRow;
+import net.sourceforge.phpdt.sql.sql.metadata.ObjectMetaData;
+import net.sourceforge.phpdt.sql.view.BookmarkView;
+import net.sourceforge.phpdt.sql.view.bookmark.BookmarkNode;
+import net.sourceforge.phpdt.sql.view.bookmark.TreeNode;
 import net.sourceforge.phpdt.sql.view.tableview.TableAdapter;
 
 public class InsertRowPage extends WizardPage implements SQLPage {
-  TableRow row;
-  String[] columnNames;
-  Text[] values;
-  Label query;
-  public InsertRowPage(String pageName) {
-    super(pageName);
-  }
+	TableRow row;
+	String[] columnNames;
+	Text[] values;
+	Label query;
+	public InsertRowPage(String pageName) {
+		super(pageName);
+	}
 
-  public void init(TableRow row, TableAdapter adapter) {
-    this.row = row;
-  }
+	public void init(TableRow row, TableAdapter adapter) {
+		this.row = row;
+	}
 
-  public void createControl(Composite parent) {
-    if (DEBUG) {
-      System.out.println("page create control");
-    }
-    Composite container = new Composite(parent, SWT.NULL);
-    GridLayout layout = new GridLayout();
-    container.setLayout(layout);
-    int layoutColumns = 2;
-    layout.numColumns = layoutColumns;
+	public void createControl(Composite parent) {
+		System.out.println("page create control"); //$NON-NLS-1$
+		Composite container = new Composite(parent, SWT.NULL);
+		GridLayout layout = new GridLayout();
+		container.setLayout(layout);
+		layout.numColumns = 2;
 
-    if (DEBUG) {
-      if (row == null) {
-        System.out.println("Row is null");
-      }
-      if (row.getColumnNames() == null) {
-        System.out.println("Columns are null");
-      }
-      if (row.getTableData() == null) {
-        System.out.println("Data is null");
-      }
-    }
-    columnNames = row.getColumnNames();
-    String[] data = row.getTableData();
-    if (DEBUG) {
-      for (int i = 0; i < row.getColumnCount(); i++) {
-        System.out.println("data = " + i + "=" + data[i]);
-        System.out.println("column = " + i + "=" + columnNames[i]);
-      }
-    }
-    values = new Text[row.getColumnCount()];
-    Label temp = new Label(container, SWT.NULL);
-    temp.setText("Column Name");
-    temp = new Label(container, SWT.NULL);
-    temp.setText("Value");
-    for (int i = 0; i < row.getColumnCount(); i++) {
-      Label label = new Label(container, SWT.NULL);
-      label.setText(columnNames[i]);
-      values[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
-      GridData fullHorizontal = new GridData();
-      fullHorizontal.horizontalAlignment = GridData.FILL;
-      values[i].setLayoutData(fullHorizontal);
+		if (row == null) {
+			System.out.println("Row is null"); //$NON-NLS-1$
+		}
+		if (row.getColumnNames() == null) {
+			System.out.println("Columns are null"); //$NON-NLS-1$
+		}
+		if (row.getTableData() == null) {
+			System.out.println("Data is null"); //$NON-NLS-1$
+		}
+		columnNames = row.getColumnNames();
+		String[] data = row.getTableData();
+		for (int i = 0; i < row.getColumnCount(); i++) {
+			System.out.println("data = " + i + "=" + data[i]); //$NON-NLS-1$ //$NON-NLS-2$
+			System.out.println("column = " + i + "=" + columnNames[i]); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		values = new Text[row.getColumnCount()];
+		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 < row.getColumnCount(); i++) {
+			Label label = new Label(container, SWT.NULL);
+			label.setText(columnNames[i]);
+			values[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
+			GridData fullHorizontal = new GridData();
+			fullHorizontal.horizontalAlignment = GridData.FILL;
+			values[i].setLayoutData(fullHorizontal);
 
-      //values[i].setText(data[i]);
-      values[i].addModifyListener(new ModifyListener() {
-        public void modifyText(ModifyEvent e) {
-          updateQuery();
-        }
-      });
-    }
-    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;
-    query.setLayoutData(gridData);
+			//values[i].setText(data[i]);
+			values[i].addModifyListener(new ModifyListener() {
+				public void modifyText(ModifyEvent e) {
+					updateQuery();
+				}				
+			});
+		}
+		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;
+		query.setLayoutData(gridData);
 
-    setControl(container);
-    updateQuery();
-
-    setPageComplete(true);
-  }
-  public void updateQuery() {
-    if (DEBUG) {
-      System.out.println("Updating query");
-    }
-    StringBuffer valuesClause = new StringBuffer();
-    for (int i = 0; i < columnNames.length; i++) {
-      valuesClause.append(values[i].getText());
-      valuesClause.append(", ");
-    }
-    if (valuesClause.length() > 1) {
-      valuesClause.deleteCharAt(valuesClause.length() - 1);
-      valuesClause.deleteCharAt(valuesClause.length() - 1);
-    }
-    String query = "INSERT INTO " + row.getTable();
-    query += " VALUES (" + valuesClause.toString();
-    query += " )";
-    this.query.setText(query);
-  }
-  public boolean performFinish() {
-    MultiSQLServer server = MultiSQLServer.getInstance();
-    server.execute(query.getText());
-    return true;
-  }
+ 		setControl(container);
+        updateQuery();
+       
+		setPageComplete(true);
+	}
+	public void updateQuery() {
+		System.out.println("Updating query"); //$NON-NLS-1$
+		StringBuffer valuesClause = new StringBuffer();
+		BookmarkNode bookmark = row.getBookmarkNode();
+		TreeNode node = bookmark.find(row.getTable());
+		ObjectMetaData metadata = null;
+		if (node != null) metadata = node.getMetaData(); 
+		DatabaseAdapter adapter = AdapterFactory.getInstance().getAdapter(bookmark.getType());
+		
+		int numValues = 0;
+		for (int i = 0; i < columnNames.length; i++) {
+			String value = values[i].getText();
+			if (numValues > 0) valuesClause.append(", "); //$NON-NLS-1$
+			if (adapter != null && metadata != null && value != "") //$NON-NLS-1$
+				valuesClause.append(adapter.quote(value, metadata.getColumnType(columnNames[i])));
+			else
+				valuesClause.append(value);	
+			numValues++;
+		}
+		String query = "INSERT INTO " + row.getTable(); //$NON-NLS-1$
+		query += " VALUES (" + valuesClause; //$NON-NLS-1$
+		query += " )"; //$NON-NLS-1$
+		this.query.setText(query);
+	}
+	public boolean performFinish() {
+	   MultiSQLServer server = MultiSQLServer.getInstance();
+	   BookmarkView bookmarkView = BookmarkView.getInstance(); 
+	   BookmarkNode bookmark = bookmarkView.getCurrentBookmark();
+	   server.execute(bookmark.getConnection(), query.getText());
+	   return true;
+	}
 }
\ No newline at end of file
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/PHPDeleteRowPage.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/PHPDeleteRowPage.java
index a0b3869..fd0ebb7 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/PHPDeleteRowPage.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/PHPDeleteRowPage.java
@@ -2,11 +2,6 @@ package net.sourceforge.phpdt.sql.wizards;
 
 import java.text.MessageFormat;
 
-import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
-import net.sourceforge.phpdt.sql.sql.TableRow;
-import net.sourceforge.phpdt.sql.view.PHPSourceConsole;
-import net.sourceforge.phpdt.sql.view.tableview.TableAdapter;
-
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.wizard.WizardPage;
 import org.eclipse.swt.SWT;
@@ -21,157 +16,155 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
+import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
+import net.sourceforge.phpdt.sql.sql.TableRow;
+import net.sourceforge.phpdt.sql.view.PHPSourceConsole;
+import net.sourceforge.phpdt.sql.view.tableview.TableAdapter;
+
 public class PHPDeleteRowPage extends WizardPage implements SQLPage {
-  TableRow row;
-  String[] columnNames;
-  Text[] values;
-  Button[] whereValues;
-  Label query;
-  IPreferenceStore fStore;
-
-  public PHPDeleteRowPage(String pageName) {
-    super(pageName);
-  }
-
-  public void init(TableRow row, TableAdapter adapter) {
-    this.row = row;
-  }
-
-  public void createControl(Composite parent) {
-    if (DEBUG) {
-      System.out.println("page create control");
-    }
-    fStore = PHPEclipseSQLPlugin.getDefault().getPreferenceStore();
-    Composite container = new Composite(parent, SWT.NULL);
-    GridLayout layout = new GridLayout();
-    container.setLayout(layout);
-    int layoutColumns = 3;
-    layout.numColumns = layoutColumns;
-
-    if (DEBUG) {
-      if (row == null) {
-        System.out.println("Row is null");
-      }
-
-      if (row.getColumnNames() == null) {
-        System.out.println("Columns are null");
-      }
-      if (row.getTableData() == null) {
-        System.out.println("Data is null");
-      }
-    }
-    columnNames = row.getColumnNames();
-    String[] data = row.getTableData();
-    if (DEBUG) {
-      for (int i = 0; i < row.getColumnCount(); i++) {
-        System.out.println("data = " + i + "=" + data[i]);
-        System.out.println("column = " + i + "=" + columnNames[i]);
-      }
-    }
-    values = new Text[row.getColumnCount()];
-    whereValues = new Button[row.getColumnCount()];
-    Label temp = new Label(container, SWT.NULL);
-    temp.setText("Column Name");
-    temp = new Label(container, SWT.NULL);
-    temp.setText("Value");
-    temp = new Label(container, SWT.NULL);
-    temp.setText("Include in?");
-    for (int i = 0; i < row.getColumnCount(); i++) {
-      Label label = new Label(container, SWT.NULL);
-      label.setText(columnNames[i]);
-      values[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
-      GridData fullHorizontal = new GridData();
-      fullHorizontal.horizontalAlignment = GridData.FILL;
-      values[i].setLayoutData(fullHorizontal);
-
-      if (data[i] == null || data[i].equals("")) {
-        values[i].setText('$' + columnNames[i]);
-      } else {
-        values[i].setText(data[i]);
-      }
-
-      values[i].addModifyListener(new ModifyListener() {
-        public void modifyText(ModifyEvent e) {
-          updateQuery();
-        }
-      });
-
-      whereValues[i] = new Button(container, SWT.CHECK);
-      whereValues[i].setText("Where clause");
-      whereValues[i].addSelectionListener(new SelectionListener() {
-        public void widgetDefaultSelected(SelectionEvent e) {
-        }
-        public void widgetSelected(SelectionEvent e) {
-          updateQuery();
-        }
-      });
-    }
-    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;
-    query.setLayoutData(gridData);
-
-    setControl(container);
-    updateQuery();
-
-    setPageComplete(true);
-  }
-  public void updateQuery() {
-    if (DEBUG) {
-      System.out.println("Updating delete query");
-    }
-    StringBuffer whereClause = new StringBuffer();
-    int numSelected = 0;
-    boolean first = false;
-    for (int i = 0; i < columnNames.length; i++) {
-      if (whereValues[i].getSelection()) {
-        numSelected++;
-        if (first) {
-          whereClause.append(", ");
-        }
-
-        whereClause.append(columnNames[i]);
-        whereClause.append(" = ");
-        whereClause.append("'" + values[i].getText() + "'");
-
-        first = true;
-      }
-    }
-    //    if (whereClause.length() > 1) {
-    //      whereClause.deleteCharAt(whereClause.length() - 1);
-    //      whereClause.deleteCharAt(whereClause.length() - 1);
-    //    }
-    
-    
-    String[] arguments = { row.getTable(), whereClause.toString() };
-    MessageFormat form = new MessageFormat(fStore.getString("phpeclipse.sql.delete.template"));
-
-    String query = form.format(arguments);
-    
-//    String query = "$results = mysql_query(\"DELETE FROM " + row.getTable();
-//    if (numSelected > 0) {
-//      query += " WHERE " + whereClause.toString() + "\");";
-//    } else {
-//      query += "\");";
-//    }
-
-    if (numSelected > 0) {
-      setMessage("");
-    } else {
-      setMessage("Warning: no \"where clause\" columns selected, all rows will be deleted");
-    }
-
-    this.getControl().pack();
-    this.query.setText(query);
-  }
-  public boolean performFinish() {
-    PHPSourceConsole console = PHPSourceConsole.getInstance();
-    console.clear();
-    console.print(query.getText());
-    return true;
-  }
+	TableRow row;
+	String[] columnNames;
+	Text[] values;
+	Button[] whereValues;
+	Label query;
+	IPreferenceStore fStore;
+
+	public PHPDeleteRowPage(String pageName) {
+		super(pageName);
+	}
+
+	public void init(TableRow row, TableAdapter adapter) {
+		this.row = row;
+	}
+
+	public void createControl(Composite parent) {
+		System.out.println("page create control");
+		fStore = PHPEclipseSQLPlugin.getDefault().getPreferenceStore();
+		Composite container = new Composite(parent, SWT.NULL);
+		GridLayout layout = new GridLayout();
+		container.setLayout(layout);
+		int layoutColumns = 3;
+		layout.numColumns = layoutColumns;
+
+		if (row == null) {
+			System.out.println("Row is null");
+		}
+		if (row.getColumnNames() == null) {
+			System.out.println("Columns are null");
+		}
+		if (row.getTableData() == null) {
+			System.out.println("Data is null");
+		}
+
+		columnNames = row.getColumnNames();
+		String[] data = row.getTableData();
+		for (int i = 0; i < row.getColumnCount(); i++) {
+			System.out.println("data = " + i + "=" + data[i]);
+			System.out.println("column = " + i + "=" + columnNames[i]);
+		}
+		values = new Text[row.getColumnCount()];
+		whereValues = new Button[row.getColumnCount()];
+		Label temp = new Label(container, SWT.NULL);
+		temp.setText("Column Name");
+		temp = new Label(container, SWT.NULL);
+		temp.setText("Value");
+		temp = new Label(container, SWT.NULL);
+		temp.setText("Include in?");
+		for (int i = 0; i < row.getColumnCount(); i++) {
+			Label label = new Label(container, SWT.NULL);
+			label.setText(columnNames[i]);
+			values[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
+			GridData fullHorizontal = new GridData();
+			fullHorizontal.horizontalAlignment = GridData.FILL;
+			values[i].setLayoutData(fullHorizontal);
+
+			if (data[i] == null || data[i].equals("")) {
+				values[i].setText('$' + columnNames[i]);
+			} else {
+				values[i].setText(data[i]);
+			}
+
+			values[i].addModifyListener(new ModifyListener() {
+				public void modifyText(ModifyEvent e) {
+					updateQuery();
+				}
+			});
+
+			whereValues[i] = new Button(container, SWT.CHECK);
+			whereValues[i].setText("Where clause");
+			whereValues[i].addSelectionListener(new SelectionListener() {
+				public void widgetDefaultSelected(SelectionEvent e) {
+				}
+				public void widgetSelected(SelectionEvent e) {
+					updateQuery();
+				}
+			});
+		}
+		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;
+		query.setLayoutData(gridData);
+
+		setControl(container);
+		updateQuery();
+
+		setPageComplete(true);
+	}
+	public void updateQuery() {
+		System.out.println("Updating delete query");
+		StringBuffer whereClause = new StringBuffer();
+		int numSelected = 0;
+		boolean first = false;
+		for (int i = 0; i < columnNames.length; i++) {
+			if (whereValues[i].getSelection()) {
+				numSelected++;
+				if (first) {
+					whereClause.append(", ");
+				}
+
+				whereClause.append(columnNames[i]);
+				whereClause.append(" = ");
+				whereClause.append("'" + values[i].getText() + "'");
+
+				first = true;
+			}
+		}
+		//    if (whereClause.length() > 1) {
+		//      whereClause.deleteCharAt(whereClause.length() - 1);
+		//      whereClause.deleteCharAt(whereClause.length() - 1);
+		//    }
+
+		String[] arguments = { row.getTable(), whereClause.toString()};
+		MessageFormat form =
+			new MessageFormat(
+				fStore.getString("phpeclipse.sql.delete.template"));
+
+		String query = form.format(arguments);
+
+		//	  String query = "$results = mysql_query(\"DELETE FROM " + row.getTable();
+		//	  if (numSelected > 0) {
+		//		query += " WHERE " + whereClause.toString() + "\");";
+		//	  } else {
+		//		query += "\");";
+		//	  }
+
+		if (numSelected > 0) {
+			setMessage("");
+		} else {
+			setMessage("Warning: no \"where clause\" columns selected, all rows will be deleted");
+		}
+
+		this.getControl().pack();
+		this.query.setText(query);
+	}
+	public boolean performFinish() {
+		PHPSourceConsole console = PHPSourceConsole.getInstance();
+		console.clear();
+		console.print(query.getText());
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/PHPInsertRowPage.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/PHPInsertRowPage.java
index 74aac22..47e479f 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/PHPInsertRowPage.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/PHPInsertRowPage.java
@@ -2,11 +2,6 @@ package net.sourceforge.phpdt.sql.wizards;
 
 import java.text.MessageFormat;
 
-import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
-import net.sourceforge.phpdt.sql.sql.TableRow;
-import net.sourceforge.phpdt.sql.view.PHPSourceConsole;
-import net.sourceforge.phpdt.sql.view.tableview.TableAdapter;
-
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.wizard.WizardPage;
 import org.eclipse.swt.SWT;
@@ -18,125 +13,125 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
+import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
+import net.sourceforge.phpdt.sql.sql.TableRow;
+import net.sourceforge.phpdt.sql.view.PHPSourceConsole;
+import net.sourceforge.phpdt.sql.view.tableview.TableAdapter;
+
 public class PHPInsertRowPage extends WizardPage implements SQLPage {
-  TableRow row;
-  String[] columnNames;
-  Text[] values;
-  Label query;
-  private IPreferenceStore fStore;
-  
-  public PHPInsertRowPage(String pageName) {
-    super(pageName);
-  }
+	TableRow row;
+	String[] columnNames;
+	Text[] values;
+	Label query;
+	private IPreferenceStore fStore;
+
+	public PHPInsertRowPage(String pageName) {
+		super(pageName);
+	}
 
-  public void init(TableRow row, TableAdapter adapter) {
-    this.row = row;
-  }
+	public void init(TableRow row, TableAdapter adapter) {
+		this.row = row;
+	}
 
-  public void createControl(Composite parent) {
-    if (DEBUG) {
-      System.out.println("page create control");
-    }
-    fStore = PHPEclipseSQLPlugin.getDefault().getPreferenceStore();
-    Composite container = new Composite(parent, SWT.NULL);
-    GridLayout layout = new GridLayout();
-    container.setLayout(layout);
-    int layoutColumns = 2;
-    layout.numColumns = layoutColumns;
+	public void createControl(Composite parent) {
+		System.out.println("page create control");
+		fStore = PHPEclipseSQLPlugin.getDefault().getPreferenceStore();
+		Composite container = new Composite(parent, SWT.NULL);
+		GridLayout layout = new GridLayout();
+		container.setLayout(layout);
+		int layoutColumns = 2;
+		layout.numColumns = layoutColumns;
 
-    if (DEBUG) {
-      if (row == null) {
-        System.out.println("Row is null");
-      }
-      if (row.getColumnNames() == null) {
-        System.out.println("Columns are null");
-      }
-      if (row.getTableData() == null) {
-        System.out.println("Data is null");
-      }
-    }
-    columnNames = row.getColumnNames();
-    String[] data = row.getTableData();
-    if (DEBUG) {
-      for (int i = 0; i < row.getColumnCount(); i++) {
-        System.out.println("data = " + i + "=" + data[i]);
-        System.out.println("column = " + i + "=" + columnNames[i]);
-      }
-    }
-    values = new Text[row.getColumnCount()];
-    Label temp = new Label(container, SWT.NULL);
-    temp.setText("Column Name");
-    temp = new Label(container, SWT.NULL);
-    temp.setText("Value");
-    for (int i = 0; i < row.getColumnCount(); i++) {
-      Label label = new Label(container, SWT.NULL);
-      label.setText(columnNames[i]);
-      values[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
-      GridData fullHorizontal = new GridData();
-      fullHorizontal.horizontalAlignment = GridData.FILL;
-      values[i].setLayoutData(fullHorizontal);
+		if (row == null) {
+			System.out.println("Row is null");
+		}
+		if (row.getColumnNames() == null) {
+			System.out.println("Columns are null");
+		}
+		if (row.getTableData() == null) {
+			System.out.println("Data is null");
+		}
+		columnNames = row.getColumnNames();
+		String[] data = row.getTableData();
+		for (int i = 0; i < row.getColumnCount(); i++) {
+			System.out.println("data = " + i + "=" + data[i]);
+			System.out.println("column = " + i + "=" + columnNames[i]);
+		}
+		values = new Text[row.getColumnCount()];
+		Label temp = new Label(container, SWT.NULL);
+		temp.setText("Column Name");
+		temp = new Label(container, SWT.NULL);
+		temp.setText("Value");
+		for (int i = 0; i < row.getColumnCount(); i++) {
+			Label label = new Label(container, SWT.NULL);
+			label.setText(columnNames[i]);
+			values[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
+			GridData fullHorizontal = new GridData();
+			fullHorizontal.horizontalAlignment = GridData.FILL;
+			values[i].setLayoutData(fullHorizontal);
 
-      //values[i].setText(data[i]);
-      values[i].addModifyListener(new ModifyListener() {
-        public void modifyText(ModifyEvent e) {
-          updateQuery();
-        }
-      });
-    }
-    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;
-    query.setLayoutData(gridData);
+			//values[i].setText(data[i]);
+			values[i].addModifyListener(new ModifyListener() {
+				public void modifyText(ModifyEvent e) {
+					updateQuery();
+				}
+			});
+		}
+		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;
+		query.setLayoutData(gridData);
 
-    setControl(container);
-    updateQuery();
+		setControl(container);
+		updateQuery();
 
-    setPageComplete(true);
-  }
-  public void updateQuery() {
-    if (DEBUG) {
-      System.out.println("Updating insert query");
-    }
-    StringBuffer fieldClause = new StringBuffer();
+		setPageComplete(true);
+	}
+	public void updateQuery() {
+		System.out.println("Updating insert query");
+		StringBuffer fieldClause = new StringBuffer();
 
-    StringBuffer valuesClause = new StringBuffer();
-    String text;
-    boolean first = false;
-    for (int i = 0; i < columnNames.length; i++) {
-      text = values[i].getText();
-      if (! text.equals("")) {
-        if (first) {
-          valuesClause.append(", ");
-          fieldClause.append(", ");
-        }
-        valuesClause.append("'"+values[i].getText()+"'");
-        fieldClause.append(columnNames[i]);
-        first = true;
-      }
-    }
-//    if (valuesClause.length() > 1) {
-//      valuesClause.deleteCharAt(valuesClause.length() - 1);
-//      valuesClause.deleteCharAt(valuesClause.length() - 1);
-//    }
-    String[] arguments = { row.getTable(), fieldClause.toString(), valuesClause.toString() };
-    MessageFormat form = new MessageFormat(fStore.getString("phpeclipse.sql.insert.template"));
+		StringBuffer valuesClause = new StringBuffer();
+		String text;
+		boolean first = false;
+		for (int i = 0; i < columnNames.length; i++) {
+			text = values[i].getText();
+			if (!text.equals("")) {
+				if (first) {
+					valuesClause.append(", ");
+					fieldClause.append(", ");
+				}
+				valuesClause.append("'" + values[i].getText() + "'");
+				fieldClause.append(columnNames[i]);
+				first = true;
+			}
+		}
+		//    if (valuesClause.length() > 1) {
+		//      valuesClause.deleteCharAt(valuesClause.length() - 1);
+		//      valuesClause.deleteCharAt(valuesClause.length() - 1);
+		//    }
+		String[] arguments =
+			{ row.getTable(), fieldClause.toString(), valuesClause.toString()};
+		MessageFormat form =
+			new MessageFormat(
+				fStore.getString("phpeclipse.sql.insert.template"));
 
-    String query = form.format(arguments);
+		String query = form.format(arguments);
 
-//    String query = "$results = mysql_query(\"INSERT INTO " + row.getTable() + " (";
-//    query += fieldClause.toString() + ") ";
-//    query += " VALUES (" + valuesClause.toString();
-//    query += ")\");";
-    this.query.setText(query);
-  }
-  public boolean performFinish() {
-    PHPSourceConsole console = PHPSourceConsole.getInstance();
-    console.clear();
-    console.print(query.getText());
-    return true;
-  }
+		//    String query = "$results = mysql_query(\"INSERT INTO " + row.getTable() + " (";
+		//    query += fieldClause.toString() + ") ";
+		//    query += " VALUES (" + valuesClause.toString();
+		//    query += ")\");";
+		this.query.setText(query);
+	}
+	public boolean performFinish() {
+		PHPSourceConsole console = PHPSourceConsole.getInstance();
+		console.clear();
+		console.print(query.getText());
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/PHPSelectRowPage.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/PHPSelectRowPage.java
index 09c739b..e31fe2f 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/PHPSelectRowPage.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/PHPSelectRowPage.java
@@ -2,11 +2,6 @@ package net.sourceforge.phpdt.sql.wizards;
 
 import java.text.MessageFormat;
 
-import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
-import net.sourceforge.phpdt.sql.sql.TableRow;
-import net.sourceforge.phpdt.sql.view.PHPSourceConsole;
-import net.sourceforge.phpdt.sql.view.tableview.TableAdapter;
-
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.wizard.WizardPage;
 import org.eclipse.swt.SWT;
@@ -21,182 +16,182 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
+import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
+import net.sourceforge.phpdt.sql.sql.TableRow;
+import net.sourceforge.phpdt.sql.view.PHPSourceConsole;
+import net.sourceforge.phpdt.sql.view.tableview.TableAdapter;
+
 public class PHPSelectRowPage extends WizardPage implements SQLPage {
-  TableRow row;
-  String[] columnNames;
-  Text[] whereValues;
-  // Text[] newValues;
-  Button[] primaryKeys;
-  Button[] setValues;
-  Label query;
-  IPreferenceStore fStore;
-
-  public PHPSelectRowPage(String pageName) {
-    super(pageName);
-  }
-
-  public void init(TableRow row, TableAdapter adapter) {
-    this.row = row;
-  }
-
-  public void createControl(Composite parent) {
-    if (DEBUG) {
-      System.out.println("page create control");
-    }
-    Composite container = new Composite(parent, SWT.NULL);
-    fStore = PHPEclipseSQLPlugin.getDefault().getPreferenceStore();
-
-    GridLayout layout = new GridLayout();
-    container.setLayout(layout);
-    int layoutColumns = 4;
-    layout.numColumns = layoutColumns;
-
-    if (DEBUG) {
-      if (row == null) {
-        System.out.println("Row is null");
-      }
-      if (row.getColumnNames() == null) {
-        System.out.println("Columns are null");
-      }
-      if (row.getTableData() == null) {
-        System.out.println("Data is null");
-      }
-    }
-    columnNames = row.getColumnNames();
-    String[] data = row.getTableData();
-    
-    if (DEBUG) {
-      for (int i = 0; i < row.getColumnCount(); i++) {
-        System.out.println("data = " + i + "=" + data[i]);
-        System.out.println("column = " + i + "=" + columnNames[i]);
-      }
-    }
-    
-    whereValues = new Text[row.getColumnCount()];
-    //  newValues = new Text[row.getColumnCount()];
-    primaryKeys = new Button[row.getColumnCount()];
-    setValues = new Button[row.getColumnCount()];
-    Label temp = new Label(container, SWT.NULL);
-    temp.setText("Column Name");
-    temp = new Label(container, SWT.NULL);
-    temp.setText("Value");
-    temp = new Label(container, SWT.NULL);
-    temp.setText("Where");
-    //    temp = new Label(container, SWT.NULL);
-    //    temp.setText("New Value");
-    temp = new Label(container, SWT.NULL);
-    temp.setText("Select");
-    for (int i = 0; i < row.getColumnCount(); i++) {
-      Label label = new Label(container, SWT.NULL);
-      label.setText(columnNames[i]);
-      whereValues[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
-      if (data[i] == null || data[i].equals("")) {
-        whereValues[i].setText('$' + columnNames[i]);
-      } else {
-        whereValues[i].setText(data[i]);
-      }
-      
-      whereValues[i].addModifyListener(new ModifyListener() {
-        public void modifyText(ModifyEvent e) {
-          updateQuery();
-        }
-      });
-
-      primaryKeys[i] = new Button(container, SWT.CHECK);
-      //primaryKeys[i].setText("Where Clause");
-      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[i]);
-      //   newValues[i].addModifyListener(new ModifyListener() {
-      //    public void modifyText(ModifyEvent e) {
-      //       updateQuery();
-      //    }
-      //  });
-      setValues[i] = new Button(container, SWT.CHECK);
-      //setValues[i].setText("Select Value");
-      setValues[i].addSelectionListener(new SelectionListener() {
-        public void widgetDefaultSelected(SelectionEvent e) {
-        }
-        public void widgetSelected(SelectionEvent e) {
-          updateQuery();
-        }
-      });
-    }
-    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;
-    query.setLayoutData(gridData);
-
-    setControl(container);
-    updateQuery();
-
-    setPageComplete(true);
-  }
-
-  public void updateQuery() {
-    if (DEBUG) {
-      System.out.println("PHP SELECT");
-    }
-    StringBuffer setClause = new StringBuffer();
-    StringBuffer whereClause = new StringBuffer();
-    String temp;
-    boolean firstClause = false;
-    for (int i = 0; i < columnNames.length; i++) {
-      if (primaryKeys[i].getSelection()) {
-        if (firstClause) {
-          whereClause.append(" AND ");
-        }
-        firstClause = true;
-        whereClause.append(columnNames[i]);
-        whereClause.append(" = ");
-        temp = whereValues[i].getText();
-        //        if (temp.charAt(0) == '$') {
-        //          whereClause.append(temp);
-        //        } else {
-        whereClause.append("'" + temp + "'");
-        //        }
-
-      }
-      if (setValues[i].getSelection()) {
-        setClause.append(columnNames[i]);
-        //   setClause.append(" = ");
-        //   setClause.append(newValues[i].getText());
-        setClause.append(", ");
-      }
-    }
-    //    if (whereClause.length() > 1) {
-    //      whereClause.deleteCharAt(whereClause.length() - 1);
-    //      whereClause.deleteCharAt(whereClause.length() - 1);
-    //    }
-    if (setClause.length() > 1) {
-      setClause.deleteCharAt(setClause.length() - 1);
-      setClause.deleteCharAt(setClause.length() - 1);
-    }
-    
-    String[] arguments = { setClause.toString(), row.getTable(), whereClause.toString() };
-    MessageFormat form = new MessageFormat(fStore.getString("phpeclipse.sql.select.template"));
-
-    String query = form.format(arguments);
-//    String query = "$results = mysql_query(\"SELECT " + setClause.toString();
-//    query += " FROM " + row.getTable();
-//    query += " WHERE " + whereClause.toString() + "\");";
-    this.query.setText(query);
-  }
-
-  public boolean performFinish() {
-    PHPSourceConsole console = PHPSourceConsole.getInstance();
-    console.clear();
-    console.print(query.getText());
-    return true;
-  }
+	TableRow row;
+	String[] columnNames;
+	Text[] whereValues;
+	// Text[] newValues;
+	Button[] primaryKeys;
+	Button[] setValues;
+	Label query;
+	IPreferenceStore fStore;
+
+	public PHPSelectRowPage(String pageName) {
+		super(pageName);
+	}
+
+	public void init(TableRow row, TableAdapter adapter) {
+		this.row = row;
+	}
+
+	public void createControl(Composite parent) {
+		System.out.println("page create control");
+		Composite container = new Composite(parent, SWT.NULL);
+		fStore = PHPEclipseSQLPlugin.getDefault().getPreferenceStore();
+
+		GridLayout layout = new GridLayout();
+		container.setLayout(layout);
+		int layoutColumns = 4;
+		layout.numColumns = layoutColumns;
+
+		if (row == null) {
+			System.out.println("Row is null");
+		}
+		if (row.getColumnNames() == null) {
+			System.out.println("Columns are null");
+		}
+		if (row.getTableData() == null) {
+			System.out.println("Data is null");
+		}
+		columnNames = row.getColumnNames();
+		String[] data = row.getTableData();
+
+		for (int i = 0; i < row.getColumnCount(); i++) {
+			System.out.println("data = " + i + "=" + data[i]);
+			System.out.println("column = " + i + "=" + columnNames[i]);
+		}
+
+		whereValues = new Text[row.getColumnCount()];
+		//  newValues = new Text[row.getColumnCount()];
+		primaryKeys = new Button[row.getColumnCount()];
+		setValues = new Button[row.getColumnCount()];
+		Label temp = new Label(container, SWT.NULL);
+		temp.setText("Column Name");
+		temp = new Label(container, SWT.NULL);
+		temp.setText("Value");
+		temp = new Label(container, SWT.NULL);
+		temp.setText("Where");
+		//    temp = new Label(container, SWT.NULL);
+		//    temp.setText("New Value");
+		temp = new Label(container, SWT.NULL);
+		temp.setText("Select");
+		for (int i = 0; i < row.getColumnCount(); i++) {
+			Label label = new Label(container, SWT.NULL);
+			label.setText(columnNames[i]);
+			whereValues[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
+			if (data[i] == null || data[i].equals("")) {
+				whereValues[i].setText('$' + columnNames[i]);
+			} else {
+				whereValues[i].setText(data[i]);
+			}
+
+			whereValues[i].addModifyListener(new ModifyListener() {
+				public void modifyText(ModifyEvent e) {
+					updateQuery();
+				}
+			});
+
+			primaryKeys[i] = new Button(container, SWT.CHECK);
+			//primaryKeys[i].setText("Where Clause");
+			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[i]);
+			//   newValues[i].addModifyListener(new ModifyListener() {
+			//    public void modifyText(ModifyEvent e) {
+			//       updateQuery();
+			//    }
+			//  });
+			setValues[i] = new Button(container, SWT.CHECK);
+			//setValues[i].setText("Select Value");
+			setValues[i].addSelectionListener(new SelectionListener() {
+				public void widgetDefaultSelected(SelectionEvent e) {
+				}
+				public void widgetSelected(SelectionEvent e) {
+					updateQuery();
+				}
+			});
+		}
+		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;
+		query.setLayoutData(gridData);
+
+		setControl(container);
+		updateQuery();
+
+		setPageComplete(true);
+	}
+
+	public void updateQuery() {
+		System.out.println("PHP SELECT");
+		StringBuffer setClause = new StringBuffer();
+		StringBuffer whereClause = new StringBuffer();
+		String temp;
+		boolean firstClause = false;
+		for (int i = 0; i < columnNames.length; i++) {
+			if (primaryKeys[i].getSelection()) {
+				if (firstClause) {
+					whereClause.append(" AND ");
+				}
+				firstClause = true;
+				whereClause.append(columnNames[i]);
+				whereClause.append(" = ");
+				temp = whereValues[i].getText();
+				//        if (temp.charAt(0) == '$') {
+				//          whereClause.append(temp);
+				//        } else {
+				whereClause.append("'" + temp + "'");
+				//        }
+
+			}
+			if (setValues[i].getSelection()) {
+				setClause.append(columnNames[i]);
+				//   setClause.append(" = ");
+				//   setClause.append(newValues[i].getText());
+				setClause.append(", ");
+			}
+		}
+		//    if (whereClause.length() > 1) {
+		//      whereClause.deleteCharAt(whereClause.length() - 1);
+		//      whereClause.deleteCharAt(whereClause.length() - 1);
+		//    }
+		if (setClause.length() > 1) {
+			setClause.deleteCharAt(setClause.length() - 1);
+			setClause.deleteCharAt(setClause.length() - 1);
+		}
+
+		String[] arguments =
+			{ setClause.toString(), row.getTable(), whereClause.toString()};
+		MessageFormat form =
+			new MessageFormat(
+				fStore.getString("phpeclipse.sql.select.template"));
+
+		String query = form.format(arguments);
+		//    String query = "$results = mysql_query(\"SELECT " + setClause.toString();
+		//    query += " FROM " + row.getTable();
+		//    query += " WHERE " + whereClause.toString() + "\");";
+		this.query.setText(query);
+	}
+
+	public boolean performFinish() {
+		PHPSourceConsole console = PHPSourceConsole.getInstance();
+		console.clear();
+		console.print(query.getText());
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/PHPUpdateRowPage.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/PHPUpdateRowPage.java
index fdb15ec..9ebab2b 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/PHPUpdateRowPage.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/PHPUpdateRowPage.java
@@ -2,11 +2,6 @@ package net.sourceforge.phpdt.sql.wizards;
 
 import java.text.MessageFormat;
 
-import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
-import net.sourceforge.phpdt.sql.sql.TableRow;
-import net.sourceforge.phpdt.sql.view.PHPSourceConsole;
-import net.sourceforge.phpdt.sql.view.tableview.TableAdapter;
-
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.wizard.WizardPage;
 import org.eclipse.swt.SWT;
@@ -21,170 +16,170 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
+import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
+import net.sourceforge.phpdt.sql.sql.TableRow;
+import net.sourceforge.phpdt.sql.view.PHPSourceConsole;
+import net.sourceforge.phpdt.sql.view.tableview.TableAdapter;
+
 public class PHPUpdateRowPage extends WizardPage implements SQLPage {
-  TableRow row;
-  String[] columnNames;
-  Text[] oldValues;
-  Text[] newValues;
-  Button[] primaryKeys;
-  Button[] setValues;
-  Label query;
-  IPreferenceStore fStore;
-  
-  public PHPUpdateRowPage(String pageName) {
-    super(pageName);
-  }
+	TableRow row;
+	String[] columnNames;
+	Text[] oldValues;
+	Text[] newValues;
+	Button[] primaryKeys;
+	Button[] setValues;
+	Label query;
+	IPreferenceStore fStore;
+
+	public PHPUpdateRowPage(String pageName) {
+		super(pageName);
+	}
 
-  public void init(TableRow row, TableAdapter adapter) {
-    this.row = row;
-  }
+	public void init(TableRow row, TableAdapter adapter) {
+		this.row = row;
+	}
 
-  public void createControl(Composite parent) {
-    if (DEBUG) {
-      System.out.println("page create control");
-    }
-    fStore = PHPEclipseSQLPlugin.getDefault().getPreferenceStore();
-    Composite container = new Composite(parent, SWT.NULL);
-    GridLayout layout = new GridLayout();
-    container.setLayout(layout);
-    int layoutColumns = 5;
-    layout.numColumns = layoutColumns;
+	public void createControl(Composite parent) {
+		System.out.println("page create control");
+		fStore = PHPEclipseSQLPlugin.getDefault().getPreferenceStore();
+		Composite container = new Composite(parent, SWT.NULL);
+		GridLayout layout = new GridLayout();
+		container.setLayout(layout);
+		int layoutColumns = 5;
+		layout.numColumns = layoutColumns;
 
-    if (DEBUG) {
-      if (row == null) {
-        System.out.println("Row is null");
-      }
-      if (row.getColumnNames() == null) {
-        System.out.println("Columns are null");
-      }
-      if (row.getTableData() == null) {
-        System.out.println("Data is null");
-      }
-    }
+		if (row == null) {
+			System.out.println("Row is null");
+		}
+		if (row.getColumnNames() == null) {
+			System.out.println("Columns are null");
+		}
+		if (row.getTableData() == null) {
+			System.out.println("Data is null");
+		}
 
-    columnNames = row.getColumnNames();
-    String[] data = row.getTableData();
-    if (DEBUG) {
-      for (int i = 0; i < row.getColumnCount(); i++) {
-        System.out.println("data = " + i + "=" + data[i]);
-        System.out.println("column = " + i + "=" + columnNames[i]);
-      }
-    }
-    oldValues = new Text[row.getColumnCount()];
-    newValues = new Text[row.getColumnCount()];
-    primaryKeys = new Button[row.getColumnCount()];
-    setValues = new Button[row.getColumnCount()];
-    Label temp = new Label(container, SWT.NULL);
-    temp.setText("Column Name");
-    temp = new Label(container, SWT.NULL);
-    temp.setText("Where Value");
-    temp = new Label(container, SWT.NULL);
-    temp.setText("Where");
-    temp = new Label(container, SWT.NULL);
-    temp.setText("Set Value");
-    temp = new Label(container, SWT.NULL);
-    temp.setText("Set");
-    for (int i = 0; i < row.getColumnCount(); i++) {
-      Label label = new Label(container, SWT.NULL);
-      label.setText(columnNames[i]);
-      oldValues[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
-      if (data[i] == null || data[i].equals("")) {
-        oldValues[i].setText('$' + columnNames[i]);
-      } else {
-        oldValues[i].setText(data[i]);
-      }
-      oldValues[i].addModifyListener(new ModifyListener() {
-        public void modifyText(ModifyEvent e) {
-          updateQuery();
-        }
-      });
-      primaryKeys[i] = new Button(container, SWT.CHECK);
-   //   primaryKeys[i].setText("Where");
-      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);
+		columnNames = row.getColumnNames();
+		String[] data = row.getTableData();
+		for (int i = 0; i < row.getColumnCount(); i++) {
+			System.out.println("data = " + i + "=" + data[i]);
+			System.out.println("column = " + i + "=" + columnNames[i]);
+		}
+		oldValues = new Text[row.getColumnCount()];
+		newValues = new Text[row.getColumnCount()];
+		primaryKeys = new Button[row.getColumnCount()];
+		setValues = new Button[row.getColumnCount()];
+		Label temp = new Label(container, SWT.NULL);
+		temp.setText("Column Name");
+		temp = new Label(container, SWT.NULL);
+		temp.setText("Where Value");
+		temp = new Label(container, SWT.NULL);
+		temp.setText("Where");
+		temp = new Label(container, SWT.NULL);
+		temp.setText("Set Value");
+		temp = new Label(container, SWT.NULL);
+		temp.setText("Set");
+		for (int i = 0; i < row.getColumnCount(); i++) {
+			Label label = new Label(container, SWT.NULL);
+			label.setText(columnNames[i]);
+			oldValues[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
+			if (data[i] == null || data[i].equals("")) {
+				oldValues[i].setText('$' + columnNames[i]);
+			} else {
+				oldValues[i].setText(data[i]);
+			}
+			oldValues[i].addModifyListener(new ModifyListener() {
+				public void modifyText(ModifyEvent e) {
+					updateQuery();
+				}
+			});
+			primaryKeys[i] = new Button(container, SWT.CHECK);
+			//   primaryKeys[i].setText("Where");
+			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);
 
-      if (data[i] == null || data[i].equals("")) {
-        newValues[i].setText('$' + columnNames[i]);
-      } else {
-        newValues[i].setText(data[i]);
-      }
-      newValues[i].addModifyListener(new ModifyListener() {
-        public void modifyText(ModifyEvent e) {
-          updateQuery();
-        }
-      });
-      setValues[i] = new Button(container, SWT.CHECK);
-    //  setValues[i].setText("Set Value");
-      setValues[i].addSelectionListener(new SelectionListener() {
-        public void widgetDefaultSelected(SelectionEvent e) {
-        }
-        public void widgetSelected(SelectionEvent e) {
-          updateQuery();
-        }
-      });
-    }
-    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;
-    query.setLayoutData(gridData);
+			if (data[i] == null || data[i].equals("")) {
+				newValues[i].setText('$' + columnNames[i]);
+			} else {
+				newValues[i].setText(data[i]);
+			}
+			newValues[i].addModifyListener(new ModifyListener() {
+				public void modifyText(ModifyEvent e) {
+					updateQuery();
+				}
+			});
+			setValues[i] = new Button(container, SWT.CHECK);
+			//  setValues[i].setText("Set Value");
+			setValues[i].addSelectionListener(new SelectionListener() {
+				public void widgetDefaultSelected(SelectionEvent e) {
+				}
+				public void widgetSelected(SelectionEvent e) {
+					updateQuery();
+				}
+			});
+		}
+		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;
+		query.setLayoutData(gridData);
 
-    setControl(container);
-    updateQuery();
+		setControl(container);
+		updateQuery();
 
-    setPageComplete(true);
-  }
-  public void updateQuery() {
-    if (DEBUG) {
-      System.out.println("Updating update query");
-    }
-    StringBuffer setClause = new StringBuffer();
-    StringBuffer whereClause = new StringBuffer();
-    for (int i = 0; i < columnNames.length; i++) {
-      if (primaryKeys[i].getSelection()) {
-        whereClause.append(columnNames[i]);
-        whereClause.append(" = ");
-        whereClause.append("'"+oldValues[i].getText()+"'");
-        whereClause.append(", ");
-      }
-      if (setValues[i].getSelection()) {
-        setClause.append(columnNames[i]);
-        setClause.append(" = ");
-        setClause.append("'"+newValues[i].getText()+"'");
-        setClause.append(", ");
-      }
-    }
-    if (whereClause.length() > 1) {
-      whereClause.deleteCharAt(whereClause.length() - 1);
-      whereClause.deleteCharAt(whereClause.length() - 1);
-    }
-    if (setClause.length() > 1) {
-      setClause.deleteCharAt(setClause.length() - 1);
-      setClause.deleteCharAt(setClause.length() - 1);
-    }
-    String[] arguments = { setClause.toString(), row.getTable(), whereClause.toString() };
-    MessageFormat form = new MessageFormat(fStore.getString("phpeclipse.sql.update.template"));
+		setPageComplete(true);
+	}
+	public void updateQuery() {
+		System.out.println("Updating update query");
+		StringBuffer setClause = new StringBuffer();
+		StringBuffer whereClause = new StringBuffer();
+		for (int i = 0; i < columnNames.length; i++) {
+			if (primaryKeys[i].getSelection()) {
+				whereClause.append(columnNames[i]);
+				whereClause.append(" = ");
+				whereClause.append("'" + oldValues[i].getText() + "'");
+				whereClause.append(", ");
+			}
+			if (setValues[i].getSelection()) {
+				setClause.append(columnNames[i]);
+				setClause.append(" = ");
+				setClause.append("'" + newValues[i].getText() + "'");
+				setClause.append(", ");
+			}
+		}
+		if (whereClause.length() > 1) {
+			whereClause.deleteCharAt(whereClause.length() - 1);
+			whereClause.deleteCharAt(whereClause.length() - 1);
+		}
+		if (setClause.length() > 1) {
+			setClause.deleteCharAt(setClause.length() - 1);
+			setClause.deleteCharAt(setClause.length() - 1);
+		}
+		String[] arguments =
+			{ setClause.toString(), row.getTable(), whereClause.toString()};
+		MessageFormat form =
+			new MessageFormat(
+				fStore.getString("phpeclipse.sql.update.template"));
 
-    String query = form.format(arguments);
-//
-//    String query = "$results = mysql_query(\"UPDATE " + row.getTable();
-//    query += " SET " + setClause.toString();
-//    query += " WHERE " + whereClause.toString() + "\");";
-    this.query.setText(query);
-  }
-  public boolean performFinish() {
-    PHPSourceConsole console = PHPSourceConsole.getInstance();
-    console.clear();
-    console.print(query.getText());
-    return true;
-  }
+		String query = form.format(arguments);
+		//
+		//    String query = "$results = mysql_query(\"UPDATE " + row.getTable();
+		//    query += " SET " + setClause.toString();
+		//    query += " WHERE " + whereClause.toString() + "\");";
+		this.query.setText(query);
+	}
+	public boolean performFinish() {
+		PHPSourceConsole console = PHPSourceConsole.getInstance();
+		console.clear();
+		console.print(query.getText());
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/SQLPage.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/SQLPage.java
index 1972ccf..bf53558 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/SQLPage.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/SQLPage.java
@@ -1,13 +1,11 @@
 package net.sourceforge.phpdt.sql.wizards;
 
-import net.sourceforge.phpdt.sql.IConstants;
+import org.eclipse.jface.wizard.IWizardPage;
+
 import net.sourceforge.phpdt.sql.sql.TableRow;
 import net.sourceforge.phpdt.sql.view.tableview.TableAdapter;
 
-import org.eclipse.jface.wizard.IWizardPage;
-
-public interface SQLPage extends IWizardPage, IConstants {
+public interface SQLPage extends IWizardPage {
 	public void init(TableRow row, TableAdapter adapter);
 	public boolean performFinish();
 }
- 
\ No newline at end of file
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/SQLRowWizard.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/SQLRowWizard.java
index 8162d3c..ee89fdb 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/SQLRowWizard.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/SQLRowWizard.java
@@ -1,39 +1,28 @@
 package net.sourceforge.phpdt.sql.wizards;
 
-import net.sourceforge.phpdt.sql.IConstants;
+import org.eclipse.jface.wizard.Wizard;
+
 import net.sourceforge.phpdt.sql.sql.TableRow;
 import net.sourceforge.phpdt.sql.view.tableview.TableAdapter;
 
-import org.eclipse.jface.wizard.Wizard;
-
-public class SQLRowWizard extends Wizard implements IConstants {
-  SQLPage page;
-  TableRow row;
-  TableAdapter adapter;
-  public void init(
-    String title,
-    SQLPage page,
-    TableRow row,
-    TableAdapter adapter) {
-    if (DEBUG) {
-      System.out.println("Init SQL row wizard");
-    }
-    this.row = row;
-    this.adapter = adapter;
-    this.page = page;
-    setWindowTitle(title);
-  }
-  public boolean performFinish() {
-    if (DEBUG) {
-      System.out.println("Perform SQL row wizard finish");
-    }
-    return page.performFinish();
-  }
-  public void addPages() {
-    if (DEBUG) {
-      System.out.println("SQL row wizard adding pages");
-    }
-    page.init(row, adapter);
-    addPage(page);
-  }
+public class SQLRowWizard extends Wizard {
+	SQLPage page;
+	TableRow row;
+	TableAdapter adapter;
+	public void init(String title, SQLPage page, TableRow row, TableAdapter adapter) {
+		System.out.println("Init SQL row wizard"); //$NON-NLS-1$
+		this.row = row;
+		this.adapter = adapter;
+		this.page = page;
+		setWindowTitle(title);
+	}
+	public boolean performFinish() {
+		System.out.println("Perform SQL row wizard finish"); //$NON-NLS-1$
+		return page.performFinish();
+	}
+	public void addPages() {
+		System.out.println("SQL row wizard adding pages"); //$NON-NLS-1$
+		page.init(row, adapter);
+		addPage(page);
+	}
 }
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/SortFilterPage.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/SortFilterPage.java
index 3fa7cc3..476c113 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/SortFilterPage.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/SortFilterPage.java
@@ -20,151 +20,142 @@ import net.sourceforge.phpdt.sql.view.TableView;
 import net.sourceforge.phpdt.sql.view.tableview.TableAdapter;
 
 public class SortFilterPage extends WizardPage implements SQLPage {
-  TableRow row;
-  TableAdapter adapter;
-  Button[] filter;
-  Combo[] operator;
-  Text[] filterValues;
-  Button[] stringFlags;
-  Button[] sort;
-
-  String columnNames[];
-  Label query;
-  FilterSort filterSort = new FilterSort();
-  public SortFilterPage(String pageName) {
-    super(pageName);
-  }
-
-  public void init(TableRow row, TableAdapter adapter) {
-    this.row = row;
-    this.adapter = adapter;
-  }
-
-  public void createControl(Composite parent) {
-    if (DEBUG) {
-      System.out.println("page create control");
-    }
-    Composite container = new Composite(parent, SWT.NULL);
-    GridLayout layout = new GridLayout();
-    container.setLayout(layout);
-    int layoutColumns = 5;
-    layout.numColumns = layoutColumns;
-
-    if (DEBUG) {
-      if (row == null) {
-        System.out.println("Row is null");
-      }
-      if (row.getColumnNames() == null) {
-        System.out.println("Columns are null");
-      }
-      if (row.getTableData() == null) {
-        System.out.println("Data is null");
-      }
-    }
-
-    columnNames = row.getColumnNames();
-    String[] data = row.getTableData();
-    if (DEBUG) {
-      for (int i = 0; i < row.getColumnCount(); i++) {
-        System.out.println("data = " + i + "=" + data[i]);
-        System.out.println("column = " + i + "=" + columnNames[i]);
-      }
-    }
-    int size = row.getColumnCount();
-    filter = new Button[size];
-    operator = new Combo[size];
-    filterValues = new Text[size];
-    stringFlags = new Button[size];
-    sort = new Button[size];
-    for (int i = 0; i < row.getColumnCount(); i++) {
-      filter[i] = new Button(container, SWT.CHECK);
-      filter[i].setText(columnNames[i]);
-      filter[i].addSelectionListener(new SelectionListener() {
-        public void widgetDefaultSelected(SelectionEvent e) {
-        }
-        public void widgetSelected(SelectionEvent e) {
-          updateQuery();
-        }
-      });
-
-      operator[i] = new Combo(container, SWT.SINGLE | SWT.READ_ONLY);
-      operator[i].add("=");
-      operator[i].add("<>");
-      operator[i].add("<");
-      operator[i].add(">");
-      operator[i].addSelectionListener(new SelectionListener() {
-        public void widgetDefaultSelected(SelectionEvent e) {
-        }
-        public void widgetSelected(SelectionEvent e) {
-          updateQuery();
-        }
-      });
-
-      filterValues[i] = new Text(container, SWT.BORDER);
-      filterValues[i].setText(data[i]);
-      filterValues[i].addModifyListener(new ModifyListener() {
-        public void modifyText(ModifyEvent e) {
-          updateQuery();
-        }
-      });
-
-      stringFlags[i] = new Button(container, SWT.CHECK);
-      stringFlags[i].setText("String");
-      stringFlags[i].addSelectionListener(new SelectionListener() {
-        public void widgetDefaultSelected(SelectionEvent e) {
-        }
-        public void widgetSelected(SelectionEvent e) {
-          updateQuery();
-        }
-      });
-
-      final int index = i;
-      sort[i] = new Button(container, SWT.CHECK);
-      sort[i].setText(columnNames[i]);
-      sort[i].addSelectionListener(new SelectionListener() {
-        public void widgetDefaultSelected(SelectionEvent e) {
-        }
-        public void widgetSelected(SelectionEvent e) {
-          if (sort[index].getSelection()) {
-            filterSort.addSort(columnNames[index]);
-          } else {
-            filterSort.removeSort(columnNames[index]);
-          }
-          updateQuery();
-        }
-      });
-    }
-    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;
-    query.setLayoutData(gridData);
-
-    setControl(container);
-
-    setPageComplete(true);
-  }
-
-  public void updateQuery() {
-    filterSort.clearFilters();
-    for (int i = 0; i < filter.length; i++) {
-      if (filter[i].getSelection()) {
-        filterSort.addFilter(
-          filter[i].getText(),
-          operator[i].getText(),
-          filterValues[i].getText(),
-          stringFlags[i].getSelection());
-      }
-    }
-    query.setText(filterSort.toString());
-  }
-
-  public boolean performFinish() {
-    adapter.setFilterSort(filterSort);
-    TableView.getInstance().refreshCurrent();
-    return true;
-  }
+	TableRow row;
+	TableAdapter adapter;
+	Button[] filter;
+	Combo[] operator;
+	Text[] filterValues;
+	Button[] stringFlags;
+	Button[] sort;
+	
+	String columnNames[];
+	Label query;
+	FilterSort filterSort = new FilterSort();
+	public SortFilterPage(String pageName) {
+		super(pageName);
+	}
+
+	public void init(TableRow row, TableAdapter adapter) {
+		this.row = row;
+		this.adapter = adapter;
+	}
+
+	public void createControl(Composite parent) {
+		System.out.println("page create control"); //$NON-NLS-1$
+		
+		Composite container = new Composite(parent, SWT.NULL);
+		GridLayout layout = new GridLayout();
+		container.setLayout(layout);
+		int layoutColumns = 5;
+		layout.numColumns = layoutColumns;
+
+		if (row == null) {
+			System.out.println("Row is null"); //$NON-NLS-1$
+		}
+		if (row.getColumnNames() == null) {
+			System.out.println("Columns are null"); //$NON-NLS-1$
+		}
+		if (row.getTableData() == null) {
+			System.out.println("Data is null"); //$NON-NLS-1$
+		}
+		
+		columnNames = row.getColumnNames();
+		String[] data = row.getTableData();
+		for (int i = 0; i < row.getColumnCount(); i++) {
+			System.out.println("data = " + i + "=" + data[i]); //$NON-NLS-1$ //$NON-NLS-2$
+			System.out.println("column = " + i + "=" + columnNames[i]); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		int size = row.getColumnCount();
+		filter = new Button[size];
+		operator = new Combo[size];
+		filterValues = new Text[size];
+		stringFlags = new Button[size];
+		sort = new Button[size];
+		for (int i = 0; i < row.getColumnCount(); i++) {
+			filter[i] = new Button(container, SWT.CHECK);
+			filter[i].setText(columnNames[i]);
+			filter[i].addSelectionListener(new SelectionListener() {
+				public void widgetDefaultSelected(SelectionEvent e) {
+				}
+				public void widgetSelected(SelectionEvent e) {
+					updateQuery();
+				}
+			});
+
+			operator[i] = new Combo(container, SWT.SINGLE | SWT.READ_ONLY);
+			operator[i].add("="); //$NON-NLS-1$
+			operator[i].add("<>"); //$NON-NLS-1$
+			operator[i].add("<"); //$NON-NLS-1$
+			operator[i].add(">"); //$NON-NLS-1$
+			operator[i].addSelectionListener(new SelectionListener() {
+				public void widgetDefaultSelected(SelectionEvent e) {
+				}
+				public void widgetSelected(SelectionEvent e) {
+					updateQuery();
+				}
+			});
+			
+			filterValues[i] = new Text(container, SWT.BORDER);
+			filterValues[i].setText(data[i]);
+			filterValues[i].addModifyListener(new ModifyListener() {
+				public void modifyText(ModifyEvent e) {
+					updateQuery();
+				}				
+			});
+			
+			stringFlags[i] = new Button(container, SWT.CHECK);
+			stringFlags[i].setText("String"); //$NON-NLS-1$
+			stringFlags[i].addSelectionListener(new SelectionListener() {
+				public void widgetDefaultSelected(SelectionEvent e) {
+				}
+				public void widgetSelected(SelectionEvent e) {
+					updateQuery();
+				}
+			});
+			
+			final int index = i;
+			sort[i] = new Button(container, SWT.CHECK);
+			sort[i].setText(columnNames[i]);
+			sort[i].addSelectionListener(new SelectionListener() {
+				public void widgetDefaultSelected(SelectionEvent e) {
+				}
+				public void widgetSelected(SelectionEvent e) {
+					if (sort[index].getSelection()) {
+						filterSort.addSort(columnNames[index]);
+					} else {
+						filterSort.removeSort(columnNames[index]);
+					}
+					updateQuery();
+				}
+			});
+		}
+		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;
+		query.setLayoutData(gridData);
+
+ 		setControl(container);
+       
+		setPageComplete(true);
+	}
+
+	public void updateQuery() {
+		filterSort.clearFilters();
+		for (int i = 0; i < filter.length; i++) {
+			if (filter[i].getSelection()) {
+				filterSort.addFilter(filter[i].getText(), operator[i].getText(), filterValues[i].getText(), stringFlags[i].getSelection());
+			}
+		}
+		query.setText(filterSort.toString());
+	}
+
+	public boolean performFinish() {
+		adapter.setFilterSort(filterSort);
+		TableView.getInstance().refreshCurrent();
+		return true;
+	}
 }
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/UpdateRowPage.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/UpdateRowPage.java
index 35f3b0e..d9391ec 100644
--- a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/UpdateRowPage.java
+++ b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/wizards/UpdateRowPage.java
@@ -13,156 +13,175 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
+import net.sourceforge.phpdt.sql.Messages;
+import net.sourceforge.phpdt.sql.adapters.AdapterFactory;
+import net.sourceforge.phpdt.sql.adapters.DatabaseAdapter;
 import net.sourceforge.phpdt.sql.sql.MultiSQLServer;
 import net.sourceforge.phpdt.sql.sql.TableRow;
+import net.sourceforge.phpdt.sql.sql.metadata.ObjectMetaData;
+import net.sourceforge.phpdt.sql.view.BookmarkView;
+import net.sourceforge.phpdt.sql.view.bookmark.BookmarkNode;
+import net.sourceforge.phpdt.sql.view.bookmark.TreeNode;
 import net.sourceforge.phpdt.sql.view.tableview.TableAdapter;
 
 public class UpdateRowPage extends WizardPage implements SQLPage {
-  TableRow row;
-  String[] columnNames;
-  Text[] oldValues;
-  Text[] newValues;
-  Button[] primaryKeys;
-  Button[] setValues;
-  Label query;
-  public UpdateRowPage(String pageName) {
-    super(pageName);
-  }
+	TableRow row;
+	String[] columnNames;
+	Text[] oldValues;
+	Text[] newValues;
+	Button[] primaryKeys;
+	Button[] setValues;
+	Label query;
+	public UpdateRowPage(String pageName) {
+		super(pageName);
+	}
 
-  public void init(TableRow row, TableAdapter adapter) {
-    this.row = row;
-  }
+	public void init(TableRow row, TableAdapter adapter) {
+		this.row = row;
+	}
+	
+	public void createControl(Composite parent) {
+		System.out.println("page create control"); //$NON-NLS-1$
+		Composite container = new Composite(parent, SWT.NULL);
+		GridLayout layout = new GridLayout();
+		container.setLayout(layout);
+		BookmarkNode bookmark = row.getBookmarkNode();
+		TreeNode node = bookmark.find(row.getTable());
+		ObjectMetaData metadata = null;
+		if (node != null) metadata = node.getMetaData(); 
+		
+		int layoutColumns = 5;
+		layout.numColumns = layoutColumns;
 
-  public void createControl(Composite parent) {
-    if (DEBUG) {
-      System.out.println("page create control");
-    }
-    Composite container = new Composite(parent, SWT.NULL);
-    GridLayout layout = new GridLayout();
-    container.setLayout(layout);
-    int layoutColumns = 5;
-    layout.numColumns = layoutColumns;
+		if (row == null) {
+			System.out.println("Row is null"); //$NON-NLS-1$
+		}
+		if (row.getColumnNames() == null) {
+			System.out.println("Columns are null"); //$NON-NLS-1$
+		}
+		if (row.getTableData() == null) {
+			System.out.println("Data is null"); //$NON-NLS-1$
+		}
+		columnNames = row.getColumnNames();
+		String[] data = row.getTableData();
+		for (int i = 0; i < row.getColumnCount(); i++) {
+			System.out.println("data = " + i + "=" + data[i]); //$NON-NLS-1$ //$NON-NLS-2$
+			System.out.println("column = " + i + "=" + columnNames[i]); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		oldValues = new Text[row.getColumnCount()];
+		newValues = new Text[row.getColumnCount()];
+		primaryKeys = new Button[row.getColumnCount()];
+		setValues = new Button[row.getColumnCount()];
+		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 < row.getColumnCount(); i++) {
+			Label label = new Label(container, SWT.NULL);
+			label.setText(columnNames[i]);
+			oldValues[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
+			oldValues[i].setText(data[i]);
+			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$
+			if (metadata != null && metadata.getPrimaryKeyOrder(columnNames[i]) > 0) 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[i]);
+			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();
+				}
+			});
+		}
+		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;
+		query.setLayoutData(gridData);
 
-    if (DEBUG) {
-      if (row == null) {
-        System.out.println("Row is null");
-      }
-      if (row.getColumnNames() == null) {
-        System.out.println("Columns are null");
-      }
-      if (row.getTableData() == null) {
-        System.out.println("Data is null");
-      }
-    }
-
-    columnNames = row.getColumnNames();
-    String[] data = row.getTableData();
-    if (DEBUG) {
-      for (int i = 0; i < row.getColumnCount(); i++) {
-        System.out.println("data = " + i + "=" + data[i]);
-        System.out.println("column = " + i + "=" + columnNames[i]);
-      }
-    }
-    oldValues = new Text[row.getColumnCount()];
-    newValues = new Text[row.getColumnCount()];
-    primaryKeys = new Button[row.getColumnCount()];
-    setValues = new Button[row.getColumnCount()];
-    Label temp = new Label(container, SWT.NULL);
-    temp.setText("Column Name");
-    temp = new Label(container, SWT.NULL);
-    temp.setText("Old Value");
-    temp = new Label(container, SWT.NULL);
-    temp.setText("");
-    temp = new Label(container, SWT.NULL);
-    temp.setText("New Value");
-    temp = new Label(container, SWT.NULL);
-    temp.setText("");
-    for (int i = 0; i < row.getColumnCount(); i++) {
-      Label label = new Label(container, SWT.NULL);
-      label.setText(columnNames[i]);
-      oldValues[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
-      oldValues[i].setText(data[i]);
-      oldValues[i].addModifyListener(new ModifyListener() {
-        public void modifyText(ModifyEvent e) {
-          updateQuery();
-        }
-      });
-      primaryKeys[i] = new Button(container, SWT.CHECK);
-      primaryKeys[i].setText("Primary Key");
-      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[i]);
-      newValues[i].addModifyListener(new ModifyListener() {
-        public void modifyText(ModifyEvent e) {
-          updateQuery();
-        }
-      });
-      setValues[i] = new Button(container, SWT.CHECK);
-      setValues[i].setText("Set Value");
-      setValues[i].addSelectionListener(new SelectionListener() {
-        public void widgetDefaultSelected(SelectionEvent e) {
-        }
-        public void widgetSelected(SelectionEvent e) {
-          updateQuery();
-        }
-      });
-    }
-    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;
-    query.setLayoutData(gridData);
-
-    setControl(container);
-    updateQuery();
-
-    setPageComplete(true);
-  }
-  public void updateQuery() {
-    if (DEBUG) {
-      System.out.println("Updating query");
-    }
-    StringBuffer setClause = new StringBuffer();
-    StringBuffer whereClause = new StringBuffer();
-    for (int i = 0; i < columnNames.length; i++) {
-      if (primaryKeys[i].getSelection()) {
-        whereClause.append(columnNames[i]);
-        whereClause.append(" = ");
-        whereClause.append(oldValues[i].getText());
-        whereClause.append(", ");
-      }
-      if (setValues[i].getSelection()) {
-        setClause.append(columnNames[i]);
-        setClause.append(" = ");
-        setClause.append(newValues[i].getText());
-        setClause.append(", ");
-      }
-    }
-    if (whereClause.length() > 1) {
-      whereClause.deleteCharAt(whereClause.length() - 1);
-      whereClause.deleteCharAt(whereClause.length() - 1);
-    }
-    if (setClause.length() > 1) {
-      setClause.deleteCharAt(setClause.length() - 1);
-      setClause.deleteCharAt(setClause.length() - 1);
-    }
-    String query = "UPDATE " + row.getTable();
-    query += " SET " + setClause.toString();
-    query += " WHERE " + whereClause.toString();
-    this.query.setText(query);
-  }
-  public boolean performFinish() {
-    MultiSQLServer server = MultiSQLServer.getInstance();
-    server.execute(query.getText());
-    return true;
-  }
+ 		setControl(container);
+        updateQuery();
+       
+		setPageComplete(true);
+	}
+	public void updateQuery() {
+		System.out.println("Updating query"); //$NON-NLS-1$
+		StringBuffer setClause = new StringBuffer();
+		StringBuffer whereClause = new StringBuffer();
+		BookmarkNode bookmark = row.getBookmarkNode();
+		TreeNode node = bookmark.find(row.getTable());
+		ObjectMetaData metadata = null;
+		if (node != null) metadata = node.getMetaData(); 
+		DatabaseAdapter adapter = AdapterFactory.getInstance().getAdapter(bookmark.getType());
+		
+		int numValuesSet = 0;
+		int numValuesWhere = 0;
+		for (int i = 0; i < columnNames.length; i++) {
+			if (primaryKeys[i].getSelection()) {
+				String value = oldValues[i].getText();
+				if (numValuesWhere > 0) whereClause.append(" AND "); //$NON-NLS-1$
+				whereClause.append("("); //$NON-NLS-1$
+				whereClause.append(columnNames[i]);
+				whereClause.append(" = "); //$NON-NLS-1$
+				if (adapter != null && metadata != null && value != "") //$NON-NLS-1$
+					whereClause.append(adapter.quote(value, metadata.getColumnType(columnNames[i])));
+				else
+					whereClause.append(value);
+				whereClause.append(")"); //$NON-NLS-1$
+				numValuesWhere++;
+			} 
+			if (setValues[i].getSelection()) {
+				String value = newValues[i].getText();
+				if (numValuesSet > 0) setClause.append(", "); //$NON-NLS-1$
+				setClause.append(columnNames[i]);
+				setClause.append(" = "); //$NON-NLS-1$
+				if (adapter != null && metadata != null && value != "") //$NON-NLS-1$
+					setClause.append(adapter.quote(value, metadata.getColumnType(columnNames[i])));
+				else
+					setClause.append(value);
+				numValuesSet++;
+				
+			}
+		}
+			String query = "UPDATE " + row.getTable(); //$NON-NLS-1$
+		query += " SET " + setClause.toString(); //$NON-NLS-1$
+		query += " WHERE " + whereClause.toString(); //$NON-NLS-1$
+		this.query.setText(query);
+	}
+	public boolean performFinish() {
+	   MultiSQLServer server = MultiSQLServer.getInstance();
+	   BookmarkView bookmarkView = BookmarkView.getInstance(); 
+	   BookmarkNode bookmark = bookmarkView.getCurrentBookmark();
+	   server.execute(bookmark.getConnection(), query.getText());
+	   return true;
+	}
 }
\ No newline at end of file