/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUSV0178ReqChk
*   ソースファイル名：JFUSV0178ReqChk.java
*   作成者          ：富士通
*   日付            ：2011年10月27日
*＜機能概要＞
*   実行判定部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/10/27   FJ）赤井    新規作成
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.reqchk;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

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.parameter.RequestParameter;
import com.fujitsu.futurity.bp.x21.bpm.reqchk.exception.ReqChkException;

/**
 * FUSV0178SCの実行条件判定クラス
 * 
 * <br>
 * @author 富士通
 */
public class JFUFUSV0116ReqChk extends AbstractCustomReqChk 
{
	
	/**
	 * サービスIFの実行判定を実施する。
	 * @param irp
	 * @param conditionvalue
	 * @return 判定結果(条件を満たすtrue/満たさないfalse)
	 * @throws ReqChkException
	 */
	public boolean checkExecution(IRequestParameterReadOnly irp, IConditionValue conditionvalue) throws ReqChkException 
	{
		// 各処理が成功の場合に、trueを返す。
		try
		{
			// BP定義ツールでセットしている値の取得
			String key = conditionvalue.get(null);
			
			// SCマップ格納用
			HashMap fusv0116scMap = null;
			
			// チェック対象のコード
			String code = "";
			
			// コードが"1"の場合：同一請求先照会が0件の時は、実行しない。
			if ("1".equals(key))
			{
				// 同一請求先照会マップを取得
				HashMap<String, Object> parentMap = (HashMap<String, Object>)irp.getData("FUSV011601SC");

				if (parentMap == null)
				{
					return false;
				} 
				
				// 同一請求先照会明細を取得
				if (parentMap.containsKey("EKK0321B501CBSMsg1List"))
				{
					ArrayList msgList = (ArrayList)parentMap.get("EKK0321B501CBSMsg1List");

					// 検索結果レコードが1件以上ある場合
					if (msgList.size() > 0)
					{
						return true;
					}
					return false;
				}
			} 
			// コードが"2"の場合：請求方法が"2"「預金口座振替」または、"3"「郵便自動振込」の場合のみ実行
			else if ("2".equals(key)) 
			{
				
				RequestParameter rp = (RequestParameter)irp;
				Map<?, ?> map = rp.getUserData();
				
				// 口座一意照会マップを取得
				HashMap<String, Object> parentMap = (HashMap<String, Object>)map.get("FUSV011604SC");
				
				if (parentMap == null) 
				{
					return false;
				} 
				else 
				{
					return true;
				}

			} 
			// コードが"3"の場合：請求方法が"4"「クレジットカード」の場合のみ実行
			else if ("3".equals(key)) 
			{
				
				RequestParameter rp = (RequestParameter)irp;
				Map<?, ?> map = rp.getUserData();
				
				// クレジットカード一意照会マップを取得
				HashMap<String, Object> parentMap = (HashMap<String, Object>)map.get("FUSV011605SC");
				
				if (parentMap == null) 
				{
					return false;
				} 
				else 
				{
					return true;
				}
			}
			// コードが"4"の場合：マンション物件一意照会用のマップが設定されている場合実行
			else if ("4".equals(key)) 
			{
				RequestParameter rp = (RequestParameter)irp;
				Map<?, ?> map = rp.getUserData();
				HashMap inMap = (HashMap)map.get("FUSV011608SC");

				//マンション物件一意照会用のマップがnullの場合、処理を実行しない。
				if (inMap == null)
				{
					return false;
				}
				else
				{
					return true;
				}
			}

			return false;

		}
		catch (RequestParameterException e)
		{
			throw new ReqChkException(e.getMessage(), e);
		}
	}
}
