<?
/**
* プロシージャの基本的名を実装するクラス
*
* PHP version 5
*
* @package    procedures
* @author     stk2k <stk2k@sazysoft.com>
* @copyright  2008 stk2k, sazysoft
*/
abstract class charcoal_DefaultProcedure
{
	var $_input_filters;
	var $_output_filters;
	var $_class_loaders;
	var $_renderer;

	/*
	 * コンストラクタ
	 */
	public function __construct()
	{
	}

	/*
	 * プロシージャを初期化する
	 */
	public function init( charcoal_Config $config )
	{
		$this->_output_filters      = $config->getArray( "output_filters" );
		$this->_input_filters       = $config->getArray( "input_filters" );
		$this->_renderer            = $config->getString( "renderer" );
	}

	/**
	 * レンダラの実行
	 */
	protected function processRenderer( $proc_name, charcoal_ProcedureContext $context, charcoal_Response $response )
	{
		log_info( "system",  "レンダラを実行します。", __FILE__, __LINE__ );

		if ( $this->_renderer && strlen($this->_renderer) > 0 ) {
			$renderer = charcoal_RendererFactory::create( $this->_renderer );
			if ( $renderer ) {
				$renderer->render( $proc_name, $context, $response );
			}
		}

		log_info( "system",  "レンダラを実行しました。", __FILE__, __LINE__ );
	}

	/**
	 * 出力フィルタの実行
	 */
	protected function processOutputFilters( charcoal_Request $request, charcoal_ProcedureContext $context, charcoal_Response $response )
	{
		log_info( "system",  "出力フィルタを実行します。", __FILE__, __LINE__ );

		if ( $this->_output_filters ) {
			foreach( $this->_output_filters as $filter_name ) {
				// フィルタを作成
				$filter = charcoal_FilterFactory::create( $filter_name );
				// フィルタの実行
				$filter->filter( $request, $context, $response );
			}
		}

		log_info( "system",  "出力フィルタを実行しました。", __FILE__, __LINE__ );
	}


	/**
	 * 入力フィルタの実行
	 */
	protected function processInputFilters( charcoal_Request $request, charcoal_ProcedureContext $context, charcoal_Response $response )
	{
		log_info( "system",  "入力フィルタを実行します。", __FILE__, __LINE__ );

		if ( $this->_input_filters ) {
			foreach( $this->_input_filters as $filter_name ) {
				// フィルタを作成
				$filter = charcoal_FilterFactory::create( $filter_name );
				// フィルタの実行
				$filter->filter( $request, $context, $response );
			}
		}

		log_info( "system",  "入力フィルタを実行しました。", __FILE__, __LINE__ );
	}

}
