This is an automated email from the ASF dual-hosted git repository. ebakke pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/netbeans.git
commit 2cea3bfd02d64ee4817dd9cf15e2a110fe58ce03 Author: Eirik Bakke <eba...@ultorg.com> AuthorDate: Tue Feb 4 00:46:55 2020 -0500 Various small UI improvements to the database module's "New Connection" wizard. Details: * Improve two error messages in "New Connection" wizard. * Avoid a spurious 'Specified class is not a driver' warning in certain situations. * When detecting the Microsoft SQL Server JDBC driver, avoid showing an ancient version number. * Add a default port number for Microsoft SQL Server. * Decrease the timeout of the connection validation step. --- .../org/netbeans/modules/db/explorer/Bundle.properties | 4 +++- .../modules/db/explorer/dlg/AddDriverDialog.java | 12 ++++++++---- .../modules/db/explorer/dlg/ConnectionPanel.java | 2 +- .../modules/db/explorer/dlg/NewConnectionPanel.java | 8 +++++++- .../src/org/netbeans/modules/db/util/Bundle.properties | 2 +- .../org/netbeans/modules/db/util/DriverListUtil.java | 5 ++++- ide/db/src/org/netbeans/modules/db/util/JdbcUrl.java | 17 +++++++++++++---- .../netbeans/modules/db/util/DriverListUtilTest.java | 7 +++---- 8 files changed, 40 insertions(+), 17 deletions(-) diff --git a/ide/db/src/org/netbeans/modules/db/explorer/Bundle.properties b/ide/db/src/org/netbeans/modules/db/explorer/Bundle.properties index b984e90..3cf2553 100644 --- a/ide/db/src/org/netbeans/modules/db/explorer/Bundle.properties +++ b/ide/db/src/org/netbeans/modules/db/explorer/Bundle.properties @@ -21,7 +21,9 @@ SchemaIsNotSet=Default schema EXC_InsufficientConnInfo=insufficient information to create a connection # {0} is database URL, {1} is the database driver name, {2} is additional info -EXC_CannotEstablishConnection=Cannot establish a connection to {0} using {1} ({2}) +# The "New Connection Wizard" only has space for the first part of the message, so put the message +# from the driver (parameter {2}), which usually explains the error, first. +EXC_CannotEstablishConnection=Connection failed: {2} ({0} using {1}) # {0} is a user provided value EXC_CannotOperateWith=Cannot operate with {0} diff --git a/ide/db/src/org/netbeans/modules/db/explorer/dlg/AddDriverDialog.java b/ide/db/src/org/netbeans/modules/db/explorer/dlg/AddDriverDialog.java index 6f7f644..dfd8d32 100644 --- a/ide/db/src/org/netbeans/modules/db/explorer/dlg/AddDriverDialog.java +++ b/ide/db/src/org/netbeans/modules/db/explorer/dlg/AddDriverDialog.java @@ -160,6 +160,7 @@ public final class AddDriverDialog extends javax.swing.JPanel { String fileName = null; dlm.clear(); drvs.clear(); + jarClassLoader = null; URL[] urls = drv == null ? new URL[0] : drv.getURLs(); for (int i = 0; i < urls.length; i++) { URL url = urls[i]; @@ -379,6 +380,7 @@ public final class AddDriverDialog extends javax.swing.JPanel { if (lsm.isSelectedIndex(i)) { dlm.remove(i); drvs.remove(i); + jarClassLoader = null; count--; continue; } @@ -431,6 +433,7 @@ public final class AddDriverDialog extends javax.swing.JPanel { dlm.addElement(file.toString()); try { drvs.add(file.toURI().toURL()); + jarClassLoader = null; } catch (MalformedURLException exc) { LOGGER.log(Level.WARNING, "Unable to add driver jar file " + @@ -603,10 +606,11 @@ public final class AddDriverDialog extends javax.swing.JPanel { } private URLClassLoader getJarClassLoader() { - // This classloader is used to load classes - // from the jar files for the driver. We can then use - // introspection to see if a class in one of these jar files - // implements java.sql.Driver + /* This classloader is used to load classes from the jar files for the driver. We can then + introspection to see if a class in one of these jar files implements java.sql.Driver. (We + clear the jarClassLoader whenever drvs is modified, to avoid the AddDriverNotJavaSqlDriver + message popping up if a different driver is picked from the dropdown after an unrelated JAR + file is added.) */ jarClassLoader = new URLClassLoader(drvs.toArray(new URL[drvs.size()]), this.getClass().getClassLoader()); diff --git a/ide/db/src/org/netbeans/modules/db/explorer/dlg/ConnectionPanel.java b/ide/db/src/org/netbeans/modules/db/explorer/dlg/ConnectionPanel.java index 020141d..0710e07 100644 --- a/ide/db/src/org/netbeans/modules/db/explorer/dlg/ConnectionPanel.java +++ b/ide/db/src/org/netbeans/modules/db/explorer/dlg/ConnectionPanel.java @@ -192,7 +192,7 @@ public class ConnectionPanel implements AddConnectionWizard.Panel, WizardDescrip databaseConnection.addExceptionListener(excListener); databaseConnection.connectAsync(); - int maxLoops = 60; + int maxLoops = 20; int loop = 0; while (loop < maxLoops) { try { diff --git a/ide/db/src/org/netbeans/modules/db/explorer/dlg/NewConnectionPanel.java b/ide/db/src/org/netbeans/modules/db/explorer/dlg/NewConnectionPanel.java index 8b7d798..eebcf1a 100644 --- a/ide/db/src/org/netbeans/modules/db/explorer/dlg/NewConnectionPanel.java +++ b/ide/db/src/org/netbeans/modules/db/explorer/dlg/NewConnectionPanel.java @@ -894,8 +894,14 @@ public class NewConnectionPanel extends ConnectionDialog.FocusablePanel { for (Entry<String, UrlField> entry : urlFields.entrySet()) { if (url.requiresToken(entry.getKey()) && isEmpty(entry.getValue().getField().getText())) { requiredFieldMissing = true; + String fieldName = entry.getValue().getLabel().getText(); + /* Drop the colon, since this message goes at the bottom of the wizard dialog (e.g. avoid + the message looking like "Please specify a value for TNS Name:"). */ + if (fieldName.endsWith(":")) { + fieldName = fieldName.substring(0, fieldName.length() - 1); + } displayMessage(NbBundle.getMessage(NewConnectionPanel.class, "NewConnection.ERR_FieldRequired", - entry.getValue().getLabel().getText()), false); + fieldName), false); } } diff --git a/ide/db/src/org/netbeans/modules/db/util/Bundle.properties b/ide/db/src/org/netbeans/modules/db/util/Bundle.properties index c1067b4..98616ad 100644 --- a/ide/db/src/org/netbeans/modules/db/util/Bundle.properties +++ b/ide/db/src/org/netbeans/modules/db/util/Bundle.properties @@ -36,7 +36,7 @@ DRIVERNAME_OracleThin=Oracle Thin DRIVERNAME_OracleOCI=Oracle OCI DRIVERNAME_JTDS=jTDS DRIVERNAME_DB2JCC=IBM DB2 Universal Driver -DRIVERNAME_MSSQL2005=Microsoft SQL Server 2005 +DRIVERNAME_MSSQL=Microsoft SQL Server # Map JDBC URL token identifiers to human-readable strings <HOST>=Host diff --git a/ide/db/src/org/netbeans/modules/db/util/DriverListUtil.java b/ide/db/src/org/netbeans/modules/db/util/DriverListUtil.java index 6b83fc7..c6986d3 100644 --- a/ide/db/src/org/netbeans/modules/db/util/DriverListUtil.java +++ b/ide/db/src/org/netbeans/modules/db/util/DriverListUtil.java @@ -213,9 +213,12 @@ public class DriverListUtil { "com.microsoft.jdbc.sqlserver.SQLServerDriver", "jdbc:microsoft:sqlserver://<HOST>[:<PORT>][;DatabaseName=<DB>]"); - add(NbBundle.getMessage(DriverListUtil.class, "DRIVERNAME_MSSQL2005"), + /* Previously we used to say "Microsoft SQL Server 2005" here, but as of driver version 7.2.2 + (latest per July 2019), the class name is still the same. So don't say "2005" anymore. */ + url = add(NbBundle.getMessage(DriverListUtil.class, "DRIVERNAME_MSSQL"), "com.microsoft.sqlserver.jdbc.SQLServerDriver", "jdbc:sqlserver://[<HOST>[\\<INSTANCE>][:<PORT>]][;databaseName=<DB>][;<ADDITIONAL>]", true); + url.setSampleUrl("jdbc:sqlserver://localhost:1433"); url = add(NbBundle.getMessage(DriverListUtil.class, "DRIVERNAME_MySQL"), "com.mysql.cj.jdbc.Driver", diff --git a/ide/db/src/org/netbeans/modules/db/util/JdbcUrl.java b/ide/db/src/org/netbeans/modules/db/util/JdbcUrl.java index 90adb4b..d9136fc 100644 --- a/ide/db/src/org/netbeans/modules/db/util/JdbcUrl.java +++ b/ide/db/src/org/netbeans/modules/db/util/JdbcUrl.java @@ -155,10 +155,19 @@ public class JdbcUrl extends HashMap<String, String> { nameAndType = displayName + " (" + getType() + ")"; //NOI18N } if (driver != null && driver.getDisplayName() != null - && !driver.getDisplayName().equals(displayName)) { - return NbBundle.getMessage(DriverListUtil.class, - "JDBC_URL_DRIVER_NAME", //NOI18N - nameAndType, driver.getDisplayName()); + && !driver.getDisplayName().equals(displayName)) + { + /* If the driver name has been customized such that + JDBC_URL_DRIVER_NAME format would yield, for instance, + "Oracle Thin / Service ID (SID) on Oracle", then we can just drop + the "on Oracle" part. */ + if (nameAndType.startsWith(driver.getDisplayName())) { + return nameAndType; + } else { + return NbBundle.getMessage(DriverListUtil.class, + "JDBC_URL_DRIVER_NAME", //NOI18N + nameAndType, driver.getDisplayName()); + } } else { return nameAndType; } diff --git a/ide/db/test/unit/src/org/netbeans/modules/db/util/DriverListUtilTest.java b/ide/db/test/unit/src/org/netbeans/modules/db/util/DriverListUtilTest.java index 1c25e52..4243a3b 100644 --- a/ide/db/test/unit/src/org/netbeans/modules/db/util/DriverListUtilTest.java +++ b/ide/db/test/unit/src/org/netbeans/modules/db/util/DriverListUtilTest.java @@ -26,7 +26,6 @@ import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; -import static junit.framework.Assert.assertEquals; import junit.framework.TestCase; import org.netbeans.api.db.explorer.JDBCDriver; import org.openide.util.NbBundle; @@ -350,7 +349,7 @@ public class DriverListUtilTest extends TestCase { public void testMSSQL2005() throws Exception { /* - add(getMessage("DRIVERNAME_MSSQL2005"), + add(getMessage("DRIVERNAME_MSSQL"), "com.microsoft.sqlserver.jdbc.SQLServerDriver", "jdbc:sqlserver://[<HOST>[\\<INSTANCE>][:<PORT>]][;databaseName=<DB>][;<ADDITIONAL>]", true); */ @@ -359,7 +358,7 @@ public class DriverListUtilTest extends TestCase { supportedProps.add(JdbcUrl.TOKEN_INSTANCE); ArrayList<String> requiredProps = new ArrayList<String>(); - JdbcUrl url = checkUrl(getDriverName("DRIVERNAME_MSSQL2005"), null, + JdbcUrl url = checkUrl(getDriverName("DRIVERNAME_MSSQL"), null, "com.microsoft.sqlserver.jdbc.SQLServerDriver", "jdbc:sqlserver://[<HOST>[\\<INSTANCE>][:<PORT>]][;databaseName=<DB>][;<ADDITIONAL>]", supportedProps, requiredProps); @@ -589,7 +588,7 @@ public class DriverListUtilTest extends TestCase { if (type == null) { assertEquals(name, url.getDisplayName()); } else { - assertEquals(name + " (" + type + ")", url.getDisplayName()); + assertEquals(name + " / " + type, url.getDisplayName()); } assertEquals(className, url.getClassName()); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org For additional commands, e-mail: commits-h...@netbeans.apache.org For further information about the NetBeans mailing lists, visit: https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists