/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：KKSV0523_KKSV0523OPDBMapper
*	ソースファイル名：KKSV0523_KKSV0523OPDBMapper.java
*	作成者			：Fujitsu
*	日付			：2012年03月07日
*＜機能概要＞
*	BP（eo光テレビケーブルテレビガイド誌登録_初期表示）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/03/07	Fujitsu		新規作成
*	v4.00.00	2012/11/08	FJ）庭山	【IT2-2012-0001650】対応
*	v4.01.00	2012/11/27	FJ）庭山	【IT2-2012-0001794】対応
*	v4.02.00	2013/02/15	FJ）古田	【IT1-2013-0000284】対応
*	v4.03.00	2013/02/28	FJ）稲岡	【ST1-2013-0000253】対応
*	v18.00.00   2015/08/11  FJ) 原田	【ANK-2631-00-00】ワンストップ案件（ＳＴＥＰ１）※koptWebBからkoptWebAへコピー
**********************************************************************/
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.common.util.JPCUtilCommon;
import eo.web.webview.KKA17101SF.CKW00201SFConst;
import eo.web.webview.KKA17101SF.KKW00828SFConst;

/**
 * DataBean-BPマッピングをする。
 * 
 * <BR>
 * @author 富士通
 */
public class KKSV0523_KKSV0523OPDBMapper
{
/* ++++++++++ v4.03.00 追加開始 ++++++++++ */
	/** チェックエラー */
	private static final String STATUS_ERROR = "1";
	/** HasnKey */
	private static final String HASH_KEY_TARGET_ERR_FLG = "target_err_flg";
	/** HasnKey */
	private static final String HASH_KEY_EXIST_ERR_FLG = "exist_err_flg";
/* ++++++++++ v4.03.00 追加終了 ++++++++++ */
	
