// Path: src/main/java/jp/tricreo/schemagenerator/exception/CloneNotSupportedRuntimeException.java
// @SuppressWarnings("serial")
// public class CloneNotSupportedRuntimeException extends RuntimeException {
// 	
// 	/**
// 	 * インスタンスを生成する。
// 	 * 
// 	 */
// 	public CloneNotSupportedRuntimeException() {
// 	}
// 	
// 	/**
// 	 * インスタンスを生成する。
// 	 * 
// 	 * @param message メッセージ
// 	 */
// 	public CloneNotSupportedRuntimeException(String message) {
// 		super(message);
// 	}
// 	
// 	/**
// 	 * インスタンスを生成する。
// 	 * 
// 	 * @param message メッセージ
// 	 * @param cause 原因
// 	 */
// 	public CloneNotSupportedRuntimeException(String message, Throwable cause) {
// 		super(message, cause);
// 	}
// 	
// 	/**
// 	 * インスタンスを生成する。
// 	 * 
// 	 * @param cause 原因
// 	 */
// 	public CloneNotSupportedRuntimeException(Throwable cause) {
// 		super(cause);
// 	}
// 	
// }


import jp.tricreo.schemagenerator.exception.CloneNotSupportedRuntimeException;
import org.apache.commons.lang.Validate;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

package jp.tricreo.schemagenerator.domain.model;




/**
 * データソースを表すクラス。
 * 
 * <p>
 * データソースとは、JDBCで接続できるデータベースの接続情報を意味する。
 * 可変なエンティティ。
 * </p>
 * 
 * @author junichi
 */
public class DataSource implements Entity<DataSource, String> {
	
	// IDは必ずfinal
	private final String identity;
	
	private String driverClassName;
	
	private String url;
	
	private String userName;
	
	private String password;
	

	/**
	 * インスタンスを生成する。
	 * 
	 * @param identity 識別子
	 */
	public DataSource(String identity) {
		this(identity, null, null, null, null);
	}
	
	/**
	 * インスタンスを生成する。
	 * 
	 * @param identity 識別子
	 * @param driverClassName ドライバークラス名 
	 * @param url URL
	 * @param userName ユーザ名
	 * @param password パスワード
	 */
	public DataSource(String identity, String driverClassName, String url,
			String userName, String password) {
		Validate.notNull(identity);
		this.identity = identity;
		this.driverClassName = driverClassName;
		this.url = url;
		this.userName = userName;
		this.password = password;
	}
	
	@Override
	public final DataSource clone() {
		try {
			DataSource clone = (DataSource) super.clone();
			return clone;
		} catch (CloneNotSupportedException e) {

// Path: src/main/java/jp/tricreo/schemagenerator/exception/CloneNotSupportedRuntimeException.java
// @SuppressWarnings("serial")
// public class CloneNotSupportedRuntimeException extends RuntimeException {
// 	
// 	/**
// 	 * インスタンスを生成する。
// 	 * 
// 	 */
// 	public CloneNotSupportedRuntimeException() {
// 	}
// 	
// 	/**
// 	 * インスタンスを生成する。
// 	 * 
// 	 * @param message メッセージ
// 	 */
// 	public CloneNotSupportedRuntimeException(String message) {
// 		super(message);
// 	}
// 	
// 	/**
// 	 * インスタンスを生成する。
// 	 * 
// 	 * @param message メッセージ
// 	 * @param cause 原因
// 	 */
// 	public CloneNotSupportedRuntimeException(String message, Throwable cause) {
// 		super(message, cause);
// 	}
// 	
// 	/**
// 	 * インスタンスを生成する。
// 	 * 
// 	 * @param cause 原因
// 	 */
// 	public CloneNotSupportedRuntimeException(Throwable cause) {
// 		super(cause);
// 	}
// 	
// }


// Path: src/main/java/jp/tricreo/schemagenerator/domain/model/DataSource.java
import jp.tricreo.schemagenerator.exception.CloneNotSupportedRuntimeException;
import org.apache.commons.lang.Validate;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

package jp.tricreo.schemagenerator.domain.model;




/**
 * データソースを表すクラス。
 * 
 * <p>
 * データソースとは、JDBCで接続できるデータベースの接続情報を意味する。
 * 可変なエンティティ。
 * </p>
 * 
 * @author junichi
 */
public class DataSource implements Entity<DataSource, String> {
	
	// IDは必ずfinal
	private final String identity;
	
	private String driverClassName;
	
	private String url;
	
	private String userName;
	
	private String password;
	

	/**
	 * インスタンスを生成する。
	 * 
	 * @param identity 識別子
	 */
	public DataSource(String identity) {
		this(identity, null, null, null, null);
	}
	
	/**
	 * インスタンスを生成する。
	 * 
	 * @param identity 識別子
	 * @param driverClassName ドライバークラス名 
	 * @param url URL
	 * @param userName ユーザ名
	 * @param password パスワード
	 */
	public DataSource(String identity, String driverClassName, String url,
			String userName, String password) {
		Validate.notNull(identity);
		this.identity = identity;
		this.driverClassName = driverClassName;
		this.url = url;
		this.userName = userName;
		this.password = password;
	}
	
	@Override
	public final DataSource clone() {
		try {
			DataSource clone = (DataSource) super.clone();
			return clone;
		} catch (CloneNotSupportedException e) {

			throw new CloneNotSupportedRuntimeException(e);
