Index: apichanges.xml =================================================================== RCS file: /cvs/db/apichanges.xml,v retrieving revision 1.1 diff -u -r1.1 apichanges.xml --- apichanges.xml 12 Sep 2005 13:53:22 -0000 1.1 +++ apichanges.xml 7 Dec 2005 20:08:20 -0000 @@ -79,12 +79,27 @@ Initial version released - + First initial release of the Database Explorer API. + + + + + Added a displayName property to JDBCDriver + + + + + +

A displayName property was added to JDBCDriver and the name property was + turned into a programmatic name. A new JDBC driver registration DTD + (version 1.1) was added containing an element for the new property. A + driver-name element was added to the connection registration format, allowing + to specify the exact driver to be used by that connection.

Index: arch.xml =================================================================== RCS file: /cvs/db/arch.xml,v retrieving revision 1.8 diff -u -r1.8 arch.xml --- arch.xml 7 Dec 2005 15:52:25 -0000 1.8 +++ arch.xml 7 Dec 2005 20:08:20 -0000 @@ -154,14 +154,15 @@ JDBCDriverManager or by registering an XML file which describes the driver in the module layer. The XML file is described by the - JDBC Driver DTD. + JDBC Driver DTD. An example of a registration file describing the JDBC driver for PostgreSQL follows:

     <?xml version='1.0'?>
     <!DOCTYPE driver PUBLIC '-//NetBeans//DTD JDBC Driver 1.0//EN' 'http://www.netbeans.org/dtds/jdbc-driver-1_0.dtd'>
     <driver>
-      <name value='PostgreSQL (v7.0 and later)'/>
+      <name value='postgresql-7'/>
+      <display-name value='PostgreSQL (v7.0 and later)'/>
       <class value='org.postgresql.Driver'/>
       <urls>
         <url value='file:/folder1/folder2/drivers/pg74.1jdbc3.jar'/>
@@ -212,6 +213,7 @@
     <!DOCTYPE connection PUBLIC '-//NetBeans//DTD Database Connection 1.0//EN' 'http://www.netbeans.org/dtds/connection-1_0.dtd'>
     <connection>
       <driver-class value='org.postgresql.Driver'/>
+      <driver-name value='postgres-7'/>
       <database-url value='jdbc:postgresql:test'/>
       <schema value='public'/>
       <user value='test'/>
Index: src/org/netbeans/api/db/explorer/JDBCDriver.java
===================================================================
RCS file: /cvs/db/src/org/netbeans/api/db/explorer/JDBCDriver.java,v
retrieving revision 1.2
diff -u -r1.2 JDBCDriver.java
--- src/org/netbeans/api/db/explorer/JDBCDriver.java	17 Aug 2005 16:31:57 -0000	1.2
+++ src/org/netbeans/api/db/explorer/JDBCDriver.java	7 Dec 2005 20:08:20 -0000
@@ -25,29 +25,32 @@
     
     private URL[] urls;
     private String clazz;
+    private String displayName;
     private String name;
     
