<?php
/**
* リソースキャッシュクラス
*
* PHP version 5
*
* @package    core
* @author     stk2k <stk2k@sazysoft.com>
* @copyright  2008 stk2k, sazysoft
*/

class ResourceCache
{
	private $_cache_files;

	/*
	 *    コンストラクタ
	 */
	public function __construct()
	{
		$this->_cache_files = array();
	}

	/*
	 *    リソースを取得
	 */
	public function get( $name, ProcedureContext $context )
	{
//print "name: $name<BR>";

		// リソースキャッシュを使うか
		$use_res_cache = Profile::getBoolean( "USE_RESOURCE_CACHE" );

//print "use_res_cache: $use_res_cache<BR>";

		if ( $use_res_cache ){
			// キャッシュする場合
			$cache_file = Factory::createCacheFile( $name );

			// ロード
			if ( $cache_file->load() ){
				// ヘッダのチェックと期限切れチェック
				if ( $cache_file->checkHeader() ){
					if ( !$cache_file->checkExpired() ){
						// キャッシュされた内容を返す
						return $cache_file->getData();
					}
					else{
//						print "cache file expired!!!<BR>";
					}
				}
				else{
//					print "invalid cache file header!!!<BR>";
				}
			}
		}

		// ここからはタイムアウトしたか、キャッシュデータ未作成の場合

		// リソースを生成
		$resource = Factory::createResource( $name );

		// データを取得
		$data = $resource->getData( $context );

		// キャッシュ
//print "isCacheable: " . $resource->isCacheable() . "<BR>";
		if ( $resource->isCacheable() ){

			// キャッシュファイルを作成
			$cache_file = Factory::createCacheFile( $name, $data );

			// 保存
			$cache_file->save();

		}

		return $data;
	}
}
