/*********************************************************************
*   All Right reserved,Copyright (c) Fujitsu, 2011
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム構築
*   モジュール名    ：JTNejbTN0011SecProc
*   ソースファイル名：JTNejbTN0011SecProc.java
*   作成者          ：富士通
*   日付            ：2011年06月20日
*＜機能概要＞
*   宅内機器副次処理部品クラス
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*   v1.00.00    2011/06/20  富士通      新規作成
*
**********************************************************************/

package eo.ejb.common.db;

import java.util.ArrayList;

import com.fujitsu.futurity.model.base.CAANCreateException;
import com.fujitsu.futurity.model.base.CAANException;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;

import eo.ejb.cbm.entity.TN0081ETMsg;
import eo.ejb.cbm.entity.TN0081LE;

/**
 * <p>
 * 宅内機器副次処理部品です。
 * </p>
 * @author 富士通
 */
public class JTNejbTN0081SecProc extends JTNejbTN0081DBABase
{

	/**
	 * コンストラクタです。
	 */
	public JTNejbTN0081SecProc()
	{
		super();
	}

	/**
	 * <p>
	 * STB情報更新を行います。
	 * </p>
	 * @param cbsMsg CBSメッセージ
	 * @param cbsMsg サービスインターフェイスから項目転記したETメッセージ
	 */
	public void eTN0081D010(CAANMsg cbsMsg, CAANMsg etMsg)
	{
		CAANMsg inMsg = new CAANMsg(TN0081ETMsg.class.getName());
		TN0081LE le = new TN0081LE();
		
		inMsg.set(TN0081ETMsg.STB_ID, etMsg.getString(TN0081ETMsg.STB_ID));
		
		CAANMsg[] msgList = null;
		
		try{
			// 一覧照会
			msgList = le.findByCondition(inMsg);
		}catch (CAANException e){
			throw new CAANRuntimeException();
		}
		
		ArrayList<CAANMsg> msgList2 = getKeyList(msgList);
		for(int i = 0; i < msgList2.size(); i++){
			// キーリストを元にカレントレコードを照会
			CAANMsg msg = new CAANMsg(TN0081ETMsg.class.getName());
			msg.set(TN0081ETMsg.TAKNKIKI_MODEL_CD, msgList2.get(i).getString(TN0081ETMsg.TAKNKIKI_MODEL_CD));
			msg.set(TN0081ETMsg.KIKI_SEIZO_NO, msgList2.get(i).getString(TN0081ETMsg.KIKI_SEIZO_NO));
			
			// カレントデータを引き継いでDBに登録
			CAANMsg msgSucceeded = succeedMsgData(etMsg, super.findByCurrent(msg));
			insertDB(msgSucceeded);
		}
	}

	/**
	 * <p>
	 * CAS情報更新を行います。
	 * </p>
	 * @param cbsMsg CBSメッセージ
	 * @param cbsMsg サービスインターフェイスから項目転記したETメッセージ
	 */
	public void eTN0081D020(CAANMsg cbsMsg, CAANMsg etMsg)
	{
		CAANMsg inMsg = new CAANMsg(TN0081ETMsg.class.getName());
		TN0081LE le = new TN0081LE();
		
		inMsg.set(TN0081ETMsg.KIKI_SEIZO_NO, etMsg.getString(TN0081ETMsg.KIKI_SEIZO_NO));
		inMsg.set(TN0081ETMsg.CAS_CARD_SBT_CD, etMsg.getString(TN0081ETMsg.CAS_CARD_SBT_CD));
		
		CAANMsg[] msgList = null;
		
		try{
			// 一覧照会
			msgList = le.findByCondition(inMsg);
		}catch (CAANException e){
			throw new CAANRuntimeException();
		}
		
		ArrayList<CAANMsg> msgList2 = getKeyList(msgList);
		for(int i = 0; i < msgList2.size(); i++){
			// キーリストを元にカレントレコードを照会
			CAANMsg msg = new CAANMsg(TN0081ETMsg.class.getName());
			msg.set(TN0081ETMsg.TAKNKIKI_MODEL_CD, msgList2.get(i).getString(TN0081ETMsg.TAKNKIKI_MODEL_CD));
			msg.set(TN0081ETMsg.KIKI_SEIZO_NO, msgList2.get(i).getString(TN0081ETMsg.KIKI_SEIZO_NO));
			
			// カレントデータを引き継いでDBに登録
			CAANMsg msgSucceeded = succeedMsgData(etMsg, super.findByCurrent(msg));
			insertDB(msgSucceeded);
		}
	}

	/**
	 * <p>
	 * 宅内機器設置場所変更を行います。
	 * </p>
	 * @param cbsMsg CBSメッセージ
	 * @param cbsMsg サービスインターフェイスから項目転記したETメッセージ
	 */
	public void eTN0081D030(CAANMsg cbsMsg, CAANMsg etMsg)
	{
		// カレントレコードを照会
		CAANMsg msg = new CAANMsg(TN0081ETMsg.class.getName());
		msg.set(TN0081ETMsg.TAKNKIKI_MODEL_CD, etMsg.getString(TN0081ETMsg.TAKNKIKI_MODEL_CD));
		msg.set(TN0081ETMsg.KIKI_SEIZO_NO, etMsg.getString(TN0081ETMsg.KIKI_SEIZO_NO));
		
		// カレントデータを引き継いでDBに登録
		CAANMsg msgSucceeded = succeedMsgData(etMsg, super.findByCurrent(msg));
		insertDB(msgSucceeded);
	}

