/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUSV012201ReqChk
*   ソースファイル名：JFUSV012201ReqChk.java
*   作成者          ：富士通
*   日付            ：2011年07月28日
*＜機能概要＞
*   実行判定部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/07/28   FJ）西川    新規作成
*   v6.00       2013/12/03   FJ）中谷    変更【OM-2013-0004592】メールアドレス変更時SOD発行の改修
*
**********************************************************************/

package com.fujitsu.futurity.bp.custom.reqchk;

import java.util.ArrayList;
import java.util.HashMap;

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;

import eo.common.constant.JFUStrConst;
import eo.ejb.cbs.cbsmsg.EKK0401A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401A010CBSMsg1List;

/**
 * メールアドレス自動設定ツール連携(指示実行)実行判定部品です。
 * 
 * <br>
 * @author 富士通
 */
public class JFUSV012201ReqChk extends AbstractCustomReqChk
{

	/** WORK用キー項目 */
	private static final String WORK_FUSV0122WORK01 = "FUSV0122WORK01";
	/** サブオプションサービス契約一意照会 */
	private static final String SC_TITLE_FUSV012202 = "FUSV012202SC";
	/** オプションサービス契約<ISP>情報変更 */
	private static final String SC_TITLE_FUSV012205 = "FUSV012205SC";
	
	/** メールエイリアス契約保有有無 */
	private static final String ALIAS_UM = "alias_um";
	
	/** メール各種設定引継フラグ */
	private static final String ML_VRSETTE_HKTGI_FLG = "ml_vrsette_hktgi_flg";

	/**
	 * メールアドレス自動設定ツール連携(指示実行)の実行判定を行います。
	 * @param irp
	 * @param conditionvalue
	 * @return boolean
	 * @throws ReqChkException
	 */
	@SuppressWarnings("unchecked")
	public boolean checkExecution(IRequestParameterReadOnly irp, IConditionValue conditionvalue) throws ReqChkException
	{
		try
		{
			// エイリアス有無による実行判定
			HashMap<String, Object> map = (HashMap<String, Object>)irp.getData(WORK_FUSV0122WORK01);

			// オプションサービス契約ステータス判定
			boolean isContract = false;
			HashMap<String, Object> sbopSvcKeiMap = (HashMap<String, Object>)irp.getData(SC_TITLE_FUSV012202);
			ArrayList resList = (ArrayList)sbopSvcKeiMap.get(EKK0401A010CBSMsg.EKK0401A010CBSMSG1LIST);

			// SCマップから必要な情報を取り出す
			HashMap fusv012205scMap = (HashMap)irp.getData(SC_TITLE_FUSV012205);
			
			// メール各種設定引継フラグが「1:引き継ぐ」の場合、実行しない
			if (null != fusv012205scMap && fusv012205scMap.containsKey(ML_VRSETTE_HKTGI_FLG))
			{
				String mlVrsetteHktgiFlg = (String)fusv012205scMap.get(ML_VRSETTE_HKTGI_FLG);
				if (JFUStrConst.CD00001_1.equals(mlVrsetteHktgiFlg))
				{
					// サブオプションサービス契約一意照会実行結果をクリア(解約済み、または、キャンセル済みの場合、オーダー発行は不要)
					sbopSvcKeiMap.remove(EKK0401A010CBSMsg.EKK0401A010CBSMSG1LIST);
					// メールエイリアス契約保有有無を｢0:無｣で上書き(解約済み、または、キャンセル済みなので未契約と同じ)
					map.put(ALIAS_UM, JFUStrConst.CD00002_0);

					return false;
				}
			}
			
			if (null != resList && resList.size() != 0)
			{
				HashMap resMap = (HashMap)resList.get(0);
				String sbopSvcKeiStat = (String)resMap.get(EKK0401A010CBSMsg1List.SBOP_SVC_KEI_STAT);
				isContract =
						JFUStrConst.CD00037_020.equals(sbopSvcKeiStat) || JFUStrConst.CD00037_030.equals(sbopSvcKeiStat)
								|| JFUStrConst.CD00037_100.equals(sbopSvcKeiStat);

				// 契約中でない場合
				if (!isContract)
				{
					// サブオプションサービス契約一意照会実行結果をクリア(解約済み、または、キャンセル済みの場合、オーダー発行は不要)
					sbopSvcKeiMap.remove(EKK0401A010CBSMsg.EKK0401A010CBSMSG1LIST);
					// メールエイリアス契約保有有無を｢0:無｣で上書き(解約済み、または、キャンセル済みなので未契約と同じ)
					map.put(ALIAS_UM, JFUStrConst.CD00002_0);
				}
				
				return isContract;
			}
			else
			{
				if (null != conditionvalue.get(null) && map.containsKey(ALIAS_UM))
				{
					String alias_um = conditionvalue.get(null);
					return alias_um.equals(map.get(ALIAS_UM));
				}
			}
			return true;
		}
		catch (RequestParameterException e)
		{
			throw new ReqChkException(e.getMessage(), e);
		}
	}
}
