/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUKyokaActionCache
*   ソースファイル名：JFUKyokaActionCache.java
*   作成者          ：富士通
*   日付            ：2012年04月04日
*＜機能概要＞
*   許可アクション定義ファイルキャッシュ部品です
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v3.00       2012/04/04   FJ）西川    新規作成 【ANK-0235-00-00】eoモバイルWiMAX受付対応(W10055)
*
**********************************************************************/

package eo.web.webview.common;

import java.util.HashMap;

import com.fujitsu.futurity.common.JCMPropertyCache;

import eo.common.constant.JFUStrConst;
import eo.web.webview.common.JCCWebCommon;


/**
 * 許可アクション定義の読み込みを行うクラスです。
 * <br>
 * @author 富士通
 */
public class JFUKyokaActionCache extends JCMPropertyCache
{
	
	/** インスタンス領域 */
	private volatile static JFUKyokaActionCache prop = null;

	/** コメント文字 */
	private static final String STR_COMMENT = "#";
	
	/**
	 * アプリケーションプロパティファイルから、許可アクションリスト定義ファイルのパス
	 * 及び文字エンコード種別を取得し、シングルトンでインスタンス化します。
	 * <br>
	 */
	private static void setPath()
	{
    	//アプリケーションプロパティファイルから許可アクション定義ファイルのパスと文字エンコード種別を取得
		String restFilePath = JCCWebCommon.getApplicationConst(JFUStrConst.FU_KYOKA_ACTION_FILE_PATH);
		String restFileEncode = JCCWebCommon.getApplicationConst(JFUStrConst.FU_KYOKA_ACTION_FILE_ENCODING);

		//シングルトンでインスタンス化
		JFUKyokaActionCache rc = JFUKyokaActionCache.getInstance();
		rc.PATH = restFilePath;
		rc.ENCODING = restFileEncode;
	}

	/**
	 * 本クラスのシングルトンインスタンスを取得します。
	 * 
	 * @return JFUKyokaActionCache シングルトンインスタンス
	 */	
	private static JFUKyokaActionCache getInstance()
	{
		if(prop == null)
		{
			prop = new JFUKyokaActionCache();
		}
		
		return prop;
	}
	
	/**
	 * 許可アクション定義ファイル情報を取得します。
	 * 
	 * @return 定義ファイル内の設定値を格納したマップ
	 * @exception Exception	プロパティファイルの読み込み時に発生する例外
	 */	
	@SuppressWarnings("unchecked")
	public static HashMap getConstMap() throws Exception
	{
		// パスを設定
		JFUKyokaActionCache.setPath();
		
		// プロパティファイルの読み込み
		prop.loadProperties();
		
		// 定義格納マップを返却
		return JFUKyokaActionCache.getInstance().mapConst;
	}
	
	/**
	 * 定義情報（1行）の文字列を、マップに格納します。
	 * オーバーライドした本メソッドでは、
	 * ・区切りを使用せず、キーと値に同じ定義情報を格納します。<br>
	 * ・trim処理を行って値を格納します。<br>
	 * ・キー重複による例外をスローしません。(定義後勝ち)
	 * <br>
	 * @param strLine 定義情報（1行）の文字列
	 */
	@SuppressWarnings("unchecked")
	@Override
	protected void analysisLineData(String strLine)
	{
		// 空行、コメント行は読み飛ばす
		if ((0 < JCCWebCommon.getLength(strLine)) && (!STR_COMMENT.equals(strLine.substring(0, 1))))
		{
			mapConst.put(JCCWebCommon.trim(strLine), JCCWebCommon.trim(strLine));
		}
	}
}
