/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：FUSV0177_FUSV0177OPDBMapper
*	ソースファイル名：FUSV0177_FUSV0177OPDBMapper.java
*	作成者			：FJ
*	日付			：2011年10月25日
*＜機能概要＞
*	BP（STB情報一覧取得(KCN)）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/10/25	FJ			新規作成
 *	V4.00.00	2013/01/09	FJ)齋藤	   【ST3-2012-0000386】テレビ(KCN)チューナー機器選択リスト表示制御対応
*
**********************************************************************/
package eo.web.webview.mapping;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.common.constant.JFUStrConst;
import eo.web.webview.FUW00108SF.FUW00108SFConst;
import eo.web.webview.common.JFUWebCommon;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class FUSV0177_FUSV0177OPDBMapper
{

	/** リスト名 */
	private static final String EZM0171B012CBSMSG1LIST = "EZM0171B012CBSMsg1List";
	/** コード区分 */
	private static final String KEY_CD_DIV = "cd_div";
	/** コード区分名 */
	private static final String KEY_CD_DIV_NM = "cd_div_nm";
	/** 機能コード */
	private static final String KEY_FUNC_CODE = "func_code";
	/** コード種別コード */
	private static final String KEY_CD_SBT_CD = "key_cd_sbt_cd";
	/** 基準日 */
	private static final String KEY_STDARDYMD = "key_stdardymd";
	/** 出力マップキー */
	private static final String KEY_OUTPUT_MAP = "FUSV017701SC";

	/* 2013/01/09 ST3-2012-0000386 Y.Saitou ADD-START */
	/** プロパティファイル取得文字列（グループID指定）STB(KCN) */
	private static final String settingPattern = "DISPSETTING/SETTING[@screenId='FUW00108']/DISPTEXT[@groupid='stbPattern_kcn']";

	/** プロパティファイル取得文字列（グループID指定）STB(KCN)の並べ替え用*/
	private static final String settingLine = "DISPSETTING/SETTING[@screenId='FUW00108']/DISPTEXT[@groupid='settingLine_kcn']";

	/* 2013/01/09 ST3-2012-0000386 Y.Saitou ADD-END */

	/**
	 * コンストラクタ
	 */
	public FUSV0177_FUSV0177OPDBMapper()
	{
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：ｅｏ光テレビ入力
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV017701SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 1)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(KEY_FUNC_CODE, func_code);

		// コード種別 → STB情報一覧取得（ＫＣＮ）マップ.ＫＥＹ＿コード種別コード
		parentMap.put(KEY_CD_SBT_CD, bean[0].sendMessageString(FUW00108SFConst.CODE_SBT, X31CWebConst.DATABEAN_GET_VALUE));
		// 基準日 → STB情報一覧取得（ＫＣＮ）マップ.ＫＥＹ＿基準年月日
		parentMap.put(KEY_STDARDYMD, bean[0].sendMessageString(FUW00108SFConst.STDARDYMD, X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put(KEY_OUTPUT_MAP, parentMap);

		return outputMap;
	}

	/**
	 * 下りマッピング
	 * @param bean　[0]：ｅｏ光テレビ入力
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getFUSV017701SC(X31SDataBeanAccess[] bean, HashMap outputMap) throws Exception
	{

		//----------------------------------------------------------------
		// 手動マッピング
		//----------------------------------------------------------------

		// コード名称管理一覧照会SC 実行結果の設定
		HashMap parentMap = null;
		if (outputMap.containsKey(KEY_OUTPUT_MAP))
		{
			parentMap = (HashMap)outputMap.get(KEY_OUTPUT_MAP);
		}

		ArrayList childList = (ArrayList)parentMap.get(EZM0171B012CBSMSG1LIST);

		if (null == childList)
		{
			return bean;
		}

		if (0 == childList.size())
		{
			return bean;
		}

		/* 2013/01/09 ST3-2012-0000386 Y.Saitou MOD-START */
		// プロパティ情報の取得処理・設定処理
		// STB情報取得
		Map<String, String> servicenameMap = JFUWebCommon.getDispItemsAsMap(settingPattern, JFUStrConst.QUERY_ATTR_NAME);

		ArrayList<String> setList = new ArrayList<String>();

		for (int k = 0; k < servicenameMap.size(); k++)
		{
			String key = "pattern_" + String.valueOf(k + 1);
			setList.add((String)servicenameMap.get(key));
		}

		// 利用場所形態の並べ替え用情報取得
		Map<String, String> rowMap = JFUWebCommon.getDispItemsAsMap(settingLine, JFUStrConst.QUERY_ATTR_NAME);

		HashMap<String, String> lineMap = new HashMap<String, String>();
		ArrayList<String> lineList = new ArrayList<String>();

		for (int k = 0; k < rowMap.size(); k++)
		{
			String key = "pattern_" + String.valueOf(k + 1);

			lineList.add((String)rowMap.get(key));
			// 値をセットする。(取得値 , k ←配列順になるため)
			lineMap.put((String)rowMap.get(key), String.valueOf(k));
		}

		ArrayList sortList = new ArrayList();

		// プロパティファイルの数だけ空配列を作成
		for (int n = 0; n < rowMap.size(); n++)
		{
			HashMap karaMap = null;
			sortList.add(karaMap);
		}

		for (int j = 0; j < childList.size(); j++)
		{
			HashMap cchildMap = (HashMap)childList.get(j);

			// プロパティファイルの利用場所形態とコード名称が一致した場合
			if (setList.contains(((String)cchildMap.get(KEY_CD_DIV))))
			{
				for (int m = 0; m < lineList.size(); m++)
				{
					// プロパティファイルの利用場所形態の並べ替え用とコード値が一致した場合
					if (lineList.get(m).equals(((String)cchildMap.get(KEY_CD_DIV))))
					{
						// プロパティファイルの指定した場所にデータをセットする
						sortList.set(m, cchildMap);
					}
				}
			}
		}

		// テレビチューナー1機器選択リスト
		X31SDataBeanAccessArray listTvTunerKiki1 = bean[0].getDataBeanArray(FUW00108SFConst.TV_TUNER_KIKI_1_LIST);
		X31SDataBeanAccess tvTunerKiki1 = listTvTunerKiki1.getDataBean(0);
		// テレビチューナー2機器選択リスト
		X31SDataBeanAccessArray listTvTunerKiki2 = bean[0].getDataBeanArray(FUW00108SFConst.TV_TUNER_KIKI_2_LIST);
		X31SDataBeanAccess tvTunerKiki2 = listTvTunerKiki2.getDataBean(0);
		// テレビチューナー3機器選択リスト
		X31SDataBeanAccessArray listTvTunerKiki3 = bean[0].getDataBeanArray(FUW00108SFConst.TV_TUNER_KIKI_3_LIST);
		X31SDataBeanAccess tvTunerKiki3 = listTvTunerKiki3.getDataBean(0);
		// テレビチューナー4機器選択リスト
		X31SDataBeanAccessArray listTvTunerKiki4 = bean[0].getDataBeanArray(FUW00108SFConst.TV_TUNER_KIKI_4_LIST);
		X31SDataBeanAccess tvTunerKiki4 = listTvTunerKiki4.getDataBean(0);
		// テレビチューナー5機器選択リスト
		X31SDataBeanAccessArray listTvTunerKiki5 = bean[0].getDataBeanArray(FUW00108SFConst.TV_TUNER_KIKI_5_LIST);
		X31SDataBeanAccess tvTunerKiki5 = listTvTunerKiki5.getDataBean(0);

		if (null != listTvTunerKiki1 && null != parentMap && parentMap.containsKey(EZM0171B012CBSMSG1LIST))
		{

			for (int i = 0; i < sortList.size(); i++)
			{

				HashMap childMap = (HashMap)sortList.get(i);

				if (childMap != null)
				{
					setKikiList(tvTunerKiki1, childMap);
					setKikiList(tvTunerKiki2, childMap);
					setKikiList(tvTunerKiki3, childMap);
					setKikiList(tvTunerKiki4, childMap);
					setKikiList(tvTunerKiki5, childMap);
				}
			}
		}
		/* 2013/01/09 ST3-2012-0000386 Y.Saitou MOD-END */
		//----------------------------------------------------------------
		return bean;

	}

	//----------------------------------------------------------------
	// 手動マッピング用
	//----------------------------------------------------------------

	/**
	 * 機器リストの設定
	 * <br>
	 * @param tvTunerKiki	チューナー機器Bean
	 * @param childMap		コード名称管理一覧照会SC 実行結果
	 */
	@SuppressWarnings("unchecked")
	private void setKikiList(X31SDataBeanAccess tvTunerKiki, HashMap childMap)
	{
		// テレビチューナー機器選択.チューナーコードリスト ← コード名称管理一意照会マップ.コード名称管理コード区分一覧照会明細.コード区分
		if (null != childMap)
		{
			tvTunerKiki.sendMessageString(FUW00108SFConst.TUNER_CODE_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, (String)childMap.get(KEY_CD_DIV));
		}
		else
		{
			tvTunerKiki.sendMessageString(FUW00108SFConst.TUNER_CODE_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, "");
		}
		// テレビチューナー機器選択.チューナー名称リスト ← コード名称管理一意照会マップ.コード名称管理コード区分一覧照会明細.コード区分名
		if (null != childMap)
		{
			tvTunerKiki.sendMessageString(FUW00108SFConst.TUNER_NAME_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, (String)childMap.get(KEY_CD_DIV_NM));
		}
		else
		{
			tvTunerKiki.sendMessageString(FUW00108SFConst.TUNER_NAME_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, "");
		}
	}

	//----------------------------------------------------------------

}