/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*	モジュール名	：JCCFrameworkException
*	ソースファイル名：JCCFrameworkException.java
*	作成者			：富士通
*	日付			：2011年04月08日
*＜機能概要＞
*	フレームワーク部品が使用する例外クラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/04/08	富士通		新規作成
*
**********************************************************************/
package eo.common.util;

public class JCCFrameworkException extends RuntimeException {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	// エラーコード
	private String errorResult;
	
	// エラー埋め字
	private String errorInfo;

	/**
	 * この例外を構成する原因となったオブジェクトを保持する領域
	 */
	private Object causeObject;

    /**
     * デフォルトコンストラクタです。
     */
    public JCCFrameworkException() {
    }    
    
    /**
     * 詳細メッセージを指定して例外を生成します。
     * @param msg 詳細メッセージ
     */
    public JCCFrameworkException(String msg) {
        this(msg, "");
    }    

    /**
     * エラーコードと埋め字を指定して例外を生成します。
     * @param result エラーコード
     * @param info 埋め字
     */
    public JCCFrameworkException(String result, String info) {
        super(result);
        errorResult = result;
        errorInfo = info;
    }    

	/**
	 * もともと投げられた例外を埋め込んで JCCFrameworkExceptionを構成します。
	 * @param ex もともと投げられた例外
	 */
	public JCCFrameworkException(Exception ex) {
		// 2012/06/05 原因となった要因を埋め込む対応 start
		//this();
		this.initCause(ex);
		// 2012/06/05 原因となった要因を埋め込む対応 end
		causeObject = ex;
	}

	/**
	 * 特定な詳細メッセージ付きで
	 * もともと投げられた例外を埋め込んだ JCCFrameworkExceptionを構成します。
	 * @param msg 詳細メッセージ
	 * @param ex もともと投げられた例外
	 */
	public JCCFrameworkException(String msg, Exception ex) {
		// 2012/06/05 原因となった要因を埋め込む対応 start
		//this(msg);
		this.initCause(ex);
		this.setResult(msg);
		// 2012/06/05 原因となった要因を埋め込む対応 end
		causeObject = ex;
	}

	/**
	 * 特定な詳細メッセージ付きで
	 * この例外を構成する原因となったオブジェクト埋め込んだ JCCFrameworkExceptionを構成します。
	 * @param msg 詳細メッセージ
	 * @param obj 原因となったオブジェクト
	 */
	public JCCFrameworkException(String msg, Object obj) {
		// 2012/06/05 原因となった要因を埋め込む対応 start
		//this(msg);
		if(obj instanceof Throwable)
		{
			this.initCause((Throwable)obj);
		}
		this.setResult(msg);
		// 2012/06/05 原因となった要因を埋め込む対応 end
		causeObject = obj;
	}

	/**
	 * 特定な詳細メッセージ付きで
	 * もともと投げられた例外を埋め込んだ JCCFrameworkExceptionを構成します。
     * エラーコードと埋め字を指定して例外を生成します。
     * @param result エラーコード
     * @param info 埋め字
	 * @param ex もともと投げられた例外
	 */
	public JCCFrameworkException(String result, String info, Exception ex) {
		// 2012/06/05 原因となった要因を埋め込む対応 start
		//this(result, info);
		this.initCause(ex);
		this.setResult(result);
		this.setInfo(info);
		// 2012/06/05 原因となった要因を埋め込む対応 end
		causeObject = ex;
	}

	/**
	 * エラーコードを取得します。
	 * @return エラーコード
	 */
	public String getResult() {
		return errorResult;
	}

	/**
	 * エラーコードを設定します。
	 * @param result エラーコード
	 */
	public void setResult(String result) {
		errorResult = result;
	}

	/**
	 * エラー埋め字を取得します。
	 * @return 埋め字
	 */
	public String getInfo() {
		return errorInfo;
	}

	/**
	 * エラー埋め字を設定します。
	 * @param info 埋め字
	 */
	public void setInfo(String info) {
		errorInfo = info;
	}

	/**
	 * 例外情報を文字列形式で取得します。
	 * @return 例外情報
	 */
	public String toString() {
		
		String msg = this.getClass().getName() + " : \n" 
				+ "    result=" + errorResult + ", info=" + errorInfo;
		if (causeObject != null) {
			msg = msg + "\n : " + causeObject.toString();
		}
		return msg;
	}
	
	/**
	 * この例外を投げる原因となった例外を取得します。
	 * @return もともと投げられた例外
	 */
	public Exception getCausedByException() {
		return (Exception)causeObject;
	}

	/**
	 * この例外を投げる原因となったオブジェクトを取得します。
	 * @return 原因となったオブジェクト
	 */
	public Object getCausedByObject() {
		return causeObject;
	}

}