	/**
	 * コンストラクタ
	 */
	public KKSV0523_KKSV0523OPDBMapper()
	{
	}
	
/* ++++++++++ v4.03.00 変更開始 ++++++++++ */
	/**
	 * 上りマッピングをする
	 * @param bean　[0]：ｅｏ光テレビケーブルテレビガイド誌登録
	 * @param outputMap
	 * @param func_code　機能コード
	 * 
	 * @return outputMap
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV052301CC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{
		
		if(isNull(bean))
		{
			return null;
		}
		
		if(bean.length != 1)
		{
			return null;
		}
		
		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		
		// 共通情報のマッピング
		parentMap.put("func_code", func_code);
		
		// 顧客契約引継リスト.SYSID
		parentMap.put("key_sysid", getValueFromHktgiList(bean, KKW00828SFConst.SYSID_04));
		// 顧客契約引継リスト.サービス契約番号
		parentMap.put("key_svc_kei_no", getValueFromHktgiList(bean, KKW00828SFConst.SVC_KEI_NO_04));
		// 運用日付
		parentMap.put("key_ope_date", getValue(bean[0], KKW00828SFConst.OPE_DATE));
		
		outputMap.put("KKSV052301CC", parentMap);
		
		return outputMap;
	}
	
	/**
	 * 下りマッピング
	 * @param bean　[0]：ｅｏ光テレビケーブルテレビガイド誌登録
	 * @param outputMap
	 * 
	 * @return bean
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getKKSV052301CC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{
		HashMap parentMap = (HashMap)outputMap.get("KKSV052301CC");
		
		// 住所情報
		setCodeList(bean[0], parentMap, KKW00828SFConst.AD_INFO, "ad_info");
		
		// 対象チェックエラー
		if (null != parentMap.get(HASH_KEY_TARGET_ERR_FLG))
		{
			if (STATUS_ERROR.equals((String)parentMap.get(HASH_KEY_TARGET_ERR_FLG)))
			{
				return bean;
			}
		}
		
		// 存在チェックエラー
		if (null != parentMap.get(HASH_KEY_EXIST_ERR_FLG))
		{
			if (STATUS_ERROR.equals((String)parentMap.get(HASH_KEY_EXIST_ERR_FLG)))
			{
				return bean;
			}
		}
		
		// 利用開始日登録可能期間
		setValue(bean[0], KKW00828SFConst.USE_STAYMD_PSB_DAY, (String)parentMap.get("work_param_sette_value"));
		
		X31SDataBeanAccessArray listBean = null;
		X31SDataBeanAccess subbean = null;
		
		// 郵便番号
		listBean = bean[0].getDataBeanArray(KKW00828SFConst.PCD);
		listBean.clearArray();
		subbean = listBean.addDataBean();
		String pcd = (String)parentMap.get("kaisen_place_pcd");
		
		if(!isNull(pcd) && pcd.length() == 7)
		{
			// 回線場所郵便番号
			setValue(subbean, KKW00828SFConst.PCD_1_02, JPCUtilCommon.toTopThreeDigitFromPcd(pcd));			// 郵便番号
			setValue(subbean, KKW00828SFConst.PCD_2_02, JPCUtilCommon.toUnderFourDigitFromPcd(pcd));
			setValue(subbean, KKW00828SFConst.KEISHA_PCD_1_02, JPCUtilCommon.toTopThreeDigitFromPcd(pcd));	// 契約者＿郵便番号
			setValue(subbean, KKW00828SFConst.KEISHA_PCD_2_02, JPCUtilCommon.toUnderFourDigitFromPcd(pcd));
			
		}
		
		// 住所コード
		listBean = bean[0].getDataBeanArray(KKW00828SFConst.AD_CD);
		listBean.clearArray();
		subbean = listBean.addDataBean();
		String adCd = (String)parentMap.get("kaisen_place_ad_cd");
		if(!isNull(adCd) && adCd.length() == 11)
		{
			// 回線場所住所コード
			setValue(subbean, KKW00828SFConst.AD_CD1_03, adCd.substring(0, 2));								// 住所コード
			setValue(subbean, KKW00828SFConst.AD_CD2_03, adCd.substring(2, 5));
			setValue(subbean, KKW00828SFConst.AD_CD3_03, adCd.substring(5, 8));
			setValue(subbean, KKW00828SFConst.AD_CD4_03, adCd.substring(8, 11));
			setValue(subbean, KKW00828SFConst.KEISHA_AD_CD1_03, adCd.substring(0, 2));						// 契約者＿住所コード
			setValue(subbean, KKW00828SFConst.KEISHA_AD_CD2_03, adCd.substring(2, 5));
			setValue(subbean, KKW00828SFConst.KEISHA_AD_CD3_03, adCd.substring(5, 8));
			setValue(subbean, KKW00828SFConst.KEISHA_AD_CD4_03, adCd.substring(8, 11));
		}
		
		// 都道府県
		setValue(bean[0], KKW00828SFConst.STATE, (String)parentMap.get("kaisen_place_state_nm"));				// 都道府県
		setValue(bean[0], KKW00828SFConst.BK_KEISHA_STATE, (String)parentMap.get("kaisen_place_state_nm"));		// 契約者＿都道府県
		setValue(bean[0], KKW00828SFConst.CITY, (String)parentMap.get("kaisen_place_city_nm"));					// 市区町村
		setValue(bean[0], KKW00828SFConst.BK_KEISHA_CITY, (String)parentMap.get("kaisen_place_city_nm"));		// 契約者＿市区町村
		// 大字通称名
		setValue(bean[0], KKW00828SFConst.OAZTSU, (String)parentMap.get("kaisen_place_oaztsu_nm"));				// 大字通称名
		setValue(bean[0], KKW00828SFConst.BK_KEISHA_OAZTSU, (String)parentMap.get("kaisen_place_oaztsu_nm"));	// 契約者＿大字通称名
		// 字丁目
		setValue(bean[0], KKW00828SFConst.AZCHO, (String)parentMap.get("kaisen_place_azcho_nm"));				// 字丁目
		setValue(bean[0], KKW00828SFConst.BK_KEISHA_AZCHO, (String)parentMap.get("kaisen_place_azcho_nm"));		// 契約者＿字丁目
		// 番地・号
		setValue(bean[0], KKW00828SFConst.BNCHIGO, (String)parentMap.get("kaisen_place_bnchigo"));				// 番地・号
		setValue(bean[0], KKW00828SFConst.BK_KEISHA_BNCHIGO, (String)parentMap.get("kaisen_place_bnchigo"));	// 契約者＿番地・号
		// 建物名
		setValue(bean[0], KKW00828SFConst.ADRTTM, (String)parentMap.get("kaisen_place_adrttm"));				// 建物名
		setValue(bean[0], KKW00828SFConst.BK_KEISHA_ADRTTM, (String)parentMap.get("kaisen_place_adrttm"));		// 契約者＿建物名
		// 部屋番号
		setValue(bean[0], KKW00828SFConst.ADRRM, (String)parentMap.get("kaisen_place_adrrm"));					// 部屋番号
		setValue(bean[0], KKW00828SFConst.BK_KEISHA_ADRRM, (String)parentMap.get("kaisen_place_adrrm"));		// 契約者＿部屋番号
		// 電話番号
		setValue(bean[0], KKW00828SFConst.TELNO, (String)parentMap.get("kaisen_place_telno"));					// 電話番号
		setValue(bean[0], KKW00828SFConst.BK_KEISHA_TELNO, (String)parentMap.get("kaisen_place_telno"));		// 契約者＿電話番号
		
		// 送付先名
		setValue(bean[0], KKW00828SFConst.SHS_NM, (String)parentMap.get("cust_nm"));							// 送付先名
		setValue(bean[0], KKW00828SFConst.BK_KEISHA_SHS_NM, (String)parentMap.get("cust_nm"));					// 契約者＿送付先名
		// 送付先カナ名
		setValue(bean[0], KKW00828SFConst.SHS_KANA, (String)parentMap.get("cust_kana"));						// 送付先カナ名
		setValue(bean[0], KKW00828SFConst.BK_KEISHA_SHS_KANA, (String)parentMap.get("cust_kana"));				// 契約者＿送付先カナ名
		
		// サービス契約ステータス
		setValue(bean[0], KKW00828SFConst.SVC_KEI_STAT, (String)parentMap.get("svc_kei_stat"));
		// サービス契約＿最終更新年月日時分秒
		setValue(bean[0], KKW00828SFConst.SVC_LAST_UPD_DTM, (String)parentMap.get("last_upd_dtm"));
		
		return bean;
	}
	
	/**
	 * コードリストの設定をします。
	 * 
	 * @param bean
	 * @param map
	 * @param beanKey
	 * @param mapKey
	 */
	@SuppressWarnings("unchecked")
	private void setCodeList(X31SDataBeanAccess bean, HashMap map, String beanKey, String mapKey)
	{
		X31SDataBeanAccessArray beanList = bean.getDataBeanArray(beanKey);
		beanList.clearArray();
		
		ArrayList childList = (ArrayList)map.get(mapKey);
		X31SDataBeanAccess subBean = beanList.addDataBean();
		
		// 空白選択支の設定
		subBean.sendMessageString(CKW00201SFConst.CD_DIV_CD_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, "");
		subBean.sendMessageString(CKW00201SFConst.CD_DIV_NM_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, "");
		subBean.sendMessageString(CKW00201SFConst.DEFAULT_CD_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, "");
		
/* ++++++++++ v4.03.00 変更開始 ++++++++++ */
		int index = 1;
		
		for (int i = 0; i < childList.size(); i++)
		{
			HashMap childMap = (HashMap)childList.get(i);
			
			// "2":利用場所住所情報と同じ は対象外
			if ("2".equals((String)childMap.get("cd_div")))
			{
				continue;
			}
			
			setCodeListValue(subBean, childMap, index);
			
			index++;
		}
/* ++++++++++ v4.03.00 変更開始 ++++++++++ */
		subBean.sendMessageString(CKW00201SFConst.SELECT_INDEX_01, X31CWebConst.DATABEAN_SET_VALUE, "1");
	}
	
