<?php
/**
* レンダラを生成するファクトリクラス
*
* PHP version 5
*
* @package    core
* @author     stk2k <stk2k@sazysoft.com>
* @copyright  2008 stk2k, sazysoft
*/

class charcoal_RendererFactory 
{
	/*
	 * レンダラーを作成
	 */
	public static function create( $renderer_name )
	{
		log_info( "system",  "レンダラー[$renderer_name]をロードします。", __FILE__, __LINE__ );

		// RendererConfigをロード
		$config = charcoal_ConfigLoader::loadConfig( $renderer_name, 'renderer' );

		// クラス名を取得
		$class_name = $config->getString( 'class_name' );

		// レンダラーのインスタンス生成
		$renderer = charcoal_ClassUtil::newInstance( $class_name );

		// 生成したインスタンスがIRendererインタフェースを実装しているか確認
		if ( !($renderer instanceof charcoal_IRenderer) ){
			// 実装例外
			throw new charcoal_InterfaceImplementException( $class_name, "charcoal_IRenderer" );
		}

		log_info( "system",  "レンダラー[$renderer_name]を初期化します。", __FILE__, __LINE__ );

		// レンダラーを初期化
		$renderer->init( $config );

		log_info( "system",  "レンダラー[$renderer_name]をロードしました。", __FILE__, __LINE__ );

		// ロードしたレンダラーを返却
		return $renderer;
	}
}
