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

class charcoal_ValidatorFactory 
{
	/*
	 * バリデータを作成
	 */
	public static function create( $validator_name )
	{
		Logger::writeln( LogLevel::INFO,  "バリデータ[$validator_name]をロードします。", __FILE__, __LINE__ );

		// ValidatorConfigをロード
		$validator_config = ConfigLoader::loadConfig( $validator_name, "validator" );

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

		// バリデータのインスタンス生成
		$validator = ClassUtil::newInstance( $class_name );

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

		Logger::writeln( LogLevel::INFO,  "バリデータ[$validator_name]を初期化します。", __FILE__, __LINE__ );

		// バリデータを初期化
		$validator->initValidator( $validator_config );

		Logger::writeln( LogLevel::INFO,  "バリデータ[$validator_name]をロードしました。", __FILE__, __LINE__ );

		// ロードしたバリデータを返却
		return $validator;
	}
}
