/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKGetTaknkikiModelCdCC
*   ソースファイル名：JKKGetTaknkikiModelCdCC.java
*   作成者          ：富士通
*   日付            ：2013年03月28日
*＜機能概要＞
*   eo光ネット変更部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v5.00.00    2013/03/28   FJ）薄出    【IT1-2013-0000713】エラー確認画面の呼出パラメータへIP-STBの機器情報を追加
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;

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.AbstractCommonComponent;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.model.base.CAANMsg;

/**
 * エラー確認パラメータ情報取得部品
 * <br>
 * @author 富士通
 */
public class JKKGetTaknkikiModelCdCC extends AbstractCommonComponent
{
	/** 宅内機器型式コード一覧照会リスト名(登録用) */
	private static final String KIKI_ADD_LIST = "kktk_add_list";
	/** 宅内機器型式コード一覧照会リスト名(更新用) */
	private static final String KIKI_UPD_LIST = "kktk_update_list";
	/** 宅内機器型式コード一覧照会(登録用)プレフィックス */
	private static final String PREFIX_KIKI_ADD = "prefix_add";
	/** 宅内機器型式コード一覧照会(更新用)プレフィックス */
	private static final String PREFIX_KIKI_UPD = "prefix_upd";

	/**
	 * 宅内機器型式コード取得処理
	 * <br>
	 * @param handle
	 * @param param リクエストパラメータ
	 * @param fixedText
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite getTaknkikiModelCd(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
	throws Exception
	{
		HashMap inMap = (HashMap)param.getData(fixedText);
		ArrayList<HashMap<String, Object>> dataList = null;
		int devCnt = 0;
		String prefix = "";
		
		if (null == inMap)
		{
			return param;
		}
		
		//##################
		//### 更新機器用 ###
		//##################
		if (null != inMap.get(KIKI_UPD_LIST))
		{
			dataList = (ArrayList)inMap.get(KIKI_UPD_LIST);
			devCnt = dataList.size();
			for (int i = 0; i < devCnt; i++)
			{
				prefix = String.valueOf(((HashMap)dataList.get(i)).get(PREFIX_KIKI_UPD));
				
				// 宅内機器型式コード一覧照会
				JKKBpCommon.getTaknkikiModel(handle, param, (HashMap)dataList.get(i), prefix);
			}
		}
		
		//##################
		//### 登録機器用 ###
		//##################
		if(null != inMap.get(KIKI_ADD_LIST))
		{
			dataList = (ArrayList)inMap.get(KIKI_ADD_LIST);
			devCnt = dataList.size();
			for (int i = 0; i < devCnt; i++)
			{
				prefix = String.valueOf(((HashMap)dataList.get(i)).get(PREFIX_KIKI_ADD));
				
				// 宅内機器型式コード一覧照会
				JKKBpCommon.getTaknkikiModel(handle, param, (HashMap)dataList.get(i), prefix);
			}
		}
		
		return param;
	}
	
	/**
	 * CAANMsgに必要なデータのマッピング処理を行います。
	 * <br>
	 * @param handle
	 * @param param リクエストパラメータ
	 * @param fixedText 
	 * @return パラメータマップ
	 * @throws RequestParameterException
	 */
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
	throws RequestParameterException
	{
		ArrayList<CAANMsg> msgList = new ArrayList<CAANMsg>();

		int msgCnt = msgList.size();
		CAANMsg[] templates = new CAANMsg[msgCnt];
		for (int i = 0; i < msgCnt; i++)
		{
			templates[i] = msgList.get(i);
		}
		
		HashMap<String, Object> paramMap = setSCInputCommonData(param, new HashMap<String, Object>());
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap; //共通部品を使用するのみであるためInvokeCBSでは何もしない
	}
	
	/**
	 * エラー情報のマッピング処理を行います。
	 * <br>
	 * @param param
	 * @param templates
	 * @param returnCode
	 * @param fixedText
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, String fixedText)
	throws RequestParameterException
	{
		HashMap inMap = (HashMap)param.getData(fixedText);

		// マップに値が設定されていない場合は処理を行わない。
		if (inMap == null)
		{
			return param;
		}

		return param; //共通部品を使用するのみであるためeditErrorInfoでは何もしない
	}

	/**
	 * SCインプット共通データ設定処理です。
	 * <br>
	 * @param param
	 * @param paramMap
	 * @return パラメータマップ
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> setSCInputCommonData(IRequestParameterReadWrite param, HashMap<String, Object> paramMap)
			throws RequestParameterException
	{
		/* SCインプット共通データ */
		// **********************************************
		// 【取得元：電文ヘッダ(ヘッダ)】
		// **********************************************
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());

		// **********************************************
		// 【取得元：ユーザエリア(コントロールマップ)】
		// **********************************************
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		return paramMap;
	}

}