-    JDBCDriver(String name, String clazz, URL[] urls) {
-        assert name != null && clazz != null && urls != null;
-        this.clazz = clazz;
+    JDBCDriver(String name, String displayName, String clazz, URL[] urls) {
+        assert name != null && displayName != null && clazz != null && urls != null;
         this.name = name;
+        this.displayName = displayName;
+        this.clazz = clazz;
         this.urls = urls;
     }
 
     /**
      * Creates a new JDBCDriver instance.
      *
-     * @param name the name of the driver; must not be null.
+     * @param name the programmatic name of the driver; must not be null.
+     * @param displayName the display name of the driver (used for example to display the driver in the UI); must not be null.
      * @param clazz the JDBC driver class; must not be null.
      * @param urls the array of the JDBC driver files URLs; must not be null.
      * 
      * @throws NullPointerException if any of the parameters is null.
      */
-    public static JDBCDriver create(String name, String clazz, URL[] urls) {
-        if (name == null || clazz == null || urls == null) {
+    public static JDBCDriver create(String name, String displayName, String clazz, URL[] urls) {
+        if (name == null || displayName == null || clazz == null || urls == null) {
             throw new NullPointerException();
         }
-        return new JDBCDriver(name, clazz, urls);
+        return new JDBCDriver(name, displayName, clazz, urls);
     }
     
     /**
@@ -69,15 +72,27 @@
     }
     
     /**
-     * Return the user defined driver name.
+     * Returns the display name of the driver (used for example to display the driver in the UI).
+     *
+     * @return the display name of the driver.
+     */
+    public String getDisplayName() {
+        return displayName;
+    }
+    
+    /**
+     * Return the programmatic driver name.
      *
-     * @return the user defined driver name.
+     * @return the programmatic driver name.
      */
     public String getName() {
         return name;
     }
     
     public String toString() {
-        return "JDBCDriver[name='" + name + ",className='" + clazz + ",urls=" + Arrays.asList(urls) + "]";
+        return "JDBCDriver[name='" + name + // NOI18N
+                "',displayName='" + displayName + // NOI18N
+                "',className='" + clazz + // NOI18N
+                "',urls=" + Arrays.asList(urls) + "]"; // NOI18N
     }
 }
Index: src/org/netbeans/modules/db/explorer/DatabaseConnection.java
===================================================================
RCS file: /cvs/db/src/org/netbeans/modules/db/explorer/DatabaseConnection.java,v
retrieving revision 1.45
diff -u -r1.45 DatabaseConnection.java
--- src/org/netbeans/modules/db/explorer/DatabaseConnection.java	5 Dec 2005 17:24:07 -0000	1.45
+++ src/org/netbeans/modules/db/explorer/DatabaseConnection.java	7 Dec 2005 20:08:21 -0000
@@ -154,9 +154,10 @@
         name = getName();
     }
     
-    public DatabaseConnection(String driver, String database, String theschema, String user, String password) {
+    public DatabaseConnection(String driver, String driverName, String database, String theschema, String user, String password) {
         this();
         drv = driver;
+        drvname = driverName;
         db = database;
         usr = user;
         schema = theschema;
Index: src/org/netbeans/modules/db/explorer/DatabaseConnectionConvertor.java
===================================================================
RCS file: /cvs/db/src/org/netbeans/modules/db/explorer/DatabaseConnectionConvertor.java,v
retrieving revision 1.5
diff -u -r1.5 DatabaseConnectionConvertor.java
--- src/org/netbeans/modules/db/explorer/DatabaseConnectionConvertor.java	4 Oct 2005 13:12:31 -0000	1.5
+++ src/org/netbeans/modules/db/explorer/DatabaseConnectionConvertor.java	7 Dec 2005 20:08:21 -0000
@@ -142,7 +142,6 @@
                 reader.parse(is);
             } catch (SAXException ex) {
                 Exception x = ex.getException();
-                ex.printStackTrace();
                 if (x instanceof java.io.IOException)
                     throw (IOException)x;
                 else
@@ -165,6 +164,7 @@
     private static DatabaseConnection createDatabaseConnection(Handler handler) {
         DatabaseConnection dbconn = new DatabaseConnection(
                 handler.driverClass, 
+                handler.driverName,
                 handler.connectionUrl,
                 handler.schema,
                 handler.user,
@@ -308,6 +308,7 @@
             pw.println(""); //NOI18N
             pw.println(""); //NOI18N
             pw.println("  "); //NOI18N
+            pw.println("  "); // NOI18N
             pw.println("  "); //NOI18N
             if (instance.getSchema() != null) {
                 pw.println("  "); //NOI18N
@@ -325,12 +326,14 @@
     private static final class Handler extends DefaultHandler {
         
         private static final String ELEMENT_DRIVER_CLASS = "driver-class"; // NOI18N
+        private static final String ELEMENT_DRIVER_NAME = "driver-name"; // NOI18N
         private static final String ELEMENT_DATABASE_URL = "database-url"; // NOI18N
         private static final String ELEMENT_SCHEMA = "schema"; // NOI18N
         private static final String ELEMENT_USER = "user"; // NOI18N
         private static final String ATTR_PROPERTY_VALUE = "value"; // NOI18N
         
         String driverClass;
+        String driverName;
         String connectionUrl;
         String schema;
         String user;
@@ -345,6 +348,8 @@
             String value = attrs.getValue(ATTR_PROPERTY_VALUE);
             if (ELEMENT_DRIVER_CLASS.equals(qName)) {
                 driverClass = value;
+            } else if (ELEMENT_DRIVER_NAME.equals(qName)) {
+                driverName = value;
             } else if (ELEMENT_DATABASE_URL.equals(qName)) {
                 connectionUrl = value;
             } else if (ELEMENT_SCHEMA.equals(qName)) {
Index: src/org/netbeans/modules/db/explorer/DatabaseDriver.java
===================================================================
RCS file: /cvs/db/src/org/netbeans/modules/db/explorer/DatabaseDriver.java,v
retrieving revision 1.13
diff -u -r1.13 DatabaseDriver.java
--- src/org/netbeans/modules/db/explorer/DatabaseDriver.java	11 Feb 2004 09:00:52 -0000	1.13
+++ src/org/netbeans/modules/db/explorer/DatabaseDriver.java	7 Dec 2005 20:08:21 -0000
@@ -15,6 +15,9 @@
 
 import java.util.*;
 import java.io.*;
+import org.netbeans.api.db.explorer.JDBCDriver;
+
+// XXX this class is completely unuseful and should be removed
 
 /**
 * xxx
@@ -27,6 +30,7 @@
     private String url;
     private String prefix;
     private String adaptor;
+    private transient JDBCDriver jdbcDriver;
 
     static final long serialVersionUID =7937512184160164098L;
     public DatabaseDriver()
@@ -45,6 +49,14 @@
         url = durl;
         prefix = dprefix;
     }
+    
+    public DatabaseDriver(String dname, String durl, String dprefix, JDBCDriver djdbcDriver)
+    {
+        name = dname;
+        url = durl;
+        prefix = dprefix;
+        jdbcDriver = djdbcDriver;
+    }
 
     public DatabaseDriver(String dname, String durl, String dprefix, String dbadap)
     {
@@ -96,6 +108,10 @@
         else if (name.startsWith("Database.Adaptors.")) adaptor = name; //NOI18N
         else adaptor = "Database.Adaptors."+name; //NOI18N
         //		System.out.println("Metadata adaptor class set = "+adaptor);
+    }
+    
+    public JDBCDriver getJDBCDriver() {
+        return jdbcDriver;
     }
 
     public boolean equals(Object obj)
Index: src/org/netbeans/modules/db/explorer/DatabaseOption.java
===================================================================
RCS file: /cvs/db/src/org/netbeans/modules/db/explorer/DatabaseOption.java,v
retrieving revision 1.29
diff -u -r1.29 DatabaseOption.java
--- src/org/netbeans/modules/db/explorer/DatabaseOption.java	17 Aug 2005 16:31:59 -0000	1.29
+++ src/org/netbeans/modules/db/explorer/DatabaseOption.java	7 Dec 2005 20:08:21 -0000
@@ -214,7 +214,8 @@
                 while (it.hasNext()) {
                     drv = (String) it.next();
                     if (jf.getEntry(drv.replace('.', '/') + ".class") != null) {//NOI18N
-                        JDBCDriver driver = JDBCDriver.create(DriverListUtil.findFreeName(DriverListUtil.getName(drv)), drv, new URL[] {files[i].toURL()});
+                        String driverName = DriverListUtil.findFreeName(DriverListUtil.getName(drv));
+                        JDBCDriver driver = JDBCDriver.create(driverName, driverName, drv, new URL[] {files[i].toURL()});
                         try {
                             JDBCDriverManager.getDefault().addDriver(driver);
                         } catch (DatabaseException e) {
Index: src/org/netbeans/modules/db/explorer/DbURLClassLoader.java
===================================================================
RCS file: /cvs/db/src/org/netbeans/modules/db/explorer/DbURLClassLoader.java,v
retrieving revision 1.2
diff -u -r1.2 DbURLClassLoader.java
--- src/org/netbeans/modules/db/explorer/DbURLClassLoader.java	17 Aug 2005 16:32:00 -0000	1.2
+++ src/org/netbeans/modules/db/explorer/DbURLClassLoader.java	7 Dec 2005 20:08:21 -0000
@@ -7,7 +7,7 @@
  * http://www.sun.com/
  *
  * The Original Code is NetBeans. The Initial Developer of the Original
- * Code is Sun Microsystems, Inc. Portions Copyright 1997-2004 Sun
+ * Code is Sun Microsystems, Inc. Portions Copyright 1997-2005 Sun
  * Microsystems, Inc. All Rights Reserved.
  */
 
@@ -19,6 +19,8 @@
 import java.security.CodeSource;
 import java.security.PermissionCollection;
 import java.security.Permissions;
+import java.util.Arrays;
+import org.openide.ErrorManager;
 
 /**
  * This class loader is used to load JDBC drivers from their locations.
@@ -27,9 +29,15 @@
  */
 public class DbURLClassLoader extends URLClassLoader {
     
+    private static final ErrorManager LOGGER = ErrorManager.getDefault().getInstance("org.netbeans.modules.db.explorer"); // NOI18N
+    private static final boolean LOG = LOGGER.isLoggable(ErrorManager.INFORMATIONAL);
+    
     /** Creates a new instance of DbURLClassLoader */
     public DbURLClassLoader(URL[] urls) {
         super(urls);
+        if (LOG) {
+            LOGGER.log(ErrorManager.INFORMATIONAL, "Creating DbURLClassLoader for " + Arrays.asList(urls)); // NOI18N
+        }
     }
     
     protected PermissionCollection getPermissions(CodeSource codesource) {
Index: src/org/netbeans/modules/db/explorer/actions/AddDriverAction.java
===================================================================
RCS file: /cvs/db/src/org/netbeans/modules/db/explorer/actions/AddDriverAction.java,v
retrieving revision 1.23
diff -u -r1.23 AddDriverAction.java
--- src/org/netbeans/modules/db/explorer/actions/AddDriverAction.java	17 Aug 2005 16:32:00 -0000	1.23
+++ src/org/netbeans/modules/db/explorer/actions/AddDriverAction.java	7 Dec 2005 20:08:21 -0000
@@ -48,7 +48,7 @@
             ActionListener actionListener = new ActionListener() {
                 public void actionPerformed(ActionEvent event) {
                     if (event.getSource() == DialogDescriptor.OK_OPTION) {
-                        String name = dlgPanel.getName();
+                        String name = dlgPanel.getDisplayName();
                         List drvLoc = dlgPanel.getDriverLocation();
                         String drvClass = dlgPanel.getDriverClass();
 
@@ -76,7 +76,7 @@
                             name = drvClass;
 
                         try {
-                            driver = JDBCDriver.create(name, drvClass, (URL[]) drvLoc.toArray(new URL[drvLoc.size()]));
+                            driver = JDBCDriver.create(name, name, drvClass, (URL[]) drvLoc.toArray(new URL[drvLoc.size()]));
                             JDBCDriverManager.getDefault().addDriver(driver);
                         } catch (DatabaseException exc) {
                             //PENDING
Index: src/org/netbeans/modules/db/explorer/actions/ConnectUsingDriverAction.java
===================================================================
RCS file: /cvs/db/src/org/netbeans/modules/db/explorer/actions/ConnectUsingDriverAction.java,v
retrieving revision 1.31
diff -u -r1.31 ConnectUsingDriverAction.java
--- src/org/netbeans/modules/db/explorer/actions/ConnectUsingDriverAction.java	25 Nov 2005 15:32:30 -0000	1.31
+++ src/org/netbeans/modules/db/explorer/actions/ConnectUsingDriverAction.java	7 Dec 2005 20:08:21 -0000
@@ -64,8 +64,19 @@
     public void performAction(Node[] activatedNodes) {
         Node node = activatedNodes[0];
         DriverNodeInfo info = (DriverNodeInfo) node.getCookie(DatabaseNodeInfo.class);
-        // info.getURL() returns the driver class
-        new NewConnectionDialogDisplayer().showDialog(info.getName(), info.getURL());
+        JDBCDriver driver = info.getJDBCDriver();
+        
+        String driverName, driverClass;
+        if (driver != null) {
+            driverName = driver.getName();
+            driverClass = driver.getClassName();
+        } else {
+            // no JDBCDriver, have to resort to the info
+            driverName = info.getName();
+            // info.getURL() suprisingly returns the driver class
+            driverClass = info.getURL();
+        }
+        new NewConnectionDialogDisplayer().showDialog(driverName, driverClass);
     }
     
     public static final class NewConnectionDialogDisplayer extends ConnectionDialogMediator {
Index: src/org/netbeans/modules/db/explorer/actions/CustomizeDriverAction.java
===================================================================
RCS file: /cvs/db/src/org/netbeans/modules/db/explorer/actions/CustomizeDriverAction.java,v
retrieving revision 1.5
diff -u -r1.5 CustomizeDriverAction.java
--- src/org/netbeans/modules/db/explorer/actions/CustomizeDriverAction.java	17 Aug 2005 16:32:01 -0000	1.5
+++ src/org/netbeans/modules/db/explorer/actions/CustomizeDriverAction.java	7 Dec 2005 20:08:21 -0000
@@ -56,19 +56,17 @@
 		final DriverNodeInfo info = (DriverNodeInfo) n[0].getCookie(DriverNodeInfo.class);
         if (info == null)
             return; //should not happen
-        JDBCDriver[] drvs = JDBCDriverManager.getDefault().getDrivers(info.getURL());
-        for (int i = 0; i < drvs.length; i++)
-            if (activatedNodes[0].getName().equals(drvs[i].getName())) {
-                drvIndex = i;
-                break;
-            }
-        final AddDriverDialog dlgPanel = new AddDriverDialog(drvs[drvIndex]);
+        JDBCDriver drv = info.getJDBCDriver();
+        if (drv == null) {
+            return;
+        }
+        final AddDriverDialog dlgPanel = new AddDriverDialog(drv);
         
         
         ActionListener actionListener = new ActionListener() {
             public void actionPerformed(ActionEvent event) {
                 if (event.getSource() == DialogDescriptor.OK_OPTION) {
-                    String name = dlgPanel.getName();
+                    String displayName = dlgPanel.getDisplayName();
                     List drvLoc = dlgPanel.getDriverLocation();
                     String drvClass = dlgPanel.getDriverClass();
                     
@@ -91,12 +89,13 @@
                     closeDialog();
                     
                     //create driver instance and save it in the XML format
-                    if (name == null || name.equals(""))
-                        name = drvClass;
+                    if (displayName == null || displayName.equals(""))
+                        displayName = drvClass;
                     
                     try {
+                        String oldName = info.getJDBCDriver().getName();
                         info.delete();
-                        JDBCDriverManager.getDefault().addDriver(JDBCDriver.create(name, drvClass, (URL[]) drvLoc.toArray(new URL[drvLoc.size()])));
+                        JDBCDriverManager.getDefault().addDriver(JDBCDriver.create(oldName, displayName, drvClass, (URL[]) drvLoc.toArray(new URL[drvLoc.size()])));
                     } catch (IOException exc) {
                         //PENDING
                     } catch (DatabaseException exc) {
Index: src/org/netbeans/modules/db/explorer/dlg/AddDriverDialog.java
===================================================================
RCS file: /cvs/db/src/org/netbeans/modules/db/explorer/dlg/AddDriverDialog.java,v
retrieving revision 1.33
diff -u -r1.33 AddDriverDialog.java
--- src/org/netbeans/modules/db/explorer/dlg/AddDriverDialog.java	22 Aug 2005 14:07:29 -0000	1.33
+++ src/org/netbeans/modules/db/explorer/dlg/AddDriverDialog.java	7 Dec 2005 20:08:21 -0000
@@ -95,7 +95,7 @@
         }
         drvClassComboBox.addItem(drv.getClassName());
         drvClassComboBox.setSelectedItem(drv.getClassName());
-        nameTextField.setText(drv.getName());
+        nameTextField.setText(drv.getDisplayName());
     }
     
     private void initAccessibility() {
@@ -406,11 +406,8 @@
     private javax.swing.JButton removeButton;
     // End of variables declaration//GEN-END:variables
     
-    public String getName() {
-        if (nameTextField != null)
-            return nameTextField.getText();
-        else
-            return super.getName();
+    public String getDisplayName() {
+        return nameTextField.getText();
     }
     
     public List getDriverLocation() {
Index: src/org/netbeans/modules/db/explorer/dlg/NewConnectionPanel.java
===================================================================
RCS file: /cvs/db/src/org/netbeans/modules/db/explorer/dlg/NewConnectionPanel.java,v
retrieving revision 1.17
diff -u -r1.17 NewConnectionPanel.java
--- src/org/netbeans/modules/db/explorer/dlg/NewConnectionPanel.java	16 Nov 2005 15:41:37 -0000	1.17
+++ src/org/netbeans/modules/db/explorer/dlg/NewConnectionPanel.java	7 Dec 2005 20:08:21 -0000
@@ -452,7 +452,7 @@
         }
         
         public String toString() {
-            return driver.getName();
+            return driver.getDisplayName();
         }
     }
 }
Index: src/org/netbeans/modules/db/explorer/driver/JDBCDriverConvertor.java
===================================================================
RCS file: /cvs/db/src/org/netbeans/modules/db/explorer/driver/JDBCDriverConvertor.java,v
retrieving revision 1.11
diff -u -r1.11 JDBCDriverConvertor.java
--- src/org/netbeans/modules/db/explorer/driver/JDBCDriverConvertor.java	13 Oct 2005 12:16:19 -0000	1.11
+++ src/org/netbeans/modules/db/explorer/driver/JDBCDriverConvertor.java	7 Dec 2005 20:08:22 -0000
@@ -7,7 +7,7 @@
  * http://www.sun.com/
  *
  * The Original Code is NetBeans. The Initial Developer of the Original
- * Code is Sun Microsystems, Inc. Portions Copyright 1997-2004 Sun
+ * Code is Sun Microsystems, Inc. Portions Copyright 1997-2005 Sun
  * Microsystems, Inc. All Rights Reserved.
  */
 
@@ -60,6 +60,11 @@
 public class JDBCDriverConvertor implements Environment.Provider, InstanceCookie.Of {
     
     /**
+     * The reference to the instance of Environment.Provider
+     */
+    private static WeakReference providerRef;
+    
+    /**
      * The path where the drivers are registered in the SystemFileSystem.
      */
     public static final String DRIVERS_PATH = "Databases/JDBCDrivers"; // NOI18N
@@ -83,8 +88,12 @@
 
     Reference refDriver = new WeakReference(null);
 
-    private static JDBCDriverConvertor createProvider() {
-        return new JDBCDriverConvertor();
+    private static synchronized JDBCDriverConvertor createProvider() {
+        if (providerRef == null) {
+            providerRef = new WeakReference(new JDBCDriverConvertor());
+        }
+        
+        return (JDBCDriverConvertor)providerRef.get();
     }
     
     private JDBCDriverConvertor() {
@@ -163,7 +172,10 @@
             return null;
         }
         
-        return JDBCDriver.create(handler.name, handler.clazz, urls);
+        if (handler.displayName == null) {
+            handler.displayName = handler.name;
+        }
+        return JDBCDriver.create(handler.name, handler.displayName, handler.clazz, urls);
     }
     
     // Other
@@ -321,9 +333,10 @@
 
         void write(PrintWriter pw) throws IOException {
             pw.println(""); //NOI18N
-            pw.println(""); //NOI18N
+            pw.println(""); //NOI18N
             pw.println(""); //NOI18N
             pw.println("  "); //NOI18N
+            pw.println("  "); //NOI18N
             pw.println("  "); //NOI18N
             pw.println("  "); //NOI18N
             URL[] urls = instance.getURLs();
@@ -341,11 +354,13 @@
     private static final class Handler extends DefaultHandler {
         
         private static final String ELEMENT_NAME = "name"; // NOI18N
+        private static final String ELEMENT_DISPLAY_NAME = "display-name"; // NOI18N
         private static final String ELEMENT_CLASS = "class"; // NOI18N
         private static final String ELEMENT_URL = "url"; // NOI18N
         private static final String ATTR_PROPERTY_VALUE = "value"; // NOI18N
         
         String name;
+        String displayName;
         String clazz;
         LinkedList urls = new LinkedList();
 
@@ -358,6 +373,8 @@
         public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
             if (ELEMENT_NAME.equals(qName)) {
                 name = attrs.getValue(ATTR_PROPERTY_VALUE);
+            } else if (ELEMENT_DISPLAY_NAME.equals(qName)) {
+                displayName = attrs.getValue(ATTR_PROPERTY_VALUE);
             } else if (ELEMENT_CLASS.equals(qName)) {
                 clazz = attrs.getValue(ATTR_PROPERTY_VALUE);
             } else if (ELEMENT_URL.equals(qName)) {
Index: src/org/netbeans/modules/db/explorer/infos/DriverListNodeInfo.java
===================================================================
RCS file: /cvs/db/src/org/netbeans/modules/db/explorer/infos/DriverListNodeInfo.java,v
retrieving revision 1.23
diff -u -r1.23 DriverListNodeInfo.java
--- src/org/netbeans/modules/db/explorer/infos/DriverListNodeInfo.java	4 Dec 2005 22:21:28 -0000	1.23
+++ src/org/netbeans/modules/db/explorer/infos/DriverListNodeInfo.java	7 Dec 2005 20:08:22 -0000
@@ -63,7 +63,7 @@
                     file = file.substring(1);
                 sb.append(file);
             }
-            DatabaseDriver drv = new DatabaseDriver(drvs[i].getName(), drvs[i].getClassName(), sb.toString());
+            DatabaseDriver drv = new DatabaseDriver(drvs[i].getDisplayName(), drvs[i].getClassName(), sb.toString(), drvs[i]);
             DriverNodeInfo chinfo = (DriverNodeInfo) DatabaseNodeInfo.createNodeInfo(this, DatabaseNode.DRIVER);
             if (chinfo != null && drv != null) {
                 chinfo.setDatabaseDriver(drv);
Index: src/org/netbeans/modules/db/explorer/infos/DriverNodeInfo.java
===================================================================
RCS file: /cvs/db/src/org/netbeans/modules/db/explorer/infos/DriverNodeInfo.java,v
retrieving revision 1.23
diff -u -r1.23 DriverNodeInfo.java
--- src/org/netbeans/modules/db/explorer/infos/DriverNodeInfo.java	17 Aug 2005 16:32:05 -0000	1.23
+++ src/org/netbeans/modules/db/explorer/infos/DriverNodeInfo.java	7 Dec 2005 20:08:22 -0000
@@ -41,7 +41,10 @@
 
     public void delete() throws IOException {
         try {
-            JDBCDriverManager.getDefault().removeDriver(getJDBCDriver());
+            JDBCDriver driver = getJDBCDriver();
+            if (driver != null) {
+                JDBCDriverManager.getDefault().removeDriver(driver);
+            }
         } catch (DatabaseException e) {
             // PENDING
         }
@@ -59,20 +62,19 @@
     }
 
     private boolean checkDriverFiles() {
-        JDBCDriver[] drvs = JDBCDriverManager.getDefault().getDrivers(getURL());
-        for (int i = 0; i < drvs.length; i++)
-            if (drvs[i].getName().equals(getName()))
-                return JDBCDriverSupport.isAvailable(drvs[i]);
-        
-        return false;
+        JDBCDriver driver = getJDBCDriver();
+        if (driver != null) {
+            return JDBCDriverSupport.isAvailable(driver);
+        } else {
+            return false;
+        }
     }
     
-    private JDBCDriver getJDBCDriver() {
-        JDBCDriver[] drvs = JDBCDriverManager.getDefault().getDrivers(getURL());
-        for (int i = 0; i < drvs.length; i++) {
-            if (drvs[i].getName().equals(getName()))
-                return drvs[i];
+    public JDBCDriver getJDBCDriver() {
+        DatabaseDriver dbdrv = getDatabaseDriver();
+        if (dbdrv == null) {
+            return null;
         }
-        return null;
+        return dbdrv.getJDBCDriver();
     }
 }
Index: src/org/netbeans/modules/db/resources/JDBCODBC.xml
===================================================================
RCS file: /cvs/db/src/org/netbeans/modules/db/resources/JDBCODBC.xml,v
retrieving revision 1.2
diff -u -r1.2 JDBCODBC.xml
--- src/org/netbeans/modules/db/resources/JDBCODBC.xml	10 Dec 2003 14:59:54 -0000	1.2
+++ src/org/netbeans/modules/db/resources/JDBCODBC.xml	7 Dec 2005 20:08:22 -0000
@@ -1,7 +1,9 @@
 
 
 
+  
   
+  
   
   
   	
Index: src/org/netbeans/modules/db/resources/connection-1_0.dtd
===================================================================
RCS file: /cvs/db/src/org/netbeans/modules/db/resources/connection-1_0.dtd,v
retrieving revision 1.4
diff -u -r1.4 connection-1_0.dtd
--- src/org/netbeans/modules/db/resources/connection-1_0.dtd	7 Dec 2005 08:53:22 -0000	1.4
+++ src/org/netbeans/modules/db/resources/connection-1_0.dtd	7 Dec 2005 20:08:22 -0000
@@ -13,11 +13,17 @@
 -->
 
 
-
+
 
 
 
 
+
+
+
+
 
Index: src/org/netbeans/modules/db/resources/jdbc-driver-1_0.dtd
===================================================================
RCS file: /cvs/db/src/org/netbeans/modules/db/resources/jdbc-driver-1_0.dtd,v
retrieving revision 1.2
diff -u -r1.2 jdbc-driver-1_0.dtd
--- src/org/netbeans/modules/db/resources/jdbc-driver-1_0.dtd	17 Aug 2005 16:32:09 -0000	1.2
+++ src/org/netbeans/modules/db/resources/jdbc-driver-1_0.dtd	7 Dec 2005 20:08:22 -0000
@@ -12,26 +12,26 @@
 Microsystems, Inc. All Rights Reserved.
 -->
 
-
-
-
-
 
-
+
 
-
+
 
 
 
+
+
+
+  
+
+
+  
 
 
 
-
-
-
Index: src/org/netbeans/modules/db/resources/jdbc-driver-1_1.dtd
===================================================================
RCS file: src/org/netbeans/modules/db/resources/jdbc-driver-1_1.dtd
diff -N src/org/netbeans/modules/db/resources/jdbc-driver-1_1.dtd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/netbeans/modules/db/resources/jdbc-driver-1_1.dtd	7 Dec 2005 20:08:22 -0000
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+  
+
+
+
+  
+
+
+
+  
+
+
+  
+
+
+
Index: src/org/netbeans/modules/db/resources/mf-layer.xml
===================================================================
RCS file: /cvs/db/src/org/netbeans/modules/db/resources/mf-layer.xml,v
retrieving revision 1.11
diff -u -r1.11 mf-layer.xml
--- src/org/netbeans/modules/db/resources/mf-layer.xml	17 Aug 2005 16:32:09 -0000	1.11
+++ src/org/netbeans/modules/db/resources/mf-layer.xml	7 Dec 2005 20:08:22 -0000
@@ -52,6 +52,9 @@
                 
                     
                 
+                
+                    
+                
                 
                     
                 
@@ -61,6 +64,11 @@
         
             
                 
+                    
+                    
+                    
+                
+                
                     
                     
                     
Index: src/org/netbeans/modules/db/util/DriverListUtil.java
===================================================================
RCS file: /cvs/db/src/org/netbeans/modules/db/util/DriverListUtil.java,v
retrieving revision 1.11
diff -u -r1.11 DriverListUtil.java
--- src/org/netbeans/modules/db/util/DriverListUtil.java	6 Nov 2005 21:37:58 -0000	1.11
+++ src/org/netbeans/modules/db/util/DriverListUtil.java	7 Dec 2005 20:08:22 -0000
@@ -270,7 +270,7 @@
         Vector names = new Vector();
         JDBCDriver[] drivers = JDBCDriverManager.getDefault().getDrivers();
         for (int i = 0; i < drivers.length; i++)
-            names.add(drivers[i].getName());
+            names.add(drivers[i].getDisplayName());
         
         if (names.contains(name))
             for (int i = 1;;i++) {
Index: test/unit/src/org/netbeans/modules/db/explorer/DatabaseConnectionConvertorTest.java
===================================================================
RCS file: /cvs/db/test/unit/src/org/netbeans/modules/db/explorer/DatabaseConnectionConvertorTest.java,v
retrieving revision 1.4
diff -u -r1.4 DatabaseConnectionConvertorTest.java
--- test/unit/src/org/netbeans/modules/db/explorer/DatabaseConnectionConvertorTest.java	15 Sep 2005 20:10:21 -0000	1.4
+++ test/unit/src/org/netbeans/modules/db/explorer/DatabaseConnectionConvertorTest.java	7 Dec 2005 20:08:22 -0000
@@ -41,8 +41,6 @@
  */
 public class DatabaseConnectionConvertorTest extends TestBase {
     
-    private static final String CONNECTION_FILE = "connection.xml";
-    
     public DatabaseConnectionConvertorTest(String testName) {
         super(testName);
     }
@@ -55,20 +53,21 @@
     }
     
     public void testReadXml() throws Exception {
-        FileObject fo = createConnectionFile(CONNECTION_FILE, getConnectionsFolder());
+        FileObject fo = createConnectionFile("connection.xml", getConnectionsFolder());
         DataObject dobj = DataObject.find(fo);
         InstanceCookie ic = (InstanceCookie)dobj.getCookie(InstanceCookie.class);
         assertNotNull(ic);
         
         DatabaseConnection conn = (DatabaseConnection)ic.instanceCreate();
         assertEquals("org.foo.FooDriver", conn.getDriver());
+        assertEquals("foo_driver", conn.getDriverName());
         assertEquals("jdbc:foo:localhost", conn.getDatabase());
         assertEquals("schema", conn.getSchema());
         assertEquals("user", conn.getUser());
     }
     
     public void testWriteXml() throws Exception {
-        DatabaseConnection conn = new DatabaseConnection("org.bar.BarDriver", "jdbc:bar:localhost", "schema", "user", null);
+        DatabaseConnection conn = new DatabaseConnection("org.bar.BarDriver", "bar_driver", "jdbc:bar:localhost", "schema", "user", null);
         DatabaseConnectionConvertor.create(conn);
         
         FileObject fo = getConnectionsFolder().getChildren()[0];
@@ -99,16 +98,17 @@
      * Tests that the instance retrieved from the DO created by DCC.create(DCI dbconn) is the same object as dbconn.
      */
     public void testSameInstanceAfterCreate() throws Exception {
-        DatabaseConnection dbconn = new DatabaseConnection("org.bar.BarDriver", "jdbc:bar:localhost", "schema", "user", null);
+        DatabaseConnection dbconn = new DatabaseConnection("org.bar.BarDriver", "bar_driver", "jdbc:bar:localhost", "schema", "user", null);
         DataObject dobj = DatabaseConnectionConvertor.create(dbconn);
         assertSame(dbconn, ((InstanceCookie)dobj.getCookie(InstanceCookie.class)).instanceCreate());
     }
     
     public void testSaveOnPropertyChange() throws Exception {
-        DatabaseConnection dbconn = new DatabaseConnection("a", "b", "c", "d", null);
+        DatabaseConnection dbconn = new DatabaseConnection("a", "b", "c", "d", "e", null);
         DatabaseConnectionConvertor.create(dbconn);
         
         dbconn.setDriver("org.bar.BarDriver");
+        dbconn.setDriverName("bar_driver");
         dbconn.setDatabase("jdbc:bar:localhost");
         dbconn.setSchema("schema");
         dbconn.setUser("user");
@@ -141,7 +141,7 @@
     
     public void testLookup() throws Exception {
         FileObject parent = getConnectionsFolder();
-        createConnectionFile(CONNECTION_FILE, parent);
+        createConnectionFile("connection.xml", parent);
         FolderLookup lookup = new FolderLookup(DataFolder.findFolder(parent));
         Lookup.Result result = lookup.getLookup().lookup(new Lookup.Template(DatabaseConnection.class));
         Collection instances = result.allInstances();
@@ -149,7 +149,7 @@
     }
     
     public void testImportOldConnections() throws Exception {
-        DatabaseConnection conn = new DatabaseConnection("org.foo.FooDriver", "jdbc:foo:localhost", "schema", "user", null);
+        DatabaseConnection conn = new DatabaseConnection("org.foo.FooDriver", "foo_driver", "jdbc:foo:localhost", "schema", "user", null);
         RootNode.getOption().getConnections().add(conn);
         
         DatabaseConnectionConvertor.importOldConnections();
@@ -160,6 +160,7 @@
         
         DatabaseConnection importedConn = (DatabaseConnection)instances.iterator().next();
         assertEquals(conn.getDriver(), importedConn.getDriver());
+        assertEquals(conn.getDriverName(), importedConn.getDriverName());
         assertEquals(conn.getDatabase(), importedConn.getDatabase());
         assertEquals(conn.getSchema(), importedConn.getSchema());
         assertEquals(conn.getUser(), importedConn.getUser());
@@ -179,6 +180,7 @@
                 writer.write("");
                 writer.write("");
                 writer.write("");
+                writer.write("");
                 writer.write("");
                 writer.write("");
                 writer.write("");
Index: test/unit/src/org/netbeans/modules/db/explorer/DbDriverManagerTest.java
===================================================================
RCS file: /cvs/db/test/unit/src/org/netbeans/modules/db/explorer/DbDriverManagerTest.java,v
retrieving revision 1.3
diff -u -r1.3 DbDriverManagerTest.java
--- test/unit/src/org/netbeans/modules/db/explorer/DbDriverManagerTest.java	18 Oct 2005 10:16:50 -0000	1.3
+++ test/unit/src/org/netbeans/modules/db/explorer/DbDriverManagerTest.java	7 Dec 2005 20:08:22 -0000
@@ -192,7 +192,7 @@
     
     private static JDBCDriver createJDBCDriver() {
         URL url = DbDriverManagerTest.class.getProtectionDomain().getCodeSource().getLocation();
-        return JDBCDriver.create("DbDriverManagerTest Driver", "org.netbeans.modules.db.explorer.DbDriverManagerTest$DriverImpl", new URL[] { url });
+        return JDBCDriver.create("test_driver", "DbDriverManagerTest Driver", "org.netbeans.modules.db.explorer.DbDriverManagerTest$DriverImpl", new URL[] { url });
     }
     
     public static final class DriverImpl implements Driver {
Index: test/unit/src/org/netbeans/modules/db/explorer/bar-connection.xml
===================================================================
RCS file: /cvs/db/test/unit/src/org/netbeans/modules/db/explorer/bar-connection.xml,v
retrieving revision 1.3
diff -u -r1.3 bar-connection.xml
--- test/unit/src/org/netbeans/modules/db/explorer/bar-connection.xml	12 Sep 2005 14:26:27 -0000	1.3
+++ test/unit/src/org/netbeans/modules/db/explorer/bar-connection.xml	7 Dec 2005 20:08:22 -0000
@@ -2,6 +2,7 @@
 
 
   
+  
   
   
   
Index: test/unit/src/org/netbeans/modules/db/explorer/driver/JDBCDriverConvertorTest.java
===================================================================
RCS file: /cvs/db/test/unit/src/org/netbeans/modules/db/explorer/driver/JDBCDriverConvertorTest.java,v
retrieving revision 1.5
diff -u -r1.5 JDBCDriverConvertorTest.java
--- test/unit/src/org/netbeans/modules/db/explorer/driver/JDBCDriverConvertorTest.java	13 Oct 2005 12:31:34 -0000	1.5
+++ test/unit/src/org/netbeans/modules/db/explorer/driver/JDBCDriverConvertorTest.java	7 Dec 2005 20:08:22 -0000
@@ -46,8 +46,6 @@
  */
 public class JDBCDriverConvertorTest extends TestBase {
     
-    private static final String DRIVER_FILE = "org_foo_FooDriver.xml";
-    
     public JDBCDriverConvertorTest(String testName) {
         super(testName);
     }
@@ -60,13 +58,28 @@
     }
     
     public void testReadXml() throws Exception {
-        FileObject fo = createDriverFile(DRIVER_FILE, getDriversFolder());
+        // DTD version 1.0
+        FileObject fo = createDriverFile10("org_foo_FooDriver_10.xml", getDriversFolder());
         DataObject dobj = DataObject.find(fo);
         InstanceCookie ic = (InstanceCookie)dobj.getCookie(InstanceCookie.class);
         assertNotNull(ic);
         
         JDBCDriver driver = (JDBCDriver)ic.instanceCreate();
-        assertEquals("Foo Driver", driver.getName());
+        assertEquals("foo_driver", driver.getName());
+        assertEquals("org.foo.FooDriver", driver.getClassName());
+        assertEquals(2, driver.getURLs().length);
+        assertEquals(new URL("file:///foo1.jar"), driver.getURLs()[0]);
+        assertEquals(new URL("file:///foo2.jar"), driver.getURLs()[1]);
+        
+        // DTD version 1.1
+        fo = createDriverFile11("org_foo_FooDriver_11.xml", getDriversFolder());
+        dobj = DataObject.find(fo);
+        ic = (InstanceCookie)dobj.getCookie(InstanceCookie.class);
+        assertNotNull(ic);
+        
+        driver = (JDBCDriver)ic.instanceCreate();
+        assertEquals("foo_driver", driver.getName());
+        assertEquals("Foo Driver", driver.getDisplayName());
         assertEquals("org.foo.FooDriver", driver.getClassName());
         assertEquals(2, driver.getURLs().length);
         assertEquals(new URL("file:///foo1.jar"), driver.getURLs()[0]);
@@ -74,7 +87,7 @@
     }
     
     public void testWriteXml() throws Exception {
-        JDBCDriver driver = JDBCDriver.create("Bar Driver", "org.bar.BarDriver", new URL[] { new URL("file:///bar1.jar"), new URL("file:///bar2.jar") });
+        JDBCDriver driver = JDBCDriver.create("bar_driver", "Bar Driver", "org.bar.BarDriver", new URL[] { new URL("file:///bar1.jar"), new URL("file:///bar2.jar") });
         JDBCDriverConvertor.create(driver);
         
         FileObject fo = getDriversFolder().getFileObject("org_bar_BarDriver.xml");
@@ -103,7 +116,7 @@
     
     public void testLookup() throws Exception {
         FileObject parent = getDriversFolder();
-        createDriverFile(DRIVER_FILE, parent);
+        createDriverFile11("org_foo_FooDriver.xml", parent);
         FolderLookup lookup = new FolderLookup(DataFolder.findFolder(parent));
         Lookup.Result result = lookup.getLookup().lookup(new Lookup.Template(JDBCDriver.class));
         Collection instances = result.allInstances();
@@ -124,7 +137,7 @@
             oldRoot = FileUtil.createFolder(sfs.getRoot(), JDBCDriverConvertor.OLD_DRIVERS_PATH);
         }
         URL[] urls = new URL[] { new URL(UNENCODED_URL) };
-        createDriverFile("testdriver.xml", oldRoot, urls);
+        createDriverFile10("testdriver.xml", oldRoot, urls);
         
         JDBCDriverConvertor.importOldDrivers();
         
@@ -138,30 +151,50 @@
         Collection instances = result.allInstances();
         JDBCDriver drv = (JDBCDriver)instances.iterator().next();
         assertEquals(JDBCDriverConvertor.encodeURL(new URL(UNENCODED_URL)), drv.getURLs()[0]);
+        // assert the imported driver has a display name set
+        assertEquals(drv.getName(), drv.getDisplayName());
     }
     
     private FileObject getDriversFolder() {
         return Repository.getDefault().getDefaultFileSystem().findResource(JDBCDriverConvertor.DRIVERS_PATH);
     }
     
-    private static FileObject createDriverFile(String name, FileObject folder) throws Exception {
+    private static FileObject createDriverFile10(String fileName, FileObject folder) throws Exception {
         URL[] urls = new URL[] {
             new URL("file:///foo1.jar"),
             new URL("file:///foo2.jar"),
         };
-        return createDriverFile(name, folder, urls);
+        return createDriverFile10(fileName, folder, urls);
     }
     
-    private static FileObject createDriverFile(String name, FileObject folder, URL[] urls) throws Exception {
-        FileObject fo = folder.createData(name);
+    private static FileObject createDriverFile10(String fileName, FileObject folder, URL[] urls) throws Exception {
+        return createDriverFile(10, fileName, folder, urls);
+    }
+    
+    private static FileObject createDriverFile11(String fileName, FileObject folder) throws Exception {
+        URL[] urls = new URL[] {
+            new URL("file:///foo1.jar"),
+            new URL("file:///foo2.jar"),
+        };
+        return createDriverFile(11, fileName, folder, urls);
+    }
+    
+    private static FileObject createDriverFile(int version, String fileName, FileObject folder, URL[] urls) throws Exception {
+        String publicIdVer = version == 10 ? "1.0" : "1.1";
+        String systemIdVer = version == 10 ? "1_0" : "1_1";
+        
+        FileObject fo = folder.createData(fileName);
         FileLock lock = fo.lock();
         try {
             OutputStreamWriter writer = new OutputStreamWriter(fo.getOutputStream(lock), "UTF-8");
             try {
                 writer.write("");
-                writer.write("");
+                writer.write("");
                 writer.write("");
-                writer.write("");
+                writer.write("");
+                if (version == 11) {
+                    writer.write("");
+                }
                 writer.write("");
                 writer.write("");
                 for (int i = 0; i < urls.length; i++) {
Index: test/unit/src/org/netbeans/modules/db/explorer/driver/bar-driver.xml
===================================================================
RCS file: /cvs/db/test/unit/src/org/netbeans/modules/db/explorer/driver/bar-driver.xml,v
retrieving revision 1.2
diff -u -r1.2 bar-driver.xml
--- test/unit/src/org/netbeans/modules/db/explorer/driver/bar-driver.xml	17 Aug 2005 16:32:12 -0000	1.2
+++ test/unit/src/org/netbeans/modules/db/explorer/driver/bar-driver.xml	7 Dec 2005 20:08:22 -0000
@@ -1,7 +1,8 @@
 
 
 
-  
+  
+  
   
   
   	
Index: nbproject/project.properties
===================================================================
RCS file: /cvs/db/nbproject/project.properties,v
retrieving revision 1.12
diff -u -r1.12 project.properties
--- nbproject/project.properties	10 Nov 2005 05:54:22 -0000	1.12
+++ nbproject/project.properties	7 Dec 2005 20:08:22 -0000
@@ -13,7 +13,7 @@
 javadoc.arch=${basedir}/arch.xml
 javadoc.apichanges=${basedir}/apichanges.xml
 
-spec.version.base=1.15.0
+spec.version.base=1.16.0
 
 extra.module.files=modules/ext/ddl.jar