/**
 * 
 */
package com.fujitsu.futurity.bp.custom.reqchk;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.bp.custom.constant.KKSV0023_KKSV0023OP;
import com.fujitsu.futurity.bp.custom.constant.KKSV0023_KKSV0023OP_RECCHK;
import com.fujitsu.futurity.bp.custom.constant.KKSV0023_KKSV0023OP_WORK;
import com.fujitsu.futurity.bp.custom.constant.KKSV0023_KKSV0023OP_WORK_EKK0081A010CBSMsg1List;
import com.fujitsu.futurity.bp.x21.bpm.common.AbstractCustomReqChk;
import com.fujitsu.futurity.bp.x21.bpm.common.IConditionValue;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadOnly;
import com.fujitsu.futurity.bp.x21.bpm.reqchk.exception.ReqChkException;


/**
 * KKSV0023 固定グローバルＩＰアドレス情報登録<br>
 * KKSV002306SCオプションサービス契約＜ＩＳＰ＞照査締結<br>
 * <br>
 * 機能コードが"チェック＆登録"かつ、サービス契約ステータスが"締結済"または"サービス提供中"の場合に<br>
 * 当ＳＣを実行可能とします。<br>
 * 
 * @author 富士通
 * @since 2011-08-11
 */
public class JKKSV002306ReqChk extends AbstractCustomReqChk
{

	/**
	 * オプションサービス契約＜ＩＳＰ＞照査締結ＳＣ　実行判定メソッド
	 */
	@SuppressWarnings("unchecked")
	@Override
	public boolean checkExecution(IRequestParameterReadOnly arg0, IConditionValue arg1) throws ReqChkException
	{
		boolean ret = false;

		try 
		{
			String svc_kei_stat = null;		// サービス契約ステータス
			String func_code = null;		// 機能コード
			String svc_kei_ucwk_stat = null; // サービス契約内訳ステータス
			
			// チェック条件項目マップから必要な情報を取り出す
			HashMap<String,Object> parentMap = (HashMap<String,Object>)arg0.getData(KKSV0023_KKSV0023OP.RECCHK);
			// サービス契約ステータス
			svc_kei_ucwk_stat = (String)parentMap.get(KKSV0023_KKSV0023OP_RECCHK.SVC_KEI_UCWK_STAT);
			
			//サービス契約一意照会マップ
			HashMap<?, ?> workAreaMap = (HashMap<?, ?>)arg0.getMappingWorkArea();
			HashMap<String, Object> kksv002301Map = (HashMap<String, Object>)workAreaMap.get(KKSV0023_KKSV0023OP.WORK);
			if (kksv002301Map != null && kksv002301Map.containsKey(KKSV0023_KKSV0023OP_WORK.EKK0081A010CBSMSG1LIST))
			{
				//明細の ArrayList を取得
				ArrayList<HashMap<String, Object>> childList = 
					(ArrayList<HashMap<String, Object>>)kksv002301Map.get(KKSV0023_KKSV0023OP_WORK.EKK0081A010CBSMSG1LIST);
				//照会結果は必ず１件（のハズ）
				HashMap<String, Object> childMap = (HashMap<String, Object>)childList.get(0);
				if (childMap != null)
				{
					//サービス契約ステータスを取得
					svc_kei_stat = (String)childMap.get(KKSV0023_KKSV0023OP_WORK_EKK0081A010CBSMsg1List.SVC_KEI_STAT);
				}
			}

			//オプションサービス契約＜ＩＳＰ＞登録マップ
			HashMap<String, Object> kksv002305Map = (HashMap<String, Object>)arg0.getData(KKSV0023_KKSV0023OP.KKSV002305SC);
			if (kksv002305Map != null)
			{
				// 機能コードを取得
				func_code = (String)kksv002305Map.get("func_code");
			}

			//実行判定
			if (svc_kei_stat != null && func_code != null)
			{
				// 機能コードが"チェック＆登録"かつ、サービス契約ステータスが"締結済"または"サービス提供中"の場合にのみ実施
				if ("1".equals(func_code) && (svc_kei_stat.equals("030") || svc_kei_stat.equals("100")) && (svc_kei_ucwk_stat.equals("030") || svc_kei_ucwk_stat.equals("100")))
				{
					ret = true;		//OK
				}
			}
		}
		catch (RequestParameterException e) 
		{
			/*NOP*/ ;
		}

		return ret;
	}
}
