/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：KKSV0508_KKSV0508OPDBMapper
*	ソースファイル名：KKSV0508_KKSV0508OPDBMapper.java
*	作成者			：FJ
*	日付			：2012年03月28日
*＜機能概要＞
*	BP（初期設定サポート手配情報一覧初期表示）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/03/28	FJ			新規作成
*	v4.00.00	2013/02/19	FJ)強矢		【OT-2013-0000187】対応
*	v4.00.01	2013/02/25	FJ)強矢		【ST4-2012-0000181】性能改善(EKK0081B022→EKK2781B001)対応
*	v4.00.02	2013/09/25	FJ)鳩本		【OM-2013-0002434】対応
*	v5.00.00	2013/12/04	FJ)石橋		【OM-2013-0001870】対応
**********************************************************************/
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.KKW13401SF.KKW13401SFConst;
import eo.web.webview.common.JCCWebCommon;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class KKSV0508_KKSV0508OPDBMapper {
	
	/* ++++++++++ v4.00.02 追加開始 ++++++++++ */
	/** ファミリーパック有無 有 */
	private static final String FAMIPAUM_ARI = "有";
	/** ファミリーパック有無 無 */
	private static final String FAMIPAUM_NASHI = "無";
	/** 割引サービス契約ステータス キャンセル済 */
	private static final String WRIB_SVC_KEI_STAT_CANCEL = "920";
	/* ++++++++++ v4.00.02 追加完了 ++++++++++ */
	
	/**
	 * コンストラクタ
	 */
	public KKSV0508_KKSV0508OPDBMapper(){
	}
	

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：初期設定サポート手配情報一覧登録画面
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	//public HashMap setKKSV050801CC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
	public HashMap setKKSV050801CC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code,String d_flg) {
		
		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("search_type", String.valueOf("1"));
		parentMap.put("display_num", JCCWebCommon.getSearchConst("KKW13401_MAX_SHOW_CNT"));
		parentMap.put("max_search_num", JCCWebCommon.getSearchConst("KKW13401_MAX_SHOW_CNT"));
		
		// サービス契約番号退避 → 初期設定サポート手配情報一覧マップ.ＫＥＹ＿サービス契約番号
		parentMap.put("key_svc_kei_no", bean[0].sendMessageString("サービス契約番号退避", X31CWebConst.DATABEAN_GET_VALUE));
		// 新規申込書番号退避 → 初期設定サポート手配情報一覧マップ.ＫＥＹ＿申込書番号
		parentMap.put("key_mskmsho_no", bean[0].sendMessageString("新規申込書番号退避", X31CWebConst.DATABEAN_GET_VALUE));
		// サービス開始年月日　完了フラグ → 初期設定サポート手配情報一覧マップ.ＫＥＹ＿ループバックテスト完了年月日フラグ
		parentMap.put("key_loop_test_fin_ymd_flg",bean[0].sendMessageString("サービス開始年月日　完了フラグ", X31CWebConst.DATABEAN_GET_VALUE));
		
		// サービス開始年月日（自）退避 → 初期設定サポート手配情報一覧マップ.ＫＥＹ＿ループバックテスト完了年月日（自）
		parentMap.put("key_loop_test_fin_ymd_from", bean[0].sendMessageString("サービス開始年月日（自）退避", X31CWebConst.DATABEAN_GET_VALUE));
		// サービス開始年月日（至）退避 → 初期設定サポート手配情報一覧マップ.ＫＥＹ＿ループバックテスト完了年月日（至）
		parentMap.put("key_loop_test_fin_ymd_to", bean[0].sendMessageString("サービス開始年月日（至）退避", X31CWebConst.DATABEAN_GET_VALUE));
		// ファミリーパック有無フラグ → 初期設定サポート手配情報一覧マップ.ＫＥＹ＿ファミリーパック有無フラグ
		parentMap.put("key_famipa_um_flg", bean[0].sendMessageString("ファミリーパック有無フラグ", X31CWebConst.DATABEAN_GET_VALUE));
		// 出張サポート完了日　完了フラグ → 初期設定サポート手配情報一覧マップ.ＫＥＹ＿サポート完了年月日フラグ
		parentMap.put("key_support_fin_ymd_flg", bean[0].sendMessageString("出張サポート完了日　完了フラグ", X31CWebConst.DATABEAN_GET_VALUE));
		// 出張サポート完了日（自）退避 → 初期設定サポート手配情報一覧マップ.ＫＥＹ＿サポート完了年月日（自）
		parentMap.put("key_support_fin_ymd_from", bean[0].sendMessageString("出張サポート完了日（自）退避", X31CWebConst.DATABEAN_GET_VALUE));
		// 出張サポート完了日（至）退避 → 初期設定サポート手配情報一覧マップ.ＫＥＹ＿サポート完了年月日（至）
		parentMap.put("key_support_fin_ymd_to", bean[0].sendMessageString("出張サポート完了日（至）退避", X31CWebConst.DATABEAN_GET_VALUE));
		// 手配登録日　完了フラグ → 初期設定サポート手配情報一覧マップ.ＫＥＹ＿登録年月日フラグ（サポート）
		parentMap.put("key_support_add_ymd_flg", bean[0].sendMessageString("手配登録日　完了フラグ", X31CWebConst.DATABEAN_GET_VALUE));
		// 出張サポート完了日（自）退避 → 初期設定サポート手配情報一覧マップ.ＫＥＹ＿登録年月日（サポート）（自）
		parentMap.put("key_support_add_ymd_from", bean[0].sendMessageString("手配登録日（自）退避", X31CWebConst.DATABEAN_GET_VALUE));
		// 出張サポート完了日（至）退避 → 初期設定サポート手配情報一覧マップ.ＫＥＹ＿登録年月日（サポート）（至）
		parentMap.put("key_support_add_ymd_to", bean[0].sendMessageString("手配登録日（至）退避", X31CWebConst.DATABEAN_GET_VALUE));

		//■ダウンロードボタン押下時、エラーメッセージフラグ
		parentMap.put("key_temp_flg", d_flg);
			
		//■ダウンロードボタン押下時、排他チェックするため、初期検索結果リストをサービスに渡す。
		ArrayList compareList = new ArrayList();
		X31SDataBeanAccessArray compareListbean = bean[0].getDataBeanArray("初期設定サポート手配情報比較用一覧リスト");
		for(int i = 0; i < compareListbean.getCount(); i++)
		{
			HashMap compareMap = new HashMap();
			X31SDataBeanAccess subbean = compareListbean.getDataBean(i);
			String compare_upd_dtm = subbean.sendMessageString("更新年月日時分秒退避", X31CWebConst.DATABEAN_GET_VALUE);
			compareMap.put("compare_upd_dtm", compare_upd_dtm);
			compareList.add(compareMap);
		}
		parentMap.put("compareMap", compareList);
		//■=======================================================================
		
		outputMap.put("KKSV050801CC", parentMap);
						
		return outputMap;
	}

	/**
	 * 下りマッピング
	 * @param bean　[0]：初期設定サポート手配情報一覧登録画面
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getKKSV050801CC(X31SDataBeanAccess[] bean, HashMap outputMap){

		// 出力先DataBeanList を指定(初期設定サポート手配情報一覧リスト)
		X31SDataBeanAccessArray listKKSV050801SC_support_tehai_list_EKK2781B001CBSMsg1List = bean[0].getDataBeanArray("初期設定サポート手配情報一覧リスト");

		setDataList(listKKSV050801SC_support_tehai_list_EKK2781B001CBSMsg1List, outputMap);

		//■ダウンロードボタン押下時、排他チェックするため、検索結果リストを設定する。 
		X31SDataBeanAccessArray listKKSV050801SC_support_hikaku_list_EKK2781B001CBSMsg1List = bean[0].getDataBeanArray("初期設定サポート手配情報比較用一覧リスト");
		setDataList2(listKKSV050801SC_support_hikaku_list_EKK2781B001CBSMsg1List, outputMap);

		return bean;
	}

	/**
	 * 下りマッピング
	 * @param bean　[0]：初期設定サポート手配情報一覧登録画面
	 * @param outputMap
	 */
