From d2e27b0674e238a4f94f1c190a395a530746d5d3 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Thu, 25 Oct 2001 06:00:05 +0000 Subject: pgjindent jdbc files. First time jdbc files were formatted. --- .../jdbc/org/postgresql/PostgresqlDataSource.java | 996 +++++++++++---------- 1 file changed, 508 insertions(+), 488 deletions(-) (limited to 'src/interfaces/jdbc/org/postgresql/PostgresqlDataSource.java') diff --git a/src/interfaces/jdbc/org/postgresql/PostgresqlDataSource.java b/src/interfaces/jdbc/org/postgresql/PostgresqlDataSource.java index 62ee87ae9f8..26dddfbf3de 100644 --- a/src/interfaces/jdbc/org/postgresql/PostgresqlDataSource.java +++ b/src/interfaces/jdbc/org/postgresql/PostgresqlDataSource.java @@ -1,47 +1,47 @@ /** - * Redistribution and use of this software and associated documentation - * ("Software"), with or without modification, are permitted provided - * that the following conditions are met: - * - * 1. Redistributions of source code must retain copyright - * statements and notices. Redistributions must also contain a - * copy of this document. - * - * 2. Redistributions in binary form must reproduce the - * above copyright notice, this list of conditions and the - * following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. The name "Exolab" must not be used to endorse or promote - * products derived from this Software without prior written - * permission of Exoffice Technologies. For written permission, - * please contact info@exolab.org. - * - * 4. Products derived from this Software may not be called "Exolab" - * nor may "Exolab" appear in their names without prior written - * permission of Exoffice Technologies. Exolab is a registered - * trademark of Exoffice Technologies. - * - * 5. Due credit should be given to the Exolab Project - * (http://www.exolab.org/). - * - * THIS SOFTWARE IS PROVIDED BY EXOFFICE TECHNOLOGIES AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT - * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - * EXOFFICE TECHNOLOGIES OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Copyright 1999 (C) Exoffice Technologies Inc. All Rights Reserved. - * - * $Id: PostgresqlDataSource.java,v 1.2 2000/11/10 22:06:26 momjian Exp $ - */ +* Redistribution and use of this software and associated documentation +* ("Software"), with or without modification, are permitted provided +* that the following conditions are met: +* +* 1. Redistributions of source code must retain copyright +* statements and notices. Redistributions must also contain a +* copy of this document. +* +* 2. Redistributions in binary form must reproduce the +* above copyright notice, this list of conditions and the +* following disclaimer in the documentation and/or other +* materials provided with the distribution. +* +* 3. The name "Exolab" must not be used to endorse or promote +* products derived from this Software without prior written +* permission of Exoffice Technologies. For written permission, +* please contact info@exolab.org. +* +* 4. Products derived from this Software may not be called "Exolab" +* nor may "Exolab" appear in their names without prior written +* permission of Exoffice Technologies. Exolab is a registered +* trademark of Exoffice Technologies. +* +* 5. Due credit should be given to the Exolab Project +* (http://www.exolab.org/). +* +* THIS SOFTWARE IS PROVIDED BY EXOFFICE TECHNOLOGIES AND CONTRIBUTORS +* ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT +* NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +* EXOFFICE TECHNOLOGIES OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +* OF THE POSSIBILITY OF SUCH DAMAGE. +* +* Copyright 1999 (C) Exoffice Technologies Inc. All Rights Reserved. +* +* $Id: PostgresqlDataSource.java,v 1.3 2001/10/25 05:59:59 momjian Exp $ +*/ package org.postgresql; @@ -79,13 +79,13 @@ import org.postgresql.xa.XADataSourceImpl; *

* The supported data source properties are: *

- * description         (optional)
- * databaseName        (required)
- * loginTimeout        (optional)
- * user                (optional)
- * password            (optional)
- * serverName          (optional)
- * portNumber          (optional)
+ * description		   (optional)
+ * databaseName		   (required)
+ * loginTimeout		   (optional)
+ * user				   (optional)
+ * password			   (optional)
+ * serverName		   (optional)
+ * portNumber		   (optional)
  * transactionTimeout  (optional for XA connections)
  * 
* This data source may be serialized and stored in a JNDI @@ -93,7 +93,7 @@ import org.postgresql.xa.XADataSourceImpl; * register it with JNDI: *
  * PostgresqlDataSource ds;
- * InitialContext       ctx;
+ * InitialContext		ctx;
  *
  * ds = new PostgresqlDataSource();
  * ds.setDatabaseName( "test" );
@@ -105,9 +105,9 @@ import org.postgresql.xa.XADataSourceImpl;
  * Example for obtaining the data source from JNDI and
  * opening a new connections:
  * 
- * InitialContext       ctx;
- * DataSource           ds;
- * 
+ * InitialContext		ctx;
+ * DataSource			ds;
+ *
  * ctx = new InitialContext();
  * ds = (DataSource) ctx.lookup( "/comp/jdbc/test" );
  * ds.getConnection();
@@ -121,482 +121,502 @@ import org.postgresql.xa.XADataSourceImpl;
  * @see Connection
  */
 public class PostgresqlDataSource
-    extends XADataSourceImpl
-    implements DataSource, Referenceable,
-	       ObjectFactory, Serializable
+			extends XADataSourceImpl
+			implements DataSource, Referenceable,
+			ObjectFactory, Serializable
 {
 
 
-    /**
-     * Holds the timeout for opening a new connection, specified
-     * in seconds. The default is obtained from the JDBC driver.
-     */
-    private int _loginTimeout;
+	/**
+	 * Holds the timeout for opening a new connection, specified
+	 * in seconds. The default is obtained from the JDBC driver.
+	 */
+	private int _loginTimeout;
 
 
-    /**
-     * Holds the user's account name.
-     */
-    private String _user;
+	/**
+	 * Holds the user's account name.
+	 */
+	private String _user;
 
 
-    /**
-     * Holds the database password.
-     */
-    private String _password;
+	/**
+	 * Holds the database password.
+	 */
+	private String _password;
 
 
-    /**
-     * Holds the name of the particular database on the server.
-     */
-    private String _databaseName;
+	/**
+	 * Holds the name of the particular database on the server.
+	 */
+	private String _databaseName;
 
 
-    /**
-     * Description of this datasource.
-     */
-    private String _description = "PostgreSQL DataSource";
+	/**
+	 * Description of this datasource.
+	 */
+	private String _description = "PostgreSQL DataSource";
 
 
-    /**
-     * Holds the database server name. If null, this is
-     * assumed to be the localhost.
-     */
-    private String _serverName;
+	/**
+	 * Holds the database server name. If null, this is
+	 * assumed to be the localhost.
+	 */
+	private String _serverName;
 
 
-    /**
-     * Holds the port number where a server is listening.
-     * The default value will open a connection with an
-     * unspecified port.
-     */
-    private int _portNumber = DEFAULT_PORT;
+	/**
+	 * Holds the port number where a server is listening.
+	 * The default value will open a connection with an
+	 * unspecified port.
+	 */
+	private int _portNumber = DEFAULT_PORT;
 
 
-    /**
-     * The default port number. Since we open the connection
-     * without specifying the port if it's the default one,
-     * this value can be meaningless.
-     */
-    private static final int DEFAULT_PORT = 0;
+	/**
+	 * The default port number. Since we open the connection
+	 * without specifying the port if it's the default one,
+	 * this value can be meaningless.
+	 */
+	private static final int DEFAULT_PORT = 0;
 
 
-    /**
-     * Holds the log writer to which all messages should be
-     * printed. The default writer is obtained from the driver
-     * manager, but it can be specified at the datasource level
-     * and will be passed to the driver. May be null.
-     */    
-    private transient PrintWriter _logWriter;
+	/**
+	 * Holds the log writer to which all messages should be
+	 * printed. The default writer is obtained from the driver
+	 * manager, but it can be specified at the datasource level
+	 * and will be passed to the driver. May be null.
+	 */
+	private transient PrintWriter _logWriter;
 
 
-    /**
-     * Each datasource maintains it's own driver, in case of
-     * driver-specific setup (e.g. pools, log writer).
-     */
-// FIXME
-//    private transient postgresql.Driver _driver;
-private transient org.postgresql.Driver _driver;
-//---------
+	/**
+	 * Each datasource maintains it's own driver, in case of
+	 * driver-specific setup (e.g. pools, log writer).
+	 */
+	// FIXME
+	//	  private transient postgresql.Driver _driver;
+	private transient org.postgresql.Driver _driver;
+	//---------
 
 
 
-    public PostgresqlDataSource()
-    {
-	_logWriter = DriverManager.getLogWriter();
-	_loginTimeout = DriverManager.getLoginTimeout();
-    }
+	public PostgresqlDataSource()
+	{
+		_logWriter = DriverManager.getLogWriter();
+		_loginTimeout = DriverManager.getLoginTimeout();
+	}
 
-    
-    public Connection getConnection()
-        throws SQLException
-    {
-	// Uses the username and password specified for the datasource.
-	return getConnection( _user, _password );
-    }
 
+	public Connection getConnection()
+	throws SQLException
+	{
+		// Uses the username and password specified for the datasource.
+		return getConnection( _user, _password );
+	}
 
-    public synchronized Connection getConnection( String user, String password )
-        throws SQLException
-    {
-	Connection conn;
-	Properties info;
-	String     url;
 
-	if ( _driver == null ) {
-	    try {
-		// Constructs a driver for use just by this data source
-		// which will produce TwoPhaseConnection-s. This driver
-		// is not registered with the driver manager.
-// FIXME
-//		_driver = new postgresql.Driver();
-_driver = new org.postgresql.Driver();
-//-----------
-
-//FIXME
-//		_driver.setLogWriter( _logWriter );
-// Method seems to be unavailable. Just commented it out.
-//----------
-	    } catch ( SQLException except ) {
-		if ( _logWriter != null )
-		    _logWriter.println( "DataSource: Failed to initialize JDBC driver: " + except );
-		throw except;
-	    }
+	public synchronized Connection getConnection( String user, String password )
+	throws SQLException
+	{
+		Connection conn;
+		Properties info;
+		String url;
+
+		if ( _driver == null )
+		{
+			try
+			{
+				// Constructs a driver for use just by this data source
+				// which will produce TwoPhaseConnection-s. This driver
+				// is not registered with the driver manager.
+				// FIXME
+				//		_driver = new postgresql.Driver();
+				_driver = new org.postgresql.Driver();
+				//-----------
+
+				//FIXME
+				//		_driver.setLogWriter( _logWriter );
+				// Method seems to be unavailable. Just commented it out.
+				//----------
+			}
+			catch ( SQLException except )
+			{
+				if ( _logWriter != null )
+					_logWriter.println( "DataSource: Failed to initialize JDBC driver: " + except );
+				throw except;
+			}
+		}
+
+		// Use info to supply properties that are not in the URL.
+		info = new Properties();
+		info.put( "loginTimeout", Integer.toString( _loginTimeout ) );
+
+		// DriverManager will do that and not rely on the URL alone.
+		if ( user == null )
+		{
+			user = _user;
+			password = _password;
+		}
+		if ( user == null || password == null )
+			throw new PSQLException( "postgresql.ds.userpswd" );
+		info.put( "user", user );
+		info.put( "password", password );
+
+		if ( _serverName != null )
+			info.put( "PGHOST", _serverName );
+		if ( _portNumber != DEFAULT_PORT )
+			info.put( "PGPORT", Integer.toString( _portNumber ) );
+		if ( _databaseName != null )
+			info.put( "PGDBNAME", _databaseName );
+
+		// Construct the URL suitable for this driver.
+		url = "jdbc:postgresql:";
+
+		// Attempt to establish a connection. Report a successful
+		// attempt or a failure.
+		try
+		{
+			conn = _driver.connect( url, info );
+			// FIXME
+			//		if ( ! ( conn instanceof postgresql.jdbc2.Connection ) ) {
+			if ( ! ( conn instanceof org.postgresql.jdbc2.Connection ) )
+			{
+				//--------
+				if ( _logWriter != null )
+					_logWriter.println( "DataSource: JDBC 1 connections not supported" );
+				throw new PSQLException( "postgresql.ds.onlyjdbc2" );
+			}
+		}
+		catch ( SQLException except )
+		{
+			if ( _logWriter != null )
+				_logWriter.println( "DataSource: getConnection failed " + except );
+			throw except;
+		}
+		if ( conn != null && _logWriter != null )
+			_logWriter.println( "DataSource: getConnection returning " + conn );
+		return conn;
 	}
 
-	// Use info to supply properties that are not in the URL.
-	info = new Properties();
-	info.put( "loginTimeout", Integer.toString( _loginTimeout ) );
 
-	// DriverManager will do that and not rely on the URL alone.
-	if ( user == null ) {
-	    user = _user;
-	    password = _password;
+	public PrintWriter getLogWriter()
+	{
+		return _logWriter;
 	}
-	if ( user == null || password == null )
-	    throw new PSQLException( "postgresql.ds.userpswd" );
-	info.put( "user", user );
-	info.put( "password", password );
-
-        if ( _serverName != null )
-            info.put( "PGHOST", _serverName );
-        if ( _portNumber != DEFAULT_PORT )
-            info.put( "PGPORT", Integer.toString( _portNumber ) );
-        if ( _databaseName != null )
-            info.put( "PGDBNAME", _databaseName );
-
-	// Construct the URL suitable for this driver.
-	url = "jdbc:postgresql:";
-
-	// Attempt to establish a connection. Report a successful
-	// attempt or a failure.
-	try {
-	    conn = _driver.connect( url, info );
-// FIXME
-//	    if ( ! ( conn instanceof postgresql.jdbc2.Connection ) ) {
-if ( ! ( conn instanceof org.postgresql.jdbc2.Connection ) ) {
-//--------
-		if ( _logWriter != null )
-		    _logWriter.println( "DataSource: JDBC 1 connections not supported" );
-		throw new PSQLException( "postgresql.ds.onlyjdbc2" );
-	    }
-	} catch ( SQLException except ) {
-	    if ( _logWriter != null )
-		_logWriter.println( "DataSource: getConnection failed " + except );
-	    throw except;
+
+
+	public synchronized void setLogWriter( PrintWriter writer )
+	{
+		// Once a log writer has been set, we cannot set it since some
+		// thread might be conditionally accessing it right now without
+		// synchronizing.
+		if ( writer != null )
+		{
+			if ( _driver != null )
+				// FIXME
+				//		_driver.setLogWriter( writer );
+				// Method seems to be unavailable. Commented it out.
+				//----------
+				_logWriter = writer;
+		}
 	}
-	if ( conn != null && _logWriter != null )
-	    _logWriter.println( "DataSource: getConnection returning " + conn );
-	return conn;
-    }
 
 
-    public PrintWriter getLogWriter()
-    {
-	return _logWriter;
-    }
+	public void setLoginTimeout( int seconds )
+	{
+		_loginTimeout = seconds;
+	}
 
 
-    public synchronized void setLogWriter( PrintWriter writer )
-    {
-	// Once a log writer has been set, we cannot set it since some
-	// thread might be conditionally accessing it right now without
-	// synchronizing.
-	if ( writer != null ) {
-	    if ( _driver != null )
-// FIXME
-//		_driver.setLogWriter( writer );
-// Method seems to be unavailable. Commented it out.
-//----------
-	    _logWriter = writer;
+	public synchronized int getLoginTimeout()
+	{
+		return _loginTimeout;
 	}
-    }
-
-
-    public void setLoginTimeout( int seconds )
-    {
-	_loginTimeout = seconds;
-    }
-
-
-    public synchronized int getLoginTimeout()
-    {
-	return _loginTimeout;
-    }
-
-
-    /**
-     * Sets the name of the particular database on the server.
-     * The standard name for this property is databaseName.
-     *
-     * @param databaseName The name of the particular database on the server
-     */
-    public synchronized void setDatabaseName( String databaseName )
-    {
-	if ( databaseName == null )
-	    throw new NullPointerException( "DataSource: Argument 'databaseName' is null" );
-	_databaseName = databaseName;
-    }
-
-
-    /**
-     * Returns the name of the particular database on the server.
-     * The standard name for this property is databaseName.
-     *
-     * @return The name of the particular database on the server
-     */
-    public String getDatabaseName()
-    {
-	return _databaseName;
-    }
-
-
-    /**
-     * Sets the description of this datasource.
-     * The standard name for this property is description.
-     *
-     * @param description The description of this datasource
-     */
-    public synchronized void setDescription( String description )
-    {
-	if ( description == null )
-	    throw new NullPointerException( "DataSource: Argument 'description' is null" );
-	_description = description;
-    }
-
-
-    /**
-     * Returns the description of this datasource.
-     * The standard name for this property is description.
-     *
-     * @return The description of this datasource
-     */
-    public String getDescription()
-    {
-	return _description;
-    }
-
-
-    /**
-     * Sets the database password.
-     * The standard name for this property is password.
-     *
-     * @param password The database password
-     */
-    public synchronized void setPassword( String password )
-    {
-	_password = password;
-    }
-
-
-    /**
-     * Returns the database password.
-     * The standard name for this property is password.
-     *
-     * @return The database password
-     */
-    public String getPassword()
-    {
-	return _password;
-    }
-
-
-    /**
-     * Sets the port number where a server is listening.
-     * The standard name for this property is portNumber.
-     *
-     * @param portNumber The port number where a server is listening
-     */
-    public synchronized void setPortNumber( int portNumber )
-    {
-	_portNumber = portNumber;
-    }
-
-
-    /**
-     * Returns the port number where a server is listening.
-     * The standard name for this property is portNumber.
-     *
-     * @return The port number where a server is listening
-     */
-    public int getPortNumber()
-    {
-	return _portNumber;
-    }
-
-
-    /**
-     * Sets the database server name.
-
-     * The standard name for this property is serverName.
-     *
-     * @param serverName The database server name
-     */
-    public synchronized void setServerName( String serverName )
-    {
-	_serverName = serverName;
-    }
-
-
-    /**
-     * Returns the database server name.
-     * The standard name for this property is serverName.
-     *
-     * @return The database server name
-     */
-    public String getServerName()
-    {
-	return _serverName;
-    }
-
-
-    /**
-     * Sets the user's account name.
-     * The standard name for this property is user.
-     *
-     * @param user The user's account name
-     */
-    public synchronized void setUser( String user )
-    {
-	_user = user;
-    }
-
-
-    /**
-     * Returns the user's account name.
-     * The standard name for this property is user.
-     *
-     * @return The user's account name
-     */
-    public String getUser()
-    {
-	return _user;
-    }
-
-
-    /**
-     * Returns true if this datasource and the other are equal.
-     * The two datasources are equal if and only if they will produce
-     * the exact same connections. Connection properties like database
-     * name, user name, etc are comapred. Setup properties like
-     * description, log writer, etc are not compared.
-     */
-    public synchronized boolean equals( Object other )
-    {
-	if ( other == this )
-	    return true;
-	if ( other == null || ! ( other instanceof PostgresqlDataSource ) )
-	    return false;
-
-	PostgresqlDataSource with;
-
-	with = (PostgresqlDataSource) other;
-	if ( _databaseName != null && _databaseName.equals( with._databaseName ) )
-	    if ( _portNumber == with._portNumber && 
-		 ( ( _serverName == null && with._serverName == null ) ||
-		   ( _serverName != null && _serverName.equals( with._serverName ) ) ) )
-		if ( ( _user == null && with._user == null ) ||
-		     ( _user != null && _password != null && _user.equals( with._user ) &&
-		       _password.equals( with._password ) ) )
-		    return true;
-	return false;
-    }
-
-
-    public String toString()
-    {
-	if ( _description != null )
-	    return _description;
-	else {
-	    String url;
-	    
-	    url = "jdbc:postgresql:";
-	    if ( _serverName != null ) {
-		if ( _portNumber == DEFAULT_PORT )
-		    url = url + "//" + _serverName + "/";
-		else
-		    url = url + "//" + _serverName + ":" + _portNumber + "/";
-	    } else if ( _portNumber != DEFAULT_PORT )
-		url = url + "//localhost:" + _portNumber + "/";
-	    if ( _databaseName != null )
-		url = url + _databaseName;
-	    return "DataSource " + url;
+
+
+	/**
+	 * Sets the name of the particular database on the server.
+	 * The standard name for this property is databaseName.
+	 *
+	 * @param databaseName The name of the particular database on the server
+	 */
+	public synchronized void setDatabaseName( String databaseName )
+	{
+		if ( databaseName == null )
+			throw new NullPointerException( "DataSource: Argument 'databaseName' is null" );
+		_databaseName = databaseName;
+	}
+
+
+	/**
+	 * Returns the name of the particular database on the server.
+	 * The standard name for this property is databaseName.
+	 *
+	 * @return The name of the particular database on the server
+	 */
+	public String getDatabaseName()
+	{
+		return _databaseName;
+	}
+
+
+	/**
+	 * Sets the description of this datasource.
+	 * The standard name for this property is description.
+	 *
+	 * @param description The description of this datasource
+	 */
+	public synchronized void setDescription( String description )
+	{
+		if ( description == null )
+			throw new NullPointerException( "DataSource: Argument 'description' is null" );
+		_description = description;
+	}
+
+
+	/**
+	 * Returns the description of this datasource.
+	 * The standard name for this property is description.
+	 *
+	 * @return The description of this datasource
+	 */
+	public String getDescription()
+	{
+		return _description;
+	}
+
+
+	/**
+	 * Sets the database password.
+	 * The standard name for this property is password.
+	 *
+	 * @param password The database password
+	 */
+	public synchronized void setPassword( String password )
+	{
+		_password = password;
+	}
+
+
+	/**
+	 * Returns the database password.
+	 * The standard name for this property is password.
+	 *
+	 * @return The database password
+	 */
+	public String getPassword()
+	{
+		return _password;
+	}
+
+
+	/**
+	 * Sets the port number where a server is listening.
+	 * The standard name for this property is portNumber.
+	 *
+	 * @param portNumber The port number where a server is listening
+	 */
+	public synchronized void setPortNumber( int portNumber )
+	{
+		_portNumber = portNumber;
+	}
+
+
+	/**
+	 * Returns the port number where a server is listening.
+	 * The standard name for this property is portNumber.
+	 *
+	 * @return The port number where a server is listening
+	 */
+	public int getPortNumber()
+	{
+		return _portNumber;
+	}
+
+
+	/**
+	 * Sets the database server name.
+
+	 * The standard name for this property is serverName.
+	 *
+	 * @param serverName The database server name
+	 */
+	public synchronized void setServerName( String serverName )
+	{
+		_serverName = serverName;
+	}
+
+
+	/**
+	 * Returns the database server name.
+	 * The standard name for this property is serverName.
+	 *
+	 * @return The database server name
+	 */
+	public String getServerName()
+	{
+		return _serverName;
+	}
+
+
+	/**
+	 * Sets the user's account name.
+	 * The standard name for this property is user.
+	 *
+	 * @param user The user's account name
+	 */
+	public synchronized void setUser( String user )
+	{
+		_user = user;
+	}
+
+
+	/**
+	 * Returns the user's account name.
+	 * The standard name for this property is user.
+	 *
+	 * @return The user's account name
+	 */
+	public String getUser()
+	{
+		return _user;
+	}
+
+
+	/**
+	 * Returns true if this datasource and the other are equal.
+	 * The two datasources are equal if and only if they will produce
+	 * the exact same connections. Connection properties like database
+	 * name, user name, etc are comapred. Setup properties like
+	 * description, log writer, etc are not compared.
+	 */
+	public synchronized boolean equals( Object other )
+	{
+		if ( other == this )
+			return true;
+		if ( other == null || ! ( other instanceof PostgresqlDataSource ) )
+			return false;
+
+		PostgresqlDataSource with;
+
+		with = (PostgresqlDataSource) other;
+		if ( _databaseName != null && _databaseName.equals( with._databaseName ) )
+			if ( _portNumber == with._portNumber &&
+					( ( _serverName == null && with._serverName == null ) ||
+					  ( _serverName != null && _serverName.equals( with._serverName ) ) ) )
+				if ( ( _user == null && with._user == null ) ||
+						( _user != null && _password != null && _user.equals( with._user ) &&
+						  _password.equals( with._password ) ) )
+					return true;
+		return false;
 	}
-    }
-
-
-    public synchronized Reference getReference()
-    {
-	Reference ref;
-
-	// We use same object as factory.
-	ref = new Reference( getClass().getName(), getClass().getName(), null );
-	// Mandatory properties
-	ref.add( new StringRefAddr( "description", _description ) );
-	ref.add( new StringRefAddr( "databaseName", _databaseName ) );
-	ref.add( new StringRefAddr( "loginTimeout", Integer.toString( _loginTimeout ) ) );
-	// Optional properties
-	if ( _user != null )
-	    ref.add( new StringRefAddr( "user", _user ) );
-	if ( _password != null )
-	    ref.add( new StringRefAddr( "password", _password ) );
-	if ( _serverName != null )
-	    ref.add( new StringRefAddr( "serverName", _serverName ) );
-	if ( _portNumber != DEFAULT_PORT )
-	    ref.add( new StringRefAddr( "portNumber", Integer.toString( _portNumber ) ) );
-	ref.add( new StringRefAddr( "transactionTimeout", Integer.toString( getTransactionTimeout() ) ) );
- 	return ref;
-    }
-
-
-    public Object getObjectInstance( Object refObj, Name name, Context nameCtx, Hashtable env )
-        throws NamingException
-    {
-	Reference ref;
-
-	// Can only reconstruct from a reference.
-	if ( refObj instanceof Reference ) {
-	    ref = (Reference) refObj;
-	    // Make sure reference is of datasource class.
-	    if ( ref.getClassName().equals( getClass().getName() ) ) {
-
-		PostgresqlDataSource ds;
-		RefAddr              addr;
-
-		try {
-		    ds = (PostgresqlDataSource) Class.forName( ref.getClassName() ).newInstance();
-		} catch ( Exception except ) {
-		    throw new NamingException( except.toString() );
+
+
+	public String toString()
+	{
+		if ( _description != null )
+			return _description;
+		else
+		{
+			String url;
+
+			url = "jdbc:postgresql:";
+			if ( _serverName != null )
+			{
+				if ( _portNumber == DEFAULT_PORT )
+					url = url + "//" + _serverName + "/";
+				else
+					url = url + "//" + _serverName + ":" + _portNumber + "/";
+			}
+			else if ( _portNumber != DEFAULT_PORT )
+				url = url + "//localhost:" + _portNumber + "/";
+			if ( _databaseName != null )
+				url = url + _databaseName;
+			return "DataSource " + url;
 		}
+	}
+
+
+	public synchronized Reference getReference()
+	{
+		Reference ref;
+
+		// We use same object as factory.
+		ref = new Reference( getClass().getName(), getClass().getName(), null );
 		// Mandatory properties
-		ds._description = (String) ref.get( "description" ).getContent();
-		ds._databaseName = (String) ref.get( "databaseName" ).getContent();
-		ds._loginTimeout = Integer.parseInt( (String) ref.get( "loginTimeout" ).getContent() );
+		ref.add( new StringRefAddr( "description", _description ) );
+		ref.add( new StringRefAddr( "databaseName", _databaseName ) );
+		ref.add( new StringRefAddr( "loginTimeout", Integer.toString( _loginTimeout ) ) );
 		// Optional properties
-		addr = ref.get( "user" );
-		if ( addr != null )
-		    ds._user = (String) addr.getContent();
-		addr = ref.get( "password" );
-		if ( addr != null )
-		    ds._password = (String) addr.getContent();
-		addr = ref.get( "serverName" );
-		if ( addr != null )
-		    ds._serverName = (String) addr.getContent();
-		addr = ref.get( "portNumber" );
-		if ( addr != null )
-		    ds._portNumber = Integer.parseInt( (String) addr.getContent() );
-		addr = ref.get( "transactionTimeout" );
-		if ( addr != null )
-		    setTransactionTimeout( Integer.parseInt( (String) addr.getContent() ) );
-		return ds;
-
-	    } else
-		throw new NamingException( "DataSource: Reference not constructed from class " + getClass().getName() );
-	} else if ( refObj instanceof Remote )
-	    return refObj;
-	else
-	    return null;
-    }
+		if ( _user != null )
+			ref.add( new StringRefAddr( "user", _user ) );
+		if ( _password != null )
+			ref.add( new StringRefAddr( "password", _password ) );
+		if ( _serverName != null )
+			ref.add( new StringRefAddr( "serverName", _serverName ) );
+		if ( _portNumber != DEFAULT_PORT )
+			ref.add( new StringRefAddr( "portNumber", Integer.toString( _portNumber ) ) );
+		ref.add( new StringRefAddr( "transactionTimeout", Integer.toString( getTransactionTimeout() ) ) );
+		return ref;
+	}
+
+
+	public Object getObjectInstance( Object refObj, Name name, Context nameCtx, Hashtable env )
+	throws NamingException
+	{
+		Reference ref;
+
+		// Can only reconstruct from a reference.
+		if ( refObj instanceof Reference )
+		{
+			ref = (Reference) refObj;
+			// Make sure reference is of datasource class.
+			if ( ref.getClassName().equals( getClass().getName() ) )
+			{
+
+				PostgresqlDataSource ds;
+				RefAddr addr;
+
+				try
+				{
+					ds = (PostgresqlDataSource) Class.forName( ref.getClassName() ).newInstance();
+				}
+				catch ( Exception except )
+				{
+					throw new NamingException( except.toString() );
+				}
+				// Mandatory properties
+				ds._description = (String) ref.get( "description" ).getContent();
+				ds._databaseName = (String) ref.get( "databaseName" ).getContent();
+				ds._loginTimeout = Integer.parseInt( (String) ref.get( "loginTimeout" ).getContent() );
+				// Optional properties
+				addr = ref.get( "user" );
+				if ( addr != null )
+					ds._user = (String) addr.getContent();
+				addr = ref.get( "password" );
+				if ( addr != null )
+					ds._password = (String) addr.getContent();
+				addr = ref.get( "serverName" );
+				if ( addr != null )
+					ds._serverName = (String) addr.getContent();
+				addr = ref.get( "portNumber" );
+				if ( addr != null )
+					ds._portNumber = Integer.parseInt( (String) addr.getContent() );
+				addr = ref.get( "transactionTimeout" );
+				if ( addr != null )
+					setTransactionTimeout( Integer.parseInt( (String) addr.getContent() ) );
+				return ds;
+
+			}
+			else
+				throw new NamingException( "DataSource: Reference not constructed from class " + getClass().getName() );
+		}
+		else if ( refObj instanceof Remote )
+			return refObj;
+		else
+			return null;
+	}
 
 
 }
-- 
cgit v1.2.3