/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUCngSvcKeiTvShkDap01CC
*   ソースファイル名：JFUCngSvcKeiTvShkDap01CC.java
*   作成者          ：富士通
*   日付            ：2011年09月29日
*＜機能概要＞
*   宅内機器一意照会コンポーネント部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/09/29   FU）川端    新規作成
*   v7.00.00    2014/02/21   FU）谷本    【OM-2014-0000766】引越時にテレビが照査済みの場合にエラー
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.text.ParseException;
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 eo.common.constant.JFUStrConst;
import eo.ejb.cbs.cbsmsg.EWCA0010002CBSMsg;
import eo.ejb.cbs.cbsmsg.EWCA0010002CBSMsg1List;

/**
 * 宅内機器一意照会コンポーネント部品
 * <br>
 * @author 富士通
 */
@SuppressWarnings("unchecked")
public class JFUCngSvcKeiTvShkDap01CC extends JFUBaseCC
{
	/** paramからの引数の宅内機器一意照会明細 */
	private static final String KEY_CC_LIST = "TKKIKISHOKAI1List";
	/** IFからの戻り値の宅内機器一意照会明細 */
	private static final String TEMPLATE_ID_DETAIL_EWCA0010002 = "EWCA0010002CBSMsg1List";
	/** テンプレートID(宅内機器一意照会) */
	private static final String TEMPLATE_ID_EWCA0010002 = "EWCA0010002";
	/** IN項目リスト(宅内機器一意照会) */
	private static final List<String> IN_COLUMN_LIST_EWCA0010002 =
			Arrays.asList(EWCA0010002CBSMsg.KEY_TK_MDL_CD, EWCA0010002CBSMsg.KEY_KK_SEIZO_NO, EWCA0010002CBSMsg.KEY_STBID,
					EWCA0010002CBSMsg.KEY_TK_SBT_CD);

	/**
	 * 宅内機器一意照会実行処理<br>
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception 例外
	 */
	public IRequestParameterReadWrite getTkkikiList(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		HashMap<String, Object> inMap = (HashMap<String, Object>)(param.getData(fixedText));
		ArrayList<Object> ccList = (ArrayList<Object>)inMap.get(KEY_CC_LIST);

		for (int i = 0; i < ccList.size(); i++)
		{
			// ユーザデータ取得
			HashMap<String, Object> ccMap = (HashMap<String, Object>)ccList.get(i);
			// 機器製造番号がNULLの場合は、呼ばない
			if (JFUBPCommon.isNull(ccMap.get("key_kiki_seizo_no")))
			{
				continue;
			}

			// ●宅内機器一意照会
			inMap.remove(TEMPLATE_ID_DETAIL_EWCA0010002);
			// 上りマッピング
			setInMapEWCA0010002(param, fixedText, i);
			// サービスIF実行
			executeSC(handle, param, fixedText, TEMPLATE_ID_EWCA0010002, TEMPLATE_ID_DETAIL_EWCA0010002, IN_COLUMN_LIST_EWCA0010002, BLANK);
			// 下りマッピング
			setOutMapEWCA0010002(param, fixedText, i);
		}

		return param;
	}

	/**
	 * 上りマッピング項目設定(宅内機器一意照会)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param cnt カウント
	 * @throws RequestParameterException
	 * @throws ParseException 
	 */
	private void setInMapEWCA0010002(IRequestParameterReadWrite param, String fixedText, int cnt) throws RequestParameterException, ParseException
	{
		// 検索エラーなし設定
		ignoreSearchError(param, fixedText);

		// ユーザデータ取得
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);
		ArrayList<Object> ccList = (ArrayList<Object>)inMap.get(KEY_CC_LIST);
		HashMap<String, Object> ccMap = (HashMap<String, Object>)ccList.get(cnt);

		// ＫＥＹ＿宅内機器型式コード
		inMap.put(EWCA0010002CBSMsg.KEY_TK_MDL_CD, ccMap.get("key_tk_mdl_cd"));
		// ＫＥＹ＿機器製造番号
		inMap.put(EWCA0010002CBSMsg.KEY_KK_SEIZO_NO, ccMap.get("key_kiki_seizo_no"));
		// ＫＥＹ＿ＳＴＢＩＤ
		inMap.put(EWCA0010002CBSMsg.KEY_STBID, "");
		// ＫＥＹ＿宅内機器種別コード
		inMap.put(EWCA0010002CBSMsg.KEY_TK_SBT_CD, JFUStrConst.CD01262_A0);
	}

	/**
	 * 下りマッピング項目設定(宅内機器一意照会)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param cnt カウント
	 * @throws RequestParameterException
	 * @throws ParseException 
	 */
	private void setOutMapEWCA0010002(IRequestParameterReadWrite param, String fixedText, int cnt) throws RequestParameterException, ParseException
	{
		// ユーザデータ取得
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);
		ArrayList<Object> ccList = (ArrayList<Object>)inMap.get(KEY_CC_LIST);
		HashMap<String, Object> ccMap = (HashMap<String, Object>)ccList.get(cnt);

		// IFからの戻り値の宅内機器一意照会明細を抽出
		ArrayList<Object> childList = (ArrayList<Object>)inMap.get(TEMPLATE_ID_DETAIL_EWCA0010002);
		HashMap<String, Object> childMap = new HashMap<String, Object>();
		// リストがNULL出ない場合のみ値を取得
		if (childList != null)
		{
			childMap = (HashMap<String, Object>)childList.get(0);
		}

		// ＳＴＢＩＤ
		ccMap.put("stb_id", childMap.get(EWCA0010002CBSMsg1List.STBID));
	}

	/**
	 * チェック処理
	 * 
	 * <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;
	}
}
