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

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

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

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

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

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

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

		//=======================================
		// タスクの登録
		//

		foreach( $this->_tasks as $task_name ){
			$task_manager->registerTask( s($task_name) );
			log_info( "event",  "タスクマネージャにタスク[$task_name]を登録しました。", __FILE__, __LINE__ );
		}

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

		$task_manager->dispatchEvents( $request );

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

		$task_manager->processEvents();

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

return __FILE__;