/*******************************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JEDKA0010010TPMA
*	ソースファイル名：JEDKA0010010TPMA.java
*	作成者			：富士通
*	日付			：2012年03月07日
*＜機能概要＞
*	宅内機器一覧照会(2)用独自処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ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.EDKA0010010CBSMsg;
import eo.ejb.cbs.cbsmsg.EDKA0010010CBSMsg1List;
import eo.ejb.common.JDKCtrlTnInfo;

/**
 * 宅内機器一覧照会(2)
 * @author FJ
 *
 */
public class JEDKA0010010TPMA implements TemplateMainHandler
{
	/**
	 * コンストラクタです。
	 */
	public JEDKA0010010TPMA() 
	{
		
	}
	
	/**
	 * コマンド実行部品用
	 * @param inCBSMsg
	 * @param inContext
	 */
	@SuppressWarnings("unchecked")
	public void ctrlTnInfo(CAANMsg inCBSMsg, AgentDispatchContext inContext) 
	{
		// IN項目に値を設定
		Map<String, Object> serviceMap = msgToMap(inCBSMsg, EDKA0010010CBSMsg.class);

		// 宅内機器コマンド発行部品のスタブ用
		JDKCtrlTnInfo instance = JDKCtrlTnInfo.getInstance();
		instance.setInContext(inContext);
		
		// テーブルのコネクションを取得して、部品に受け渡しを行う。
		Connection con = null;
		String trnDiv = inCBSMsg.getString(EDKA0010010CBSMsg.KEY_TRN_DIV);

		// STBID指定の場合
		if ("1".equals(trnDiv))
		{
			con = JSYejbConnection.getConnection("TK_T_TK");
		}
		else if ("2".equals(trnDiv))
		{
			// 製造番号指定の場合
			con = JSYejbConnection.getConnection("TK_T_TK_STB");
		}
		instance.setConnection(con);
		
		try 
		{
			CAANMsg[] l_edka001010csvmsglist = new CAANMsg[0];

			// 宅内機器連携部品を呼び出す。
			Map ret = instance.ctrlTnInfo_DKA0010(serviceMap);
			if ( transportStatus(inCBSMsg, ret) > 0 )
			{
				transportErrorRecord(inCBSMsg, ret, EDKA0010010CBSMsg.EDKA0010010CBSMSG1LIST, EDKA0010010CBSMsg.EDKA0010010CBSMSG1LIST);
				return;
			}

			// 取得した戻り値を元に、inCBSMsgのアウト項目に値を設定して返す
			ArrayList<Hashtable<String, Object>> list = (ArrayList<Hashtable<String, Object>>)ret.get(EDKA0010010CBSMsg.EDKA0010010CBSMSG1LIST);
			if(list != null && !list.isEmpty())
			{
				
				// うまくいけば戻りの電文を設定して終了する。
				l_edka001010csvmsglist =  new CAANMsg[list.size()];
				List<String> fields = getMsgFields(EDKA0010010CBSMsg1List.class);
				if (fields != null && fields.size() == 0) 
				{
					return;
				}
				
				for(int i = 0 ; i < list.size() ; i++)
				{
					l_edka001010csvmsglist[i] = new CAANMsg(EDKA0010010CBSMsg1List.class.getName());
					transportAllData(fields, l_edka001010csvmsglist[i], list.get(i));
				}
			}

			inCBSMsg.set(EDKA0010010CBSMsg.EDKA0010010CBSMSG1LIST, l_edka001010csvmsglist);
			inCBSMsg.set(EDKA0010010CBSMsg.TOTAL_CNT, ret.get(EDKA0010010CBSMsg.TOTAL_CNT));
		}
		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
	}
}
