<?php
/**
* プロシージャ中のパラメータを保持するコンテキストクラス
*
* PHP version 5
*
* @package    core
* @author     stk2k <stk2k@sazysoft.com>
* @copyright  2008 stk2k, sazysoft
*/

class charcoal_ProcedureContext 
{
	public $session;
	public $db;

	private $_proc_name;
	private $_data;
	private $_res_cache;

	/*
	 *    コンストラクタ
	 */
	public function __construct( $proc_name, charcoal_IProcedure $procedure, charcoal_Session $session )
	{
		$this->session        = $session;
		$this->db             = new charcoal_DB();

		$this->_proc_name     = $proc_name;
		$this->_data          = array();
		$this->_res_cache     = new charcoal_ResourceCache();
	}

	/*
	 *    プロシージャ名を取得
	 */
	public function getProcedureName()
	{
		return $this->_proc_name;
	}

	/*
	 * コンポーネントを取得する
	 */
	public function getComponent( $component_name )
	{
		return charcoal_DIContainer::getComponent( $component_name );
	}

	/*
	 * フォームを取得する
	 */
	public function getForm( $form_name )
	{
		return charcoal_FormFactory::create( $form_name );
	}

	/*
	 *    データベースオブジェクトを取得
	 */
	public function getDB()
	{
		return $this->db;
	}

	/*
	 *    セッションオブジェクトを取得
	 */
	public function getSession()
	{
		return $this->session;
	}

	/*
	 *    リソースを取得
	 */
	public function getResource( $name )
	{
		return $this->_res_cache->get( $name, $this );
	}

	/*
	 *    キー一覧を取得
	 */
	public function getKeys()
	{
		return array_keys( $this->_data );
	}

	/*
	 * コンテキスト値を取得
	 */
	public function get( $key )
	{
		return isset($this->_data[ $key ]) ? $this->_data[ $key ] : NULL;
	}

	/*
	 * コンテキスト値を設定
	 */
	public function set( $key, $value )
	{
		$this->_data[ $key ] = $value;
	}

	/*
	 * ダンプ
	 */
	public function dump()
	{
		System::dumpArray( $this->_data );
	}
}

