synchronized from quantum plugin
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.quantum.sql / src / com / quantum / model / BookmarkCollection.java
index 58a854e..184f790 100644 (file)
@@ -6,20 +6,23 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Properties;
+import java.util.Set;
 import java.util.Vector;
 
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
 import com.quantum.IQuantumConstants;
 import com.quantum.Messages;
 import com.quantum.model.xml.ModelToXMLConverter;
 import com.quantum.sql.metadata.MetaDataXMLInterface;
 
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
 /**
  * The collection of database bookmarks that the Quantum plug-in knows about.
  * This collection is loaded by the QuantumPlugin class before any Quantum plugin 
@@ -33,6 +36,7 @@ public class BookmarkCollection {
     private List bookmarks = new Vector();
     private boolean changed = false;
     private PropertyChangeSupport support = new PropertyChangeSupport(this);
+       private Set drivers = Collections.synchronizedSet(new HashSet());
     
     private BookmarkCollection() {
     }
@@ -93,6 +97,7 @@ public class BookmarkCollection {
                 newBookmarks.add(bookmark);
             }
             i++;
+            this.drivers.add(new JDBCDriver(bookmark.getDriver(), driverFile));
         }
         if (overwrite) {
             this.bookmarks = newBookmarks;
@@ -127,6 +132,10 @@ public class BookmarkCollection {
     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 (Iterator i = this.drivers.iterator(); i.hasNext(); ) {
+            JDBCDriver driver = (JDBCDriver) i.next();
+            ModelToXMLConverter.getInstance().convert(bookmarkRoot, driver);
+        }
         for (int i = 0; i < bookmarks.size(); i++) {
             Bookmark b = (Bookmark) bookmarks.get(i);
             ModelToXMLConverter.getInstance().convert(bookmarkRoot, b);
@@ -141,7 +150,44 @@ public class BookmarkCollection {
     public void importXML(Element root) {
         this.changed = true;
         System.out.println("Bookmarks: Loading from Element"); //$NON-NLS-1$
-        Vector newBookmarks = new Vector();
+        importDrivers(root);
+        Vector newBookmarks = importBookmarks(root);
+        this.bookmarks.addAll(newBookmarks);
+        this.support.firePropertyChange("bookmarks", null, null);
+    }
+
+    /**
+        * @param root
+        * @return
+        */
+       private void importDrivers(Element root) {
+        NodeList nodes = root.getElementsByTagName("jdbcDriver"); //$NON-NLS-1$
+        for (int i = 0; i < nodes.getLength(); i++) {
+               Element driver = (Element) nodes.item(i);
+               addDriver(new JDBCDriver(
+                       driver.getAttribute("className"),
+                       driver.getAttribute("jarFileName"),
+                       driver.getAttribute("name"),
+                       driver.getAttribute("version")));
+        }
+       }
+
+       /**
+        * @param driver
+        */
+       public void addDriver(JDBCDriver driver) {
+               if (!this.drivers.contains(driver)) {
+                       this.drivers.add(driver);
+                       this.support.firePropertyChange("drivers", null, driver);
+               }
+       }
+
+       /**
+        * @param root
+        * @return
+        */
+       private Vector importBookmarks(Element root) {
+               Vector newBookmarks = new Vector();
         NodeList nodes = root.getElementsByTagName("bookmark"); //$NON-NLS-1$
         for (int i = 0; i < nodes.getLength(); i++) {
             Bookmark bookmark = new Bookmark();
@@ -160,11 +206,15 @@ public class BookmarkCollection {
                        bookmark.setAutoCommit(Boolean.TRUE.toString().equalsIgnoreCase(
                                MetaDataXMLInterface.getElementText(column,"autoCommit", "True"))); //$NON-NLS-1$
                        bookmark.setAutoCommitPreference(MetaDataXMLInterface.getElementText(column,"autoCommitPreference", IQuantumConstants.autoCommitTrue)); //$NON-NLS-1$
-            bookmark.setDriver(MetaDataXMLInterface.getElementText(column,"driver")); //$NON-NLS-1$
             bookmark.addSchema(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$
             NodeList children = column.getElementsByTagName(Messages.getString("ExportXMLAction.OtherSchemas"));
+
+            String driverClassName = MetaDataXMLInterface.getElementText(column,"driver"); //$NON-NLS-1$
+            String driverFile = MetaDataXMLInterface.getElementText(column,"driverLocation"); //$NON-NLS-1$
+            
+            bookmark.setJDBCDriver(new JDBCDriver(driverClassName, driverFile));
+            
             if (children.getLength() > 0) {
                 importSchemas((Element) children.item(0), bookmark);
             }
@@ -175,11 +225,10 @@ public class BookmarkCollection {
             importQuickList(bookmark, column);
             importQueryList(bookmark, column);
         }
-        this.bookmarks.addAll(newBookmarks);
-        this.support.firePropertyChange("bookmarks", null, null);
-    }
+               return newBookmarks;
+       }
 
-    private void importSchemas(Element otherSchemas, Bookmark bookmark) {
+       private void importSchemas(Element otherSchemas, Bookmark bookmark) {
         Vector vector = MetaDataXMLInterface.getVectorText(otherSchemas, Messages.getString("ExportXMLAction.SchemaName"));
         List list = new ArrayList();
         for (Iterator i = vector.iterator(); i.hasNext();) {
@@ -254,6 +303,10 @@ public class BookmarkCollection {
     public Bookmark[] getBookmarks() {
         return (Bookmark[]) this.bookmarks.toArray(new Bookmark[this.bookmarks.size()]);
     }
+    
+    public JDBCDriver[] getJDBCDrivers() {
+       return (JDBCDriver[]) this.drivers.toArray(new JDBCDriver[this.drivers.size()]);
+    }
     /**
      * @return
      */
@@ -308,5 +361,33 @@ public class BookmarkCollection {
                return copyName;
        }
 
+       /**
+        * @param driver
+        * @param driverFile
+        */
+       public JDBCDriver findDriver(String driverClassName, String driverFile) {
+               JDBCDriver temp = new JDBCDriver(driverClassName, driverFile);
+               return findDriver(temp);
+       }
+
+       /**
+        * @param temp
+        * @return
+        */
+       public JDBCDriver findDriver(JDBCDriver temp) {
+               JDBCDriver result = null;
+               for (Iterator i = this.drivers.iterator(); result == null && i.hasNext();) {
+                       JDBCDriver driver = (JDBCDriver) i.next();
+                       if (temp.equals(driver)) {
+                               result = driver;
+                       }
+               }
+               if (result == null) {
+                       addDriver(temp);
+                       result = temp;
+               }
+               return result;
+       }
+
 
 }