/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JCRCtrlTnInfoStubImpl
*   ソースファイル名：JCRCtrlTnInfoStubImpl.java
*   作成者          ：富士通
*   日付            ：2012年03月07日
*＜機能概要＞
*   宅内機器連携（Stub向け）コマンド発行部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2012/03/07   FJ) 富士通  新規作成
*
**********************************************************************/
package eo.ejb.common;

import static eo.ejb.common.JCRModelCommon.*;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbs.cbsmsg.ECRA0010001CBSMsg;
import eo.ejb.cbs.cbsmsg.ECRA0010001ConditionList;

/**
 * 宅内機器一意データ引継処理部品（スタブ）クラスです。
 * @author 富士通
 */
public class JCRCtrlTnInfoStubImpl extends JCRCtrlTnInfo
{
	/**
	 * 宅内機器より取得する項目
	 */
	private static final String SQL_SELECT = "SELECT " +
										"   TK.TK_MDL_CD AS TK_MDL_CD, " + 
										"   TK.KK_SEIZO_NO AS KK_SEIZO_NO, " + 
										"   TK.TK_STAT AS TK_STAT, " + 
										"   TK.SHOYU_CD AS SHOYU_CD, " + 
										"   TK.KNRI_PLC_SKBT_CD AS KNRI_PLC_SKBT_CD, " + 
										"   TK.KNRI_PLC_CD AS KNRI_PLC_CD, " + 
										"   TK.KNRI_PLC_SLF_CD AS KNRI_PLC_SLF_CD, " + 
										"   TO_CHAR(TK.MOD_DTTM, 'yyyyMMddHHmmssSSS') AS KIHON_UPD_DTTM, " + 
										"   TK.STB_ID AS STBID, " + 
										"   TO_CHAR(TK.MOD_DTTM, 'yyyyMMddHHmmssSSS') AS STBT_UPD_DTTM ";

	/**
	 * FROM句 宅内機器
	 */
	private static final String STR_FROM = " FROM TK_T_TK TK ";

	/**
	 * WHERE句 宅内機器型式コード
	 */
	private static final String STR_WHERE1 = " TK_MDL_CD = ? ";

	/**
	 * WHERE句 機器製造番号
	 */
	private static final String STR_WHERE2 = " KK_SEIZO_NO = ? ";

	/**
	 * WHERE句 STB_ID
	 */
	private static final String STR_WHERE3 = " STB_ID = ? ";

	/**
	 * インスタンス
	 */
	private static JCRCtrlTnInfoStubImpl instance = null;

	/**
	 * コンストラクタです。
	 */
	private JCRCtrlTnInfoStubImpl()
	{
		super();
	}

	/**
	 * インスタンス取得用のメソッド
	 * 
	 * @return JCRCtrlTnInfoStubImpl
	 */
	public static synchronized JCRCtrlTnInfoStubImpl getInstance() 
	{
		if(instance == null) 
		{
			JCRCtrlTnInfoStubImpl.instance = new JCRCtrlTnInfoStubImpl();
		}
		
		return instance;
	}

	private AgentDispatchContext inContext;
	public void setInContext(AgentDispatchContext inContext)
	{
		this.inContext = inContext;
	}

	private Connection connection = null;
	public void setConnection(Connection con)
	{
		this.connection = con;
		
	}
	
	/**
	 * コマンド発行部品
	 * 
	 * @param serviceMap サービスマップハッシュテーブル
	 * @return サービスマップ戻り値
	 * @throws Exception
	 */
	@Override
	@SuppressWarnings("unchecked")
	public Hashtable ctrlTnInfo_CRA0001(Map serviceMap) throws Exception
	{
		if(this.connection == null)
		{
			// エラー
			throw new Exception("");
		}

		// Stub用ＳＱＬ実行（ＪＤＢＣ）を行う。
		List<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>();
		ResultSet rs = null;
		PreparedStatement prstmt = null;
		Hashtable<String, Object> ret = new Hashtable<String, Object>();

		for (Map arg : (List<Map>)(serviceMap.get(ECRA0010001CBSMsg.ECRA0010001CONDITIONLIST)))
		{
			int columnnum = 1;
			StringBuffer sql = new StringBuffer();
			StringBuffer where = new StringBuffer();

			String str_tk_mdl_cd = (String)arg.get(ECRA0010001ConditionList.KEY_TK_MDL_CD);
			String str_kk_seizo_no = (String)arg.get(ECRA0010001ConditionList.KEY_KK_SEIZO_NO);
			String str_stbid = (String)arg.get(ECRA0010001ConditionList.KEY_STBID);
			String str_tk_shokai_sbt_cd = (String)arg.get(ECRA0010001ConditionList.KEY_TK_SHOKAI_SBT_CD);


			// Stub用ＳＱＬ実行（ＪＤＢＣ）を行う。
			if(!"".equals(str_tk_shokai_sbt_cd))
			{
				if("1".equals(str_tk_shokai_sbt_cd))
				{
					if(!"".equals(str_tk_mdl_cd))
					{
						if("".equals(where.toString()))
						{
							where.append(STR_WHERE1);
						}
						else
						{
							where.append(" AND ").append(STR_WHERE1);
						}
					}
					if(!"".equals(str_kk_seizo_no))
					{
						if("".equals(where.toString()))
						{
							where.append(STR_WHERE2);
						}
						else
						{
							where.append(" AND ").append(STR_WHERE2);
						}
					}
				}
				else if("2".equals(str_tk_shokai_sbt_cd))
				{
					if(!"".equals(str_stbid))
					{
						if("".equals(where.toString()))
						{
							where.append(STR_WHERE3);
						}
						else
						{
							where.append(" AND ").append(STR_WHERE3);
						}
					}
				}
			}

			try
			{
				if("1".equals(str_tk_shokai_sbt_cd))
				{
					sql.append(SQL_SELECT).append(STR_FROM).append(" WHERE ").append(where.toString());
				}
				else if("2".equals(str_tk_shokai_sbt_cd))
				{
					sql.append(SQL_SELECT).append(STR_FROM).append(" WHERE ").append(where.toString());
				}
				
				prstmt = this.connection.prepareStatement(sql.toString());
				
				if("1".equals(str_tk_shokai_sbt_cd))
				{
					if(!"".equals(str_tk_mdl_cd))
					{
						prstmt.setString(columnnum, str_tk_mdl_cd);
						columnnum++;
					}
					if(!"".equals(str_kk_seizo_no))
					{
						prstmt.setString(columnnum, str_kk_seizo_no);
						columnnum++;
					}
				}
				else if("2".equals(str_tk_shokai_sbt_cd))
				{
					if(!"".equals(str_stbid))
					{
						prstmt.setString(columnnum, str_stbid);
						columnnum++;
					}
				}
				rs = prstmt.executeQuery();

				// 実行結果の返却
				resultList.addAll(resultSetToListOfMap(rs));
			}
			finally
			{
				// ループを抜けてからcloseする
			}
		}
		if(rs != null)
		{
			rs.close();
		}
		if(prstmt != null)
		{
			prstmt.close();
		}
		ret.put(ECRA0010001CBSMsg.ECRA0010001CBSMSG1LIST, resultList);
		return ret;
	}

}
