<?php
/**
* シェル用プローシージャ
*
* PHP version 5
*
* @package    procedures
* @author     stk2k <stk2k@sazysoft.com>
* @copyright  2008 stk2k, sazysoft
*/
class ShellProcedure implements IProcedure
{
	var $_events;
	var $_task_manager;

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

	/*
	 * プロシージャ名を取得
	 */
	public function getProcedureName()
	{
		return "Default Procedure";
	}

	/*
	 * プロシージャを初期化する
	 */
	public function init( Config $config )
	{
		$this->_events              = $config->getArray( "events" );
		$this->_task_manager        = $config->getString( "task_manager" );
	}

	/*
	 * プロシージャを実行する
	 */
	public function execute( IRequest $request, ProcedureContext $context, Response $response )
	{
		$proc_name = $context->getProcedureName();

		log_info( "system",  "プロシージャ[$proc_name]を実行します。", __FILE__, __LINE__ );

		//=======================================
		// タスクマネージャの作成
		//

		// タスクマネージャを作成
		$task_manager_name = $this->_task_manager;
		$task_manager = Factory::createTaskManager( $task_manager_name );

		//=======================================
		// イベントディスパッチ
		//

		$task_manager->dispatchEvents( $request, $this->_events );

		//=======================================
		// イベント処理
		//

		$task_manager->processEvents( $context );

		//=======================================
		// タスクハンドリング
		//

		// タスクハンドリング
		$screen_name = $task_manager->handleTasks( $response );

		log_info( "system",  "プロシージャ[$proc_name]を実行しました。", __FILE__, __LINE__ );
	}
}
