/*******************************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JEDKA0010008TPMA
*	ソースファイル名：JEDKA0010008TPMA.java
*	作成者			：富士通
*	日付			：2012年03月07日
*＜機能概要＞
*	宅内機器一覧照会(5)用独自処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*	ｖ32.00.00  2017/05/26  FJ)河邊     【OM-2017-0000488】オープンカーソルエラー
*
********************************************************************************/
package eo.ejb.cbs.mainproc;

import static eo.ejb.common.JDKModelCommon.getMsgFields;
import static eo.ejb.common.JDKModelCommon.msgToMap;
import static eo.ejb.common.JDKModelCommon.transportAllData;
import static eo.ejb.common.JDKModelCommon.transportErrorRecord;
import static eo.ejb.common.JDKModelCommon.transportStatus;

import java.sql.Connection;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.model.base.CAANConnectionMgr;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.ejb.common.JSYejbConnection;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;
import com.fujitsu.futurity.model.ejb.common.fw.TemplateMainHandler;

import eo.ejb.cbs.cbsmsg.EDKA0010008CBSMsg;
import eo.ejb.cbs.cbsmsg.EDKA0010008CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EDKA0010008ConditionList;
import eo.ejb.common.JDKCtrlTnInfo;

/**
 * 宅内機器一覧照会(5)
 * @author FJ
 */
public class JEDKA0010008TPMA implements TemplateMainHandler
{
	/**
	 * コンストラクタです。
	 */
	public JEDKA0010008TPMA() 
	{
		
	}
	
	/**
	 * コマンド実行部品用
	 * @param inCBSMsg
	 * @param inContext
	 */
	@SuppressWarnings("unchecked")
	public void ctrlTnInfo(CAANMsg inCBSMsg, AgentDispatchContext inContext) 
	{
		// IN項目に値を設定
		Map<String, Object> serviceMap = msgToMap(inCBSMsg, EDKA0010008CBSMsg.class);

		// 宅内機器コマンド発行部品のスタブ用
		JDKCtrlTnInfo instance = JDKCtrlTnInfo.getInstance();
		instance.setInContext(inContext);
		
		// テーブルのコネクションを取得して、部品に受け渡しを行う。
		Connection con = JSYejbConnection.getConnection("TK_T_TK");
		instance.setConnection(con);
		
		try 
		{
			CAANMsg[] l_edka001008csvmsglist = new CAANMsg[0];

			// 宅内機器連携部品を呼び出す。
			Map ret = instance.ctrlTnInfo_DKA0008(serviceMap);
			if ( transportStatus(inCBSMsg, ret) > 0 )
			{
				transportErrorRecord(inCBSMsg, ret, EDKA0010008CBSMsg.EDKA0010008CONDITIONLIST, EDKA0010008CBSMsg.EDKA0010008CBSMSG1LIST);
				return;
			}
			
			// 問い合わせ時の条件リスト
			CAANMsg[] templateArray = null;
			templateArray = inCBSMsg.getCAANMsgList(EDKA0010008CBSMsg.EDKA0010008CONDITIONLIST);

			// 取得した戻り値を元に、inCBSMsgのアウト項目に値を設定して返す
			ArrayList<Hashtable<String, Object>> list = (ArrayList<Hashtable<String, Object>>)ret.get(EDKA0010008CBSMsg.EDKA0010008CBSMSG1LIST);
			if(list != null && !list.isEmpty())
			{
				
				// うまくいけば戻りの電文を設定して終了する。
				l_edka001008csvmsglist =  new CAANMsg[templateArray.length];
				List<String> fields = getMsgFields(EDKA0010008CBSMsg1List.class);
				if (fields != null && fields.size() == 0) 
				{
					return;
				}

				for (int i = 0; i < templateArray.length; i++) 
				{
					CAANMsg childTemplate = templateArray[i];
					String req_tk_model_cd = childTemplate.getString(EDKA0010008ConditionList.KEY_TK_MDL_CD);
					String req_tk_seizo_no = childTemplate.getString(EDKA0010008ConditionList.KEY_KK_SEIZO_NO);
					
					for(int j = 0 ; j < list.size() ; j++)
					{
						Map<String,Object> resMap = list.get(j);
						String res_tk_model_cd = (String) resMap.get("tk_mdl_cd");
						String res_tk_seizo_no = (String) resMap.get("kk_seizo_no");
						
						// 宅内機器型式コードと製造番号が同じであるか
						if(req_tk_model_cd.equals(res_tk_model_cd) && req_tk_seizo_no.equals(res_tk_seizo_no))
						{
							// リクエスト時の順番でレスポンスをマッピングする
							l_edka001008csvmsglist[i] = new CAANMsg(EDKA0010008CBSMsg1List.class.getName());
							transportAllData(fields, l_edka001008csvmsglist[i], list.get(j));
							break;
						}
						else
						{
							continue;
						}
					}
					
					// リクエストに対応するレスポンスのデータがなかった場合
					if(l_edka001008csvmsglist[i] == null)
					{
						// マッパーでNullPointerExceptionにならないようにしておく
						l_edka001008csvmsglist[i] = new CAANMsg(EDKA0010008CBSMsg1List.class.getName());
					}
				}
			}
			
			inCBSMsg.set(EDKA0010008CBSMsg.EDKA0010008CBSMSG1LIST, l_edka001008csvmsglist);
		}
		catch(Exception e) 
		{
			throw new CAANRuntimeException(e);
		}
// OM-2017-0000488 2017/05/26 ADD START
		finally
		{
			// 資源の解放
			if (con != null)
			{
				CAANConnectionMgr.getInstance().close(con);
			}
		}
// OM-2017-0000488 2017/05/26 ADD END
	}
}
