/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUMacAddressCheckCC
*   ソースファイル名：JFUMacAddressCheckCC.java
*   作成者          ：富士通
*   日付            ：2012年3月28日
*＜機能概要＞
*   MACアドレスチェックコンポーネント部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2012/09/04   FU）大塚    新規作成
*   v1.01.00    2012/11/01   FU) 大塚    IT1-2012-0001882対応
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import static eo.common.constant.JPCModelConstant.FUNC_CD_1;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;

import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EKK0121B501CBSMsg;

/**
 * 同一請求先チェックコンポーネント部品
 * <br>
 * @author 富士通
 */
@SuppressWarnings("unchecked")
public class JFUMacAddressCheckCC extends JFUBaseCC
{
	/** テンプレートID(MACアドレス使用状況一覧照会) */
	private static final String TEMPLATE_ID_EKK0121B501 = "EKK0121B501";

	/** テンプレートID(MACアドレス使用状況一覧照会明細) */
	private static final String TEMPLATE_ID_DETAIL_EKK0121B501 = "EKK0121B501CBSMsg1List";

	/** IN項目リスト(MACアドレス使用状況一覧照会) */
	private static final List<String> IN_COLUMN_EKK0121B501 =
			Arrays.asList(EKK0121B501CBSMsg.KEY_MACAD, EKK0121B501CBSMsg.KEY_SVC_KEI_PCRS_CD, EKK0121B501CBSMsg.KEY_PCRS_CD,
					EKK0121B501CBSMsg.KEY_PPLAN_CD, EKK0121B501CBSMsg.KEY_RSV_APLY_YMD);

	/** 関連チェックエラー項目(MACアドレス使用状況一覧照会) */
	private static final String ERROR_COLUMN_MACAD = "key_macad_err";

	/**
	 * MACアドレス存在チェック処理<br>
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception 例外
	 */
	public IRequestParameterReadWrite executeCheck(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// 機能コード取得(1:チェック＆登録, 2:チェックのみ)
		String funcCode = getFuncCode(param, fixedText);

		// マップ(inMap)からマップ(ccMap)へ値をコピー
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);
		HashMap<String, Object> ccMap = new HashMap<String, Object>();
		copyMap(inMap, ccMap);

		if (FUNC_CD_1.equals(funcCode))
		{
			// SIF:MACアドレス使用状況一覧照会
			// 上りマッピング項目設定
			setInMapEKK0121B501(param, fixedText, ccMap);
			// サービスIF実行 
			executeSC(handle, param, fixedText, TEMPLATE_ID_EKK0121B501, TEMPLATE_ID_DETAIL_EKK0121B501, IN_COLUMN_EKK0121B501, "");

			HashMap<String, Object> resultMap = (HashMap<String, Object>)param.getData(fixedText);

			if (resultMap.containsKey(TEMPLATE_ID_DETAIL_EKK0121B501))
			{
				ArrayList<Object> childList = (ArrayList<Object>)resultMap.get(TEMPLATE_ID_DETAIL_EKK0121B501);

				// 検索結果レコードが1件以上ある場合
				if (childList.size() > 0)
				{
					// データが存在した場合、エラーとする
					setRelationErrorInfo(param, TEMPLATE_ID_EKK0121B501, ERROR_COLUMN_MACAD, fixedText);
					String msg = String.valueOf(param.getControlMapData(SCControlMapKeys.RETURN_MESSAGE));
					throw new SCCallException(msg, String.valueOf(RETURN_CODE_NORMAL), JPCModelConstant.RELATION_ERR);
				}
			}
		}
		return param;
	}

	/**
	 * チェック処理
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		return null;
	}

	/**
	 * 上りマッピング項目設定(MACアドレス使用状況一覧照会)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param ccMap CCマップ
	 * @throws RequestParameterException
	 */
	private void setInMapEKK0121B501(IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> ccMap)
			throws RequestParameterException
	{
		// 検索エラーなし設定
		ignoreSearchError(param, fixedText);

		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);
		// 必須入力項目
		inMap.put(EKK0121B501CBSMsg.KEY_MACAD, ccMap.get(EKK0121B501CBSMsg.KEY_MACAD));
		inMap.put(EKK0121B501CBSMsg.KEY_SVC_KEI_PCRS_CD, ccMap.get(EKK0121B501CBSMsg.KEY_SVC_KEI_PCRS_CD)); // IT1-2012-0001882対応
		inMap.put(EKK0121B501CBSMsg.KEY_PCRS_CD, ccMap.get(EKK0121B501CBSMsg.KEY_PCRS_CD));
		inMap.put(EKK0121B501CBSMsg.KEY_PPLAN_CD, ccMap.get(EKK0121B501CBSMsg.KEY_PPLAN_CD));
		inMap.put(EKK0121B501CBSMsg.KEY_RSV_APLY_YMD, ccMap.get(EKK0121B501CBSMsg.KEY_RSV_APLY_YMD));

	}

	/**
	 * マップからマップへ値をコピーします
	 * <br>
	 * @param srcMap 取得元マップ
	 * @param destMap 取得先マップ
	 */
	private void copyMap(HashMap<String, Object> srcMap, HashMap<String, Object> destMap)
	{
		if (srcMap != null && destMap != null)
		{
			for (String srcKey : srcMap.keySet())
			{
				destMap.put(srcKey, srcMap.get(srcKey));
			}
		}
	}
}