/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：FUSV0140_FUSV0140OPDBMapper
*	ソースファイル名：FUSV0140_FUSV0140OPDBMapper.java
*	作成者			：FJ
*	日付			：2011年06月20日
*＜機能概要＞
*	BP（エリア検索(初期表示)）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/06/20	FJ		新規作成
*   v57.00      2022/02/09  FJ) 張本   【ANK-4173-00-00】【eo顧客】解約後の契約情報表示、再申込対応
*
**********************************************************************/
package eo.web.webview.mapping;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.FUW00906SF.FUW00906SFConst;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class FUSV0140_FUSV0140OPDBMapper
{

	/** 府県リストマップ */
	private static final String MSKMUCWKMAP = "MskmUcwkMap";

	/** Mapキー：コード名称管理コード区分一覧照会明細 */
	private static final String MAP_KEY_CBSMSGLIST = "EZM0171B012CBSMsg1List";

	/** Mapキー：コード区分 */
	private static final String MAP_KEY_CD_DIV = "cd_div";

	/** Mapキー：コード区分名 */
	private static final String MAP_KEY_CD_DIV_NM = "cd_div_nm";

	/** Mapキー：初期表示コード */
	private static final String MAP_KEY_SHK_DSP_CD = "shk_dsp_cd";

	/** 府県リスト */
	private static final String STATE_LIST = "府県リスト";

	/** 府県コードリスト */
	private static final String STATE_CD_LIST = "府県コードリスト";

	/** 府県名称リスト */
	private static final String STATE_NM_LIST = "府県名称リスト";

	/** 市町村・字・丁目 */
	private static final String CITY_AZA_CHO = "市町村・字・丁目";

	/** 丁字名 */
	private static final String CHO_AZA_NM = "丁字名";

	/** 番地・号 */
	private static final String BNCHIGO = "番地・号";

	/** 選択値 */
	private static final String CHOICE = "選択値";

	/** 初期表示選択値 */
	private static final String SHK_DSP_CD_1 = "1";

	/** 番地・号 置換文字列 対象文字「−」 */
	private static final String REP_BNCHIGO_TG1 = "−";
	/** 番地・号 置換文字列 対象文字「ー」*/
	private static final String REP_BNCHIGO_TG2 = "ー";
	/** 番地・号 置換文字列 対象文字「―」 */
	private static final String REP_BNCHIGO_TG3 = "―";
	/** 番地・号 置換文字列 変換文字 */
	private static final String REP_BNCHIGO_CH = "‐";

	
	/**
	 * コンストラクタ
	 */
	public FUSV0140_FUSV0140OPDBMapper()
	{
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：エリア検索
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setMskmUcwkMap(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("func_code", func_code);

		// コード種別 → コード名称管理一意照会マップ.ＫＥＹ＿コード種別コード
		parentMap.put("key_cd_sbt_cd", bean[0].sendMessageString("コード種別", X31CWebConst.DATABEAN_GET_VALUE));
		// 基準日 → コード名称管理一意照会マップ.ＫＥＹ＿基準日
		parentMap.put("key_stdardymd", bean[0].sendMessageString("基準日", X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put("MskmUcwkMap", parentMap);

		return outputMap;
	}

	/**
	 * 下りマッピング(独自実装)
	 * @param bean bean[0]：エリア検索
	 * @param outputMap outputMap
	 * @return サービスBean配列
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getMskmUcwkMap(X31SDataBeanAccess[] bean, HashMap outputMap)
	{

		HashMap parentMap = null;
		if (outputMap.containsKey(MSKMUCWKMAP))
		{
			parentMap = (HashMap)outputMap.get(MSKMUCWKMAP);
		}

		ArrayList childList = null;

		X31SDataBeanAccessArray listMskmUcwkMap_prefecture_list_EZM0171B012CBSMsg1List = bean[0].getDataBeanArray(STATE_LIST);
		childList = null;
		if (parentMap.containsKey(MAP_KEY_CBSMSGLIST))
		{
			childList = (ArrayList)parentMap.get(MAP_KEY_CBSMSGLIST);

			X31SDataBeanAccess subbean = null;
			subbean = listMskmUcwkMap_prefecture_list_EZM0171B012CBSMsg1List.getDataBean(0);

			for (int i = 0; i < childList.size(); i++)
			{
				HashMap childMap = (HashMap)childList.get(i);

				// 府県リスト.府県コードリスト ← コード名称管理一意照会マップ.コード名称管理コード区分一覧照会明細.コード区分
				subbean.sendMessageString(STATE_CD_LIST, X31CWebConst.DATABEAN_ADD_VALUE, (String)childMap.get(MAP_KEY_CD_DIV));
				// 府県リスト.府県名称リスト ← コード名称管理一意照会マップ.コード名称管理コード区分一覧照会明細.コード区分名
				subbean.sendMessageString(STATE_NM_LIST, X31CWebConst.DATABEAN_ADD_VALUE, (String)childMap.get(MAP_KEY_CD_DIV_NM));

				if (SHK_DSP_CD_1.equals(childMap.get(MAP_KEY_SHK_DSP_CD)))
				{
					subbean.sendMessageString(CHOICE, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(i));
				}
			}
		}

		return bean;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：エリア検索
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV014001SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
		
		if(bean == null){
			return null;
		}
		
		if(bean.length != 2){
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// サービス契約回線内訳番号 → ービス契約回線内訳一意照会マップ.ＫＥＹ＿サービス契約回線内訳番号
		parentMap.put("key_svc_kei_kaisen_ucwk_no", getWebAccInfo(bean[1]).sendMessageString(CommonInfoCFConst.SVC_KEI_KAISEN_UCWK_NO_69,
				X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put("FUSV014001SC", parentMap);
						
		return outputMap;
	}

	/**
	 * 下りマッピング
	 * @param bean　[0]：エリア検索
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getFUSV014001SC(X31SDataBeanAccess[] bean, HashMap outputMap){

		HashMap parentMap = null;
		if(outputMap.containsKey("FUSV014001SC")){
			parentMap = (HashMap)outputMap.get("FUSV014001SC");
		}

		if(parentMap != null && parentMap.containsKey("EKK0251A010CBSMsg1List")){
			ArrayList childList = (ArrayList)parentMap.get("EKK0251A010CBSMsg1List");
			if (childList.size() > 0)
			{
				HashMap childMap = (HashMap)childList.get(0);

//				// 回線場所都道府県名
//				String state = (String)childMap.get("kaisen_place_state_nm");
//				// 回線場所市区町村名
//				String city_aza_cho = (String)childMap.get("kaisen_place_city_nm");
//				// 回線場所大字通称名＋回線場所字丁目名
//				String cho_aza_nm = (String)childMap.get("kaisen_place_oaztsu_nm") + (String)childMap.get("kaisen_place_azcho_nm");
//				// 回線場所番地号
//				String bnchigo = (String)childMap.get("kaisen_place_bnchigo");
				// 回線場所郵便番号
				String zip = (String)childMap.get("kaisen_place_pcd");
	
//				// 「−(マイナス)」、「ー（長音）」、「―（ダッシュ）」が含まれる場合、「‐（ハイフン）」に置換する。
//				bnchigo = bnchigo.replace(REP_BNCHIGO_TG1, REP_BNCHIGO_CH);
//				bnchigo = bnchigo.replace(REP_BNCHIGO_TG2, REP_BNCHIGO_CH);
//				bnchigo = bnchigo.replace(REP_BNCHIGO_TG3, REP_BNCHIGO_CH);
//
//				// 都道府県名
//				X31SDataBeanAccessArray listMskmUcwkMap_prefecture_list_EZM0171B012CBSMsg1List = bean[0].getDataBeanArray(STATE_LIST);
//				X31SDataBeanAccess subbean = listMskmUcwkMap_prefecture_list_EZM0171B012CBSMsg1List.getDataBean(0);
//
//				for (int i = 0; i < (Integer)subbean.sendMessage(STATE_NM_LIST, X31CWebConst.DATABEAN_GET_COUNT); i++)
//				{
//					if (state.equals(subbean.sendMessageString(STATE_NM_LIST, X31CWebConst.DATABEAN_GET_VALUE, i)))
//					{
//						subbean.sendMessageString(CHOICE, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(i));
//					}
//				}
//
//				// 市区町村名
//				bean[0].sendMessageString(CITY_AZA_CHO, X31CWebConst.DATABEAN_SET_VALUE, city_aza_cho);
//				// 丁字名
//				bean[0].sendMessageString(CHO_AZA_NM, X31CWebConst.DATABEAN_SET_VALUE, cho_aza_nm);
//				// 番地・号
//				bean[0].sendMessageString(BNCHIGO, X31CWebConst.DATABEAN_SET_VALUE, bnchigo);

				// 郵便番号
				if (zip != null && zip.length() >= 7)
				{
					bean[0].sendMessageString(FUW00906SFConst.PCD1, X31CWebConst.DATABEAN_SET_VALUE, zip.substring(0, 3));
					bean[0].sendMessageString(FUW00906SFConst.PCD2, X31CWebConst.DATABEAN_SET_VALUE, zip.substring(3, 7));
				}
			}

		}

		return bean;
	}

	/**
	 * ＷＥＢアクセス情報
	 * 
	 * @param webNewInfoBean
	 * @return elseInfoBean
	 */
	private X31SDataBeanAccess getWebAccInfo(X31SDataBeanAccess commonInfoBean)
	{

		// ＷＥＢ新規情報取得
		X31SDataBeanAccess webNewBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO).getDataBean(0);

		// ＷＥＢアクセス情報
		X31SDataBeanAccessArray array = webNewBean.getDataBeanArray(CommonInfoCFConst.WEB_ACCESS_INFO);
		if (array.getCount() == 0)
		{
			array.addDataBean();
		}
		X31SDataBeanAccess bean = array.getDataBean(0);

		return bean;
	}
}