	/**
	 * コードリストの設定をします。
	 * 
	 * @param bean
	 * @param map
	 * @param index
	 */
	@SuppressWarnings("unchecked")
	private void setCodeListValue(X31SDataBeanAccess bean, HashMap map, int index)
	{
/* ++++++++++ v4.03.00 変更開始 ++++++++++ */
		String value = String.valueOf(index) + ".";
/* ++++++++++ v4.03.00 変更開始 ++++++++++ */
		
		// コード区分
		bean.sendMessageString(CKW00201SFConst.CD_DIV_CD_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, (String)map.get("cd_div"));
		// コード区分名
		bean.sendMessageString(CKW00201SFConst.CD_DIV_NM_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, value + (String)map.get("cd_div_nm"));
	}
	
	/**
	 * 顧客契約引継リストから指定された項目の値を取得します。
	 * <br>
	 * @param bean　[0]：ｅｏ光テレビケーブルテレビガイド誌登録
	 * @param itemName 項目名
	 * <br>
	 * @return String 項目値
	 */
	private String getValueFromHktgiList(X31SDataBeanAccess[] bean, String itemName)
	{
		// 顧客引継情報
		X31SDataBeanAccessArray arraybean = bean[0].getDataBeanArray(KKW00828SFConst.CUST_KEI_HKTGI_LIST);
		X31SDataBeanAccess subbean = arraybean.getDataBean(0);
		
		return getValue(subbean, itemName);
	}
/* ++++++++++ v4.03.00 変更終了 ++++++++++ */
	
	/**
	 * データBeanから指定された項目の値を取得します。
	 * <br>
	 * @param bean 画面情報
	 * @param itemName 項目名
	 * <br>
	 * @return String 項目値
	 */
	private String getValue(X31SDataBeanAccess bean, String itemName)
	{
		return bean.sendMessageString(itemName, X31CWebConst.DATABEAN_GET_VALUE);
	}
	
	/**
	 * データBeanに指定された項目の値を設定します。
	 * <br>
	 * @param bean 画面情報
	 * @param itemName 項目名
	 * @param value 設定値
	 */
	private void setValue(X31SDataBeanAccess bean, String itemName, String value)
	{
		bean.sendMessageString(itemName, X31CWebConst.DATABEAN_SET_VALUE, value);
	}
	
	/**
	 * 引数のNULL判定を行います。
	 * @param param
	 * @return 判定結果
	 */
	private boolean isNull(Object param)
	{
		if(param == null)
		{
			return true;
		}
		return false;
	}
}