<?php
/**
* フレームワーク例外の基底クラス
*
* PHP version 5
*
* @package    exceptions
* @author     stk2k <stk2k@sazysoft.com>
* @copyright  2008 stk2k, sazysoft
*/


class CharcoalException extends Exception
{
	private $_cause;
	private $_backtrace;

	public function __construct( $message, Exception $cause = null )
	{
		parent::__construct( $message );

		$this->_cause = $cause;
		$this->_backtrace = debug_backtrace();
	}

	/**
	 *   原因の例外
	 */
	public function getCause()
	{
		return $this->_cause;
	}

	/**
	 *   原因の例外リスト
	 */
	public function getCauseList()
	{
		return self::makeCauseList( $this );
	}

	/**
	 *   バックトレース
	 */
	public function getBackTrace()
	{
		return $this->_backtrace;
	}

	/*
	 * 例外の原因リストを作成する
	 */
	public static function makeCauseList( Exception $e ){
		if ( $e instanceof Exception ){
			// 更に原因があればそれも追加
			if ( $e->getCause() ){
				$cause_list = self::makeCauseList( $e->getCause() );
				if ( $cause_list ){
					$cause_list[] = $e;
					return $cause_list;
				}
			}
			return array( $e );
		}
		return array( $e );
	}
}
