/*******************************************************************************
 * Copyright (c) 2006, 2007 Oracle. All rights reserved.
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0, which accompanies this distribution
 * and is available at http://www.eclipse.org/legal/epl-v10.html.
 * 
 * Contributors:
 *     Oracle - initial API and implementation
 ******************************************************************************/
package org.eclipse.jpt.db.internal;

import org.eclipse.jpt.utility.internal.ClassTools;

/**
 *  NullConnectionProfile
 */
public final class NullConnectionProfile extends ConnectionProfile {
	
	private static NullConnectionProfile INSTANCE;

	/**
	 * singleton support
	 */
	static synchronized ConnectionProfile instance() {
		if( INSTANCE == null) {
			INSTANCE = new NullConnectionProfile();
		}
		return INSTANCE;
	}

	private NullConnectionProfile() {
		super( null);
	}

	// ********** behavior **********

	@Override
	protected Connection buildConnection() {
		return NullConnection.instance();
	}

	@Override
	protected Database buildDatabase() {
		return NullDatabase.instance();
	}
	
	@Override
	public void connect() {
		// do nothing
	}

	@Override
	public void disconnect() {
		// do nothing
	}
	
	@Override
	void databaseChanged( Database database, int eventType) {
		// do nothing
	}
	
	@Override
	 void catalogChanged( Catalog catalog, Database database, int eventType) {
		// do nothing
	}
	
	@Override
	 void schemaChanged( Schema schema, Database database, int eventType) {
		// do nothing
	}
	
	@Override
	 void tableChanged( Table table, Schema schema, Database database, int eventType) {
		// do nothing
	}

	// ********** queries **********
	
	@Override
	public Connection getConnection() {
		return NullConnection.instance();
	}

	@Override
	public Database getDatabase() {
		return NullDatabase.instance();
	}
	
	@Override
	public String getName() {
		return ClassTools.shortClassNameForObject( this);
	}

	@Override
	public String getDatabaseName() {
		return "";
	}

	@Override
	public String getDatabaseProduct() {
		return "";
	}

	@Override
	public String getDatabaseVendor() {
		return "";
	}

	@Override
	public String getDatabaseVersion() {
		return "";
	}

	@Override
	public String getUserName() {
		return "";
	}
	
	@Override
	public String getInstanceId() {
		return "";
	}

	@Override
	public String getProviderId() {
		return "";
	}
	
	@Override
	public boolean isConnected() {
		return false;
	}
	
	@Override
	boolean wraps( org.eclipse.datatools.connectivity.IConnectionProfile dtpProfile) {
		return false;
	}
	
	// ********** listeners **********

	@Override
	public void addProfileListener( ProfileListener listener) {
		// do nothing
	}

	@Override
	public void removeProfileListener( ProfileListener listener) {
		// do nothing
	}
	
	@Override
	public void addConnectionListener( ConnectionListener listener) {
		// do nothing
	}

	@Override
	public void removeConnectionListener( ConnectionListener listener) {
		// do nothing
	}

}
