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