/********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom
 ********************************************************************
 *＜プログラム内容＞
 *  システム名      ：eo顧客基幹システム
 *  モジュール名    ：eo光電話変更区分判定コンポーネント部品クラス
 *  ソースファイル名：JKKAdchgSvcKeiDivJdgTelCC.java
 *  作成者          ：FJ
 *  日付            ：2012年8月20日
 *＜機能概要＞
 *  住所変更に伴うeo光電話の
 *	変更区分の判定を行う部品クラス。
 *＜修正履歴＞
 *  バージョン  修正日      修正者      修正内容
 *  v1.00.00    2011/11/10  FJ          新規作成
 *  v3.00.00    2012/04/12  FJ          巻取り@案件対応
 *
 ********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.HashMap;

import com.fujitsu.futurity.bp.custom.constant.JKKAdchgConstCC;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.sun.enterprise.tools.common.util.StringUtils;

public class JKKAdchgSvcKeiDivJdgTelCC extends AbstractCommonComponent {

	/** セッションハンドル保持域 */
	private static ThreadLocal<SessionHandle> keepSesHandle = new ThreadLocal<SessionHandle>()
	{
		// 保持域への設定はinitialValue()ではなくset()を使用する為、
		// initialValue()は実装しない
	};

	/**
	 * コンストラクタ.
	 * <br>
	 */
	public JKKAdchgSvcKeiDivJdgTelCC() {
	}
	
	/** 住所変更登録方法:追加 */
	public static final int AD_CHG_CMT_ADD = 0;
	/** 住所変更登録方法:継続 */
	public static final int AD_CHG_CMT_KEEP = 1;
	/** 住所変更登録方法:変更 */
	public static final int AD_CHG_CMT_MODIFY = 2;
	/** 住所変更登録方法:解約 */
	public static final int AD_CHG_CMT_SLRE = 3;
	/** 住所変更登録方法:保留 */
	public static final int AD_CHG_CMT_HOLD = 5;

	/**
	 * 住所変更登録方法判定.
	 * <br>
	 * @param   handle     セッションマネージャなどを持ったハンドル情報
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Throwable  例外が発生した場合
	 * @return  リクエストパラメータ(param)に戻り値を追加して返却する
	 */
	public IRequestParameterReadWrite adchgSvcKeiDivJdgTel(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable {

		try {

			/** 事前準備 */
			HashMap<String, Object> paramMap = (HashMap<String, Object>)param.getData(fixedText);

			/** リソース保持 */
			// セッションハンドルをローカル変数に保持
			keepSesHandle.set(handle);

			/** 住所変更登録方法 特定 */
			int jdgVal;

			// param.利用サービス変更区分を取得し、処理を分岐
			String use_svc_chg_div = (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_USE_SVC_CHG_DIV);
			if(StringUtils.isEmpty(use_svc_chg_div) || JKKAdchgConstCC.CD00849_NON.equals(use_svc_chg_div)){
				
				// 初期値を返却
				paramMap.put("jdg_chg_div_tel", "");
				return param;
				
			} else if(JKKAdchgConstCC.CD00849_ADD.equals(use_svc_chg_div)){

				// 追加を示す値を返却
				jdgVal = AD_CHG_CMT_ADD;
			} else if(JKKAdchgConstCC.CD00849_SLRE.equals(use_svc_chg_div)){

				// 解約を示す値を返却
				jdgVal = AD_CHG_CMT_SLRE;
			} else if(JKKAdchgConstCC.CD00849_HOLD.equals(use_svc_chg_div)){

				// 保留を示す値を返却
				jdgVal = AD_CHG_CMT_HOLD;
			} else if(JKKAdchgConstCC.CD00849_KEEP.equals(use_svc_chg_div)){

				// 継続を示す値を返却
				jdgVal = AD_CHG_CMT_KEEP;
			} else {

				/** 事前準備 */
				// 返却値を「変更」を示す値で初期化
				jdgVal = AD_CHG_CMT_MODIFY;

			}
			
			// 登録方法を格納
			paramMap.put("jdg_chg_div_tel", String.valueOf(jdgVal));

			} finally {

			// ・セッションハンドル保持域
			if(keepSesHandle.get() != null){
				keepSesHandle.remove();
			}
		}

		return param;
	}
}