//	@SuppressWarnings("unchecked")
//	public X31SDataBeanAccess[] getKKSV050802CC(X31SDataBeanAccess[] bean, HashMap outputMap){
//
//		HashMap parentMap = null;
//		if(outputMap.containsKey("KKSV050801CC")){
//			parentMap = (HashMap)outputMap.get("KKSV050801CC");
//		}
//
//		// 出力先DataBeanList を指定(初期設定サポート手配情報比較用一覧リスト)
//		X31SDataBeanAccessArray listKKSV050801SC_support_hikaku_list_EKK0081B022CBSMsg1List = bean[0].getDataBeanArray("初期設定サポート手配情報比較用一覧リスト");
//		setDataList(listKKSV050801SC_support_hikaku_list_EKK0081B022CBSMsg1List, outputMap);
//
//		return bean;
//	}
	
	/**
	 * サービスインターフェース取得内容をDataBeanにセットします。
	 * @param support_list セット先となる画面一覧
	 * @param outputMap サービスインターフェース取得内容
	 */
	private void setDataList(X31SDataBeanAccessArray support_list,  HashMap outputMap)
	{
		HashMap parentMap = null;
		if(outputMap.containsKey("KKSV050801CC")){
			parentMap = (HashMap)outputMap.get("KKSV050801CC");
		}

		ArrayList childList = null;
//		childList = null;
		if(support_list != null && parentMap != null && parentMap.containsKey("EKK2781B001CBSMsg1List")){
			childList = (ArrayList)parentMap.get("EKK2781B001CBSMsg1List");

			/* ++++++++++ v5.00.00 変更開始 ++++++++++ */
//			parentMap.put("total_search_num", childList.size());
			/* ++++++++++ v5.00.00 変更終了 ++++++++++ */
			
			for(int i = 0; i < childList.size(); i++){
				X31SDataBeanAccess subbean = null;
				
				if(support_list.getCount() -1 >= i){
					subbean = support_list.getDataBean(i);
				}else{
					subbean = support_list.addDataBean();
				}
				
				HashMap childMap = (HashMap)childList.get(i);
				
				if (subbean == null) {
					continue;
				}
				
				// 初期設定サポート手配情報一覧リスト.サービス契約番号 ← 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.サービス契約番号
				if (childMap != null) {
					subbean.sendMessageString("サービス契約番号", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("svc_kei_no"));
				} else {
					subbean.sendMessageString("サービス契約番号", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				// 初期設定サポート手配情報一覧リスト.新規申込書番号 ← 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.申込書番号
				if (childMap != null) {
					subbean.sendMessageString("新規申込書番号", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("mskmsho_no"));
				} else {
					subbean.sendMessageString("新規申込書番号", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				// 初期設定サポート手配情報一覧リスト.契約者名 ← 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.お客様名
				if (childMap != null) {
					subbean.sendMessageString("契約者名", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("cust_nm"));
				} else {
					subbean.sendMessageString("契約者名", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				
				// 初期設定サポート手配情報一覧リスト.出張サポート完了日退避 ← 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.サポート完了年月日
				if (childMap != null) {
					subbean.sendMessageString("出張サポート完了日退避", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("support_fin_ymd"));
				} else {
					subbean.sendMessageString("出張サポート完了日退避", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				
				// 初期設定サポート手配情報一覧リスト.申込日 ← 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.申込年月日
				if (childMap != null) {
					subbean.sendMessageString("申込日", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("mskm_ymd"));
				} else {
					subbean.sendMessageString("申込日", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				
/* ++++++++++ v4.00.01 修正開始 ++++++++++ */
/* ++++++++++ v4.00.00 修正開始 ++++++++++ */
//				// 初期設定サポート手配情報一覧リスト.ファミリーパック有無 ← 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.ファミリーパック有無
//				if (childMap != null) {
//					subbean.sendMessageString("ファミリーパック有無", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("family_pack_um"));
//				} else {
//					subbean.sendMessageString("ファミリーパック有無", X31CWebConst.DATABEAN_SET_VALUE, new String());
//				}
/* ++++++++++ v4.00.00 修正終了 ++++++++++ */
/* ++++++++++ v4.00.01 修正終了 ++++++++++ */
				
				// 初期設定サポート手配情報一覧リスト.割引サービス契約番号 ← 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.割引サービス契約番号
				if (childMap != null) {
					subbean.sendMessageString("割引サービス契約番号", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("wrib_svc_kei_no"));
				} else {
					subbean.sendMessageString("割引サービス契約番号", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				// 初期設定サポート手配情報一覧リスト.ファミリーパック解約日 ← 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.サービス解約年月日
				if (childMap != null) {
					subbean.sendMessageString("ファミリーパック解約日", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("svc_dsl_ymd"));
				} else {
					subbean.sendMessageString("ファミリーパック解約日", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				
				// 初期設定サポート手配情報一覧リスト.手配登録日 ← 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.登録年月日時分秒（サポート）
				if (childMap != null) {
					if(childMap.get("kk0631_add_dtm").toString().length() > 8 )
					{
						subbean.sendMessageString("手配登録日", X31CWebConst.DATABEAN_SET_VALUE, childMap.get("kk0631_add_dtm").toString().substring(0, 8));
					}
					else
					{
						subbean.sendMessageString("手配登録日", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("kk0631_add_dtm"));
					}
					
				} else {
					subbean.sendMessageString("手配登録日", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}

				// 初期設定サポート手配情報一覧リスト.ループテスト完了日 ← 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.ループバックテスト完了年月日
				if (childMap != null) {
					subbean.sendMessageString("ループテスト完了日", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("loopback_test_fin_ymd"));
				} else {
					subbean.sendMessageString("ループテスト完了日", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				// 初期設定サポート手配情報一覧リスト.サービス開始日 ← 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.サービス開始年月日
				if (childMap != null) {
					subbean.sendMessageString("サービス開始日", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("svc_sta_ymd"));
				} else {
					subbean.sendMessageString("サービス開始日", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				
				// 初期設定サポート手配情報一覧リスト.サポート番号退避 ← 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.サポート番号
				if (childMap != null) {
					subbean.sendMessageString("サポート番号退避", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("support_no"));
				} else {
					subbean.sendMessageString("サポート番号退避", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				// 初期設定サポート手配情報一覧リスト.更新年月日時分秒退避 ← 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.更新年月日時分秒（サポート）
				if (childMap != null) {
					subbean.sendMessageString("更新年月日時分秒退避", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("kk0631_upd_dtm"));
				} else {
					subbean.sendMessageString("更新年月日時分秒退避", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				
				/* ++++++++++ v4.00.02 追加開始 ++++++++++ */
				// 初期設定サポート手配情報一覧リスト.ファミリーパック有無の設定
				subbean.sendMessageString(KKW13401SFConst.RSLT_FAMIPA_UM_01, X31CWebConst.DATABEAN_SET_VALUE, setfamipaUm(childMap));
				/* ++++++++++ v4.00.02 追加完了 ++++++++++ */
				
			}
		}
	}
	
	/* ++++++++++ v4.00.02 追加開始 ++++++++++ */
	
	/**
	 * 下りマッピング取得内容からファミリーパック有無表示内容を決定する。
	 * <br>
	 * @param childMap
	 * @return
	 */
	@SuppressWarnings("unchecked")
	private String setfamipaUm(HashMap childMap)
	{
		// 割引サービス契約番号の取得
		String wrib_svc_kei_no = (String)childMap.get("wrib_svc_kei_no");
		
		if(isNullCheck(wrib_svc_kei_no))
		{
			// 割引サービス契約番号なし(割引サービスなし)の場合、"無"
			return FAMIPAUM_NASHI;
		}
		else
		{
			String wrib_svc_kei_stat = (String)childMap.get("wrib_svc_kei_stat");
			
			if(WRIB_SVC_KEI_STAT_CANCEL.equals(wrib_svc_kei_stat))
			{
				// 割引サービス契約ステータス"キャンセル済"の場合、"無"
				return FAMIPAUM_NASHI;
			}
			else
			{
				// 上記以外の場合、"有"
				return FAMIPAUM_ARI;
			}
		}
	}
	
	/**
	 * 対象項目が空白またはnullかをチェックします。
	 * @param target
	 * @return boolean (true:空白またはnull , false:項目設定あり)
	 */
	private boolean isNullCheck(String target)
	{
		if(target == null || "".equals(target))
		{
			return true;
		}
		else
		{
			return false;
		}
		
	}
	/* ++++++++++ v4.00.02 追加完了 ++++++++++ */
	
	/**
	 * ダウンロードボタン押下時、排他チェックするため、検索結果リストを設定する。 
	 * サービスインターフェース取得内容をDataBeanにセットします。
	 * @param support_list セット先となる画面一覧
	 * @param outputMap サービスインターフェース取得内容中、「更新年月日時分妙」だけを設定する
	 */
	private void setDataList2(X31SDataBeanAccessArray support_list,  HashMap outputMap)
	{
		HashMap parentMap = null;
		if(outputMap.containsKey("KKSV050801CC")){
			parentMap = (HashMap)outputMap.get("KKSV050801CC");
		}

		ArrayList childList = null;
//		childList = null;
		if(support_list != null && parentMap != null && parentMap.containsKey("EKK2781B001CBSMsg1List")){
			childList = (ArrayList)parentMap.get("EKK2781B001CBSMsg1List");

			/* ++++++++++ v5.00.00 変更開始 ++++++++++ */
//			parentMap.put("total_search_num", childList.size());
			/* ++++++++++ v5.00.00 変更終了 ++++++++++ */
			
			for(int i = 0; i < childList.size(); i++){
				X31SDataBeanAccess subbean = null;
				
				if(support_list.getCount() -1 >= i){
					subbean = support_list.getDataBean(i);
				}else{
					subbean = support_list.addDataBean();
				}
				
				HashMap childMap = (HashMap)childList.get(i);
				
				if (subbean == null) {
					continue;
				}
				

				// 初期設定サポート手配情報比較用一覧リスト.更新年月日時分秒退避 ← 初期設定サポート手配情報一覧マップ.初期設定サポート手配情報一覧照会明細.更新年月日時分秒（サポート）
				if (childMap != null) {
					subbean.sendMessageString("更新年月日時分秒退避", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("kk0631_upd_dtm"));
				} else {
					subbean.sendMessageString("更新年月日時分秒退避", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
			}
		}
	}
	
}