	/**
	 * <p>
	 * STB情報変更を行います。
	 * </p>
	 * @param cbsMsg CBSメッセージ
	 * @param cbsMsg サービスインターフェイスから項目転記したETメッセージ
	 */
	public void eTN0081D040(CAANMsg cbsMsg, CAANMsg etMsg)
	{
		// キーリストを元にカレントレコードを照会
		CAANMsg msg = new CAANMsg(TN0081ETMsg.class.getName());
		msg.set(TN0081ETMsg.TAKNKIKI_MODEL_CD, etMsg.getString(TN0081ETMsg.TAKNKIKI_MODEL_CD));
		msg.set(TN0081ETMsg.KIKI_SEIZO_NO, etMsg.getString(TN0081ETMsg.KIKI_SEIZO_NO));
		
		// カレントデータを引き継いでDBに登録
		CAANMsg msgSucceeded = succeedMsgData(etMsg, super.findByCurrent(msg));
		insertDB(msgSucceeded);

	}

	/**
	 * <p>
	 * 上位宅内機器変更を行います。
	 * </p>
	 * @param cbsMsg CBSメッセージ
	 * @param cbsMsg サービスインターフェイスから項目転記したETメッセージ
	 */
	public void eTN0081D050(CAANMsg cbsMsg, CAANMsg etMsg)
	{
		CAANMsg inMsg = new CAANMsg(TN0081ETMsg.class.getName());
		TN0081LE le = new TN0081LE();
		
		inMsg.set(TN0081ETMsg.TAKNKIKI_MODEL_CD, etMsg.getString(TN0081ETMsg.TAKNKIKI_MODEL_CD));
		inMsg.set(TN0081ETMsg.JOI_KIKI_SEIZO_NO, etMsg.getString(TN0081ETMsg.JOI_KIKI_SEIZO_NO));
		inMsg.set(TN0081ETMsg.STB_ID, etMsg.getString(TN0081ETMsg.STB_ID));
		
		CAANMsg[] msgList = null;
		
		try{
			// 一覧照会
			msgList = le.findByCondition(inMsg);
		}catch (CAANException e){
			throw new CAANRuntimeException();
		}
		
		ArrayList<CAANMsg> msgList2 = getKeyList(msgList);
		for(int i = 0; i < msgList2.size(); i++){
			// キーリストを元にカレントレコードを照会
			CAANMsg msg = new CAANMsg(TN0081ETMsg.class.getName());
			msg.set(TN0081ETMsg.TAKNKIKI_MODEL_CD, msgList2.get(i).getString(TN0081ETMsg.TAKNKIKI_MODEL_CD));
			msg.set(TN0081ETMsg.KIKI_SEIZO_NO, msgList2.get(i).getString(TN0081ETMsg.KIKI_SEIZO_NO));
			
			// カレントデータを引き継いでDBに登録
			CAANMsg msgSucceeded = succeedMsgData(etMsg, super.findByCurrent(msg));
			insertDB(msgSucceeded);
		}
	}

	/**
	 * <p>
	 * 登録を行います。
	 * </p>
	 * @param inMsg メッセージ
	 */
	private void insertDB(CAANMsg inMsg)
	{
		try
		{
			super.create(inMsg);
		}
		catch (CAANCreateException e)
		{
			throw new RuntimeException(e);
		}
	}

	/**
	 * <p>
	 * カレントデータ引継ぎを行います。
	 * </p>
	 * @param etMsg DB設定内容(サービスインターフェイスの入力値)が格納されたメッセージキャリア
	 * @param etMsgCur カレントデータが格納されたメッセージキャリア
	 */
	private CAANMsg succeedMsgData(CAANMsg etMsg, CAANMsg etMsgCur)
	{
		CAANMsg ret = new CAANMsg(TN0081ETMsg.class.getName());
		
		// スキーマ定義情報の取得
		Object[][] contents = getSchemaContents();

		for (int i = 0; i < contents.length; i++)
		{
			String key = (String)contents[i][0];

			if (etMsg.containsKeyOfMsgData(key))
			{
				// DB項目がサービスインターフェイスの入力項目にあれば、
				// その項目を引継対象からはずす(入力値で登録/更新するため)
				ret.set(key, etMsg.getString(key));
			}else{
				// DB項目がサービスインターフェイスの入力項目になければ、
				// 引継ぎ対象とする
				ret.set(key, etMsgCur.getObject(key));
			}
			
//			// カレントデータを引継ぎ
//			etMsg.set(key, etMsgCur.getObject(key));
			
		}
		
		return ret;
	}
	
	/**
	 * <p>
	 * 検索対象レコードのキーリストを取得。
	 * </p>
	 * @param msgList キーリストを取得する対象のメッセージキャリア
	 */
	private ArrayList<CAANMsg> getKeyList(CAANMsg[] msgList)
	{
		ArrayList<CAANMsg> msgList2 = new ArrayList<CAANMsg>();
		
		// 照会結果を元にカレントレコードを照会するためのキーリストを作成
		for(int i = 0; i < msgList.length; i++){
			boolean flg = true;
			String key1 = msgList[i].getString(TN0081ETMsg.TAKNKIKI_MODEL_CD) + msgList[i].getString(TN0081ETMsg.KIKI_SEIZO_NO);
			for(int j = 0; j < msgList2.size(); j++){
				if (0 == key1.compareTo(msgList2.get(j).getString(TN0081ETMsg.TAKNKIKI_MODEL_CD) + msgList2.get(j).getString(TN0081ETMsg.KIKI_SEIZO_NO))){
					flg = false;
					break;
				}
			}
			if(flg){
				msgList2.add(msgList[i]);
			}
		}
		
		return msgList2;
	}
}
