/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：KKSV0002_KKSV0002OPDBMapper
*	ソースファイル名：KKSV0002_KKSV0002OPDBMapper.java
*	作成者			：FJ
*	日付			：2011年08月20日
*＜機能概要＞
*	BP（Ｅメール情報登録確認）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00		2011/08/20	FJ			新規作成
*	v1.00		2011/09/26	FJ			追加	Ｅメール情報登録確認リスト.事務手数料自動適用要否
*	v3.00		2012/04/30	FJ森本		異動理由メモ対応
*	v4.00		2012/10/31	FJ砂川		【IT1-2012-0001778】申込種別コードの不整合対応
*
**********************************************************************/
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 com.sun.enterprise.util.StringUtils;

import eo.web.webview.KKW00801SF.KKW00801SFConst;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class KKSV0002_KKSV0002OPDBMapper {
	
	/**
	 * コンストラクタ
	 */
	public KKSV0002_KKSV0002OPDBMapper(){
	}
	

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：Ｅメール情報情報登録
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV000201CC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
		
		if(bean == null){
			return null;
		}
		
		if(bean.length != 1){
			return null;
		}

		X31SDataBeanAccessArray arraybean = null;
		X31SDataBeanAccess beanTemp = null;
		ArrayList list = null;

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 引継ぎリストの取得
		ArrayList idoRsnList = new ArrayList();
		X31SDataBeanAccessArray custKeiHktgiList =  bean[0].getDataBeanArray(KKW00801SFConst.CUST_KEI_HKTGI_LIST);
		X31SDataBeanAccess custKeiHktgiInf = custKeiHktgiList.getDataBean(0);
		
		// ST2-2012-0000379 2012/03/15 ADD START
		// ファミリーパック契約の有無
		boolean isExistsFamilyPack = bean[0].sendMessageBoolean(KKW00801SFConst.VIRUS_CHK_ENABLED,
				X31CWebConst.DATABEAN_GET_VALUE);
		// ST2-2012-0000379 2012/03/15 ADD END

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 運用年月日 → Eメール登録確認マップ.運用年月日
		parentMap.put("unyo_ymd", bean[0].sendMessageString("運用年月日", X31CWebConst.DATABEAN_GET_VALUE));
		// 運用年月日時分秒 → Eメール登録確認マップ.運用年月日時分秒
		parentMap.put("unyo_dtm", bean[0].sendMessageString("運用年月日時分秒", X31CWebConst.DATABEAN_GET_VALUE));
		// 部品呼び出し → Eメール登録確認マップ.オプションサービスコード
		parentMap.put("op_svc_cd", String.valueOf("B001"));
		// サービス契約番号 → Eメール登録確認マップ.サービス契約番号
		parentMap.put("svc_kei_no", bean[0].sendMessageString("サービス契約番号", X31CWebConst.DATABEAN_GET_VALUE));
		// ＳＹＳＩＤ → Eメール登録確認マップ.SYSID
		parentMap.put("sysid", bean[0].sendMessageString("ＳＹＳＩＤ", X31CWebConst.DATABEAN_GET_VALUE));
		// 初期容量 → Eメール登録確認マップ.初期容量
		parentMap.put("shk_capa", bean[0].sendMessageString("初期容量", X31CWebConst.DATABEAN_GET_VALUE));
		// 部品呼び出し → Eメール登録確認マップ.異動区分
		parentMap.put("ido_div", custKeiHktgiInf.sendMessageString("異動区分", X31CWebConst.DATABEAN_GET_VALUE));
		// 部品呼び出し → Eメール登録確認マップ.申込種別コード
		// ▼▼▼ 2012/10/31 IT1-2012-0001778 Delete Start ▼▼▼
//		parentMap.put("mskm_sbt_cd", String.valueOf("00002"));
		// ▲▲▲ 2012/10/31 IT1-2012-0001778 Delete End ▲▲▲
		// ▼▼▼ 2012/10/31 IT1-2012-0001778 Add Start ▼▼▼
		parentMap.put("mskm_sbt_cd", String.valueOf("00026"));	// 固定："00026"(オプション申込)
		// ▲▲▲ 2012/10/31 IT1-2012-0001778 Add End ▲▲▲
		// 部品呼び出し → Eメール登録確認マップ.予約適用コード
		parentMap.put("rsv_aply_cd", String.valueOf("2"));
		// 部品呼び出し → Ｅメール情報登録確認リスト.事務手数料自動適用要否
		parentMap.put("rule0059_auto_aply", String.valueOf(eo.web.webview.common.JKKCommonConst.KH_PSG));
		// 部品呼び出し → Ｅメール情報登録確認リスト.請求契約番号
		parentMap.put("seiky_kei_no", bean[0].sendMessageString("請求契約番号", X31CWebConst.DATABEAN_GET_VALUE));
		//↓↓↓2012-02-20追加ST2-2012-0000185対応↓↓↓
		//異動日時	ido_dtm
		parentMap.put("ido_dtm", bean[0].sendMessageString(KKW00801SFConst.IDO_DTM, X31CWebConst.DATABEAN_GET_VALUE));
		//申込番号	mskm_no
		parentMap.put("mskm_no", bean[0].sendMessageString(KKW00801SFConst.MSKM_NO, X31CWebConst.DATABEAN_GET_VALUE));
		//申込書番号	mskmsho_no
		parentMap.put("mskmsho_no", bean[0].sendMessageString(KKW00801SFConst.MSKMSHO_NO, X31CWebConst.DATABEAN_GET_VALUE));
		//申込年月日	mskm_ymd
		parentMap.put("mskm_ymd", bean[0].sendMessageString(KKW00801SFConst.UNYO_YMD, X31CWebConst.DATABEAN_GET_VALUE));
		//ＫＫ００１１更新年月日時分秒	kk0011_upd_dtm
		parentMap.put("kk0011_upd_dtm", bean[0].sendMessageString(KKW00801SFConst.KK0011_UPD_DTM, X31CWebConst.DATABEAN_GET_VALUE));
		//↑↑↑2012-02-20追加ST2-2012-0000185対応↑↑↑
		// ST2-2012-0000379 2012/03/15 ADD START
		// ファミリーパック契約の有無
		if (isExistsFamilyPack)
		{
			parentMap.put("family_pack", "1");
		}
		else
		{
			parentMap.put("family_pack", "0");
		}
		// ST2-2012-0000379 2012/03/15 ADD END

		// 部品呼び出し → 異動理由コード
		parentMap.put("ido_rsn_list", idoRsnList);
		Integer maxIndex = (Integer) custKeiHktgiInf.sendMessage(KKW00801SFConst.IDO_RSN_CD_04, X31CWebConst.DATABEAN_GET_COUNT);
		for(int i = 0 ; i < maxIndex.intValue(); i ++){
			HashMap idoRsnElement = new HashMap();
			String str = custKeiHktgiInf.sendMessageString(KKW00801SFConst.IDO_RSN_CD_04, X31CWebConst.DATABEAN_GET_VALUE, i);
			idoRsnElement.put("ido_rsn_cd", str);
			// ▼異動理由メモのマッピング対応 Start
			idoRsnElement.put("ido_rsn_memo", custKeiHktgiInf.sendMessageString(KKW00801SFConst.IDO_RSN_MEMO_04, X31CWebConst.DATABEAN_GET_VALUE));
			// ▲異動理由メモのマッピング対応 End
			idoRsnList.add(idoRsnElement);
		}
		
		beanTemp = bean[0];
		arraybean = beanTemp.getDataBeanArray("画面データリスト");
		if(parentMap.containsKey("JKKEmailInfoAddCfmCCList")){
			list = (ArrayList)parentMap.get("JKKEmailInfoAddCfmCCList");
		}else{
			list = new ArrayList();
		}

		String regPrefix = "[0-9]+\\. ";
		String regSaffix = "[mMgGbB]+$";

		if(arraybean != null && arraybean.getCount() > 0){
			for(int i = 0; i < arraybean.getCount(); i++){
				X31SDataBeanAccess subbean = arraybean.getDataBean(i);
				HashMap childMap = null;
				if(list.size() -1 >= i){
					childMap = (HashMap)list.get(i);
				}else{
					childMap = new HashMap();
				}

				// メールアドレスアカウントが未入力の場合は、送信しない
				String mladAccount = subbean.sendMessageString("メールアドレスアカウント", X31CWebConst.DATABEAN_GET_VALUE);
				if (mladAccount == null || "".equals(mladAccount)) {
					continue;
				}

				// 画面データリスト.メールアドレスアカウント → Eメール登録確認マップ.Ｅメール情報登録確認リスト.メールアドレスアカウント
				if (subbean != null) {
					childMap.put("mlad_account", mladAccount);
				}
				// 画面データリスト.表示用メールボックス容量 → Eメール登録確認マップ.Ｅメール情報登録確認リスト.メールボックス容量
				if (subbean != null) {
//					// 添え字を削除
//					String mlBoxCapa = subbean.sendMessageString(KKW00801SFConst.MLBOX_CAPA_VALUE_01, X31CWebConst.DATABEAN_GET_VALUE);
//					mlBoxCapa = mlBoxCapa.replaceFirst(regPrefix, "").replaceFirst(regSaffix, "");
					String mlBoxCapa = subbean.sendMessageString(KKW00801SFConst.MLBOX_CAPA_MB_01, X31CWebConst.DATABEAN_GET_VALUE);
					childMap.put("ml_box_capa", mlBoxCapa);
				}
				// 画面データリスト.表示用ウイルスチェック → Eメール登録確認マップ.Ｅメール情報登録確認リスト.ウイルスチェック
				if (subbean != null) {
					String virusChk = subbean.sendMessageString(KKW00801SFConst.VIRUS_CHK_VALUE_01, X31CWebConst.DATABEAN_GET_VALUE);
					virusChk = virusChk.replaceFirst(regPrefix, "");
					childMap.put("virus_chk", virusChk);
				}
				// 画面データリスト.利用開始日（年） → Eメール登録確認マップ.Ｅメール情報登録確認リスト.利用開始日（年）
				if (subbean != null) {
					childMap.put("use_staymd_year", subbean.sendMessageString("利用開始日（年）", X31CWebConst.DATABEAN_GET_VALUE));
				}
				// 画面データリスト.利用開始日（月） → Eメール登録確認マップ.Ｅメール情報登録確認リスト.利用開始日（月）
				if (subbean != null) {
					childMap.put("use_staymd_mon", subbean.sendMessageString("利用開始日（月）", X31CWebConst.DATABEAN_GET_VALUE));
				}
				// 画面データリスト.利用開始日（日） → Eメール登録確認マップ.Ｅメール情報登録確認リスト.利用開始日（日）
				if (subbean != null) {
					childMap.put("use_staymd_day", subbean.sendMessageString("利用開始日（日）", X31CWebConst.DATABEAN_GET_VALUE));
				}

				list.add(childMap);
			}
		}
		parentMap.put("JKKEmailInfoAddCfmCCList", list);

		outputMap.put("KKSV000201CC", parentMap);
						
		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：Ｅメール情報情報登録
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setUpdMkmScinsprtWkCC(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);

		// サービス契約番号 → 申込画面入力支援ワーク情報更新CC.ＫＥＹ＿サービス契約番号
		parentMap.put("key_svc_kei_no", bean[0].sendMessageString("サービス契約番号", X31CWebConst.DATABEAN_GET_VALUE));
		// ネットタブオプション情報制御コード → 申込画面入力支援ワーク情報更新CC.ネットタブオプション情報制御コード
		parentMap.put("net_tab_op_if_ctl_cd", bean[0].sendMessageString("ネットタブオプション情報制御コード", X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put("UpdMkmScinsprtWkCC", parentMap);
						
		return outputMap;
	}


	/**
	 * 下りマッピング
	 * @param bean　[0]：Ｅメール情報情報登録
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getKKSV000201CC(X31SDataBeanAccess[] bean, HashMap outputMap){

		HashMap parentMap = null;
		if(outputMap.containsKey("KKSV000201CC")){
			parentMap = (HashMap)outputMap.get("KKSV000201CC");
		}

		ArrayList childList = null;
		

		X31SDataBeanAccessArray listKKSV000201CC_mlad_list_JKKEmailInfoAddCfmCCList = bean[0].getDataBeanArray("画面データリスト");
		childList = null;
		if(listKKSV000201CC_mlad_list_JKKEmailInfoAddCfmCCList != null && parentMap != null && parentMap.containsKey("JKKEmailInfoAddCfmCCList")){
			childList = (ArrayList)parentMap.get("JKKEmailInfoAddCfmCCList");

			int listIndex = 0;
			for(int i = 0; i < listKKSV000201CC_mlad_list_JKKEmailInfoAddCfmCCList.getCount(); i++){
				X31SDataBeanAccess subbean = null;
				if(listKKSV000201CC_mlad_list_JKKEmailInfoAddCfmCCList.getCount() -1 >= i){
					subbean = listKKSV000201CC_mlad_list_JKKEmailInfoAddCfmCCList.getDataBean(i);
				}else{
					subbean = listKKSV000201CC_mlad_list_JKKEmailInfoAddCfmCCList.addDataBean();
				}
				if (subbean == null) {
					continue;
				}

				// メールアドレスアカウント未入力の場合はマッピング対象外
				String mladAccount = subbean.sendMessageString("メールアドレスアカウント", X31CWebConst.DATABEAN_GET_VALUE);
				if (mladAccount == null || "".equals(mladAccount))
				{
					continue;
				}
				HashMap childMap = (HashMap) childList.get(listIndex);
				listIndex++;

				// 画面データリスト.メールアドレスドメイン ← Eメール登録確認マップ.Ｅメール情報登録確認リスト.メールアドレスドメイン
				if (childMap != null) {
					subbean.sendMessageString("メールアドレスドメイン", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("mlad_domain"));
				} else {
					subbean.sendMessageString("メールアドレスドメイン", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				// 画面データリスト.メールエイリアス ← Eメール登録確認マップ.Ｅメール情報登録確認リスト.メールエイリアス
				if (childMap != null) {
					subbean.sendMessageString("メールエイリアス", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("mailalias"));
				} else {
					subbean.sendMessageString("メールエイリアス", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				// 画面データリスト.ＰＯＰＩＤ ← Eメール登録確認マップ.Ｅメール情報登録確認リスト.ＰＯＰＩＤ
				if (childMap != null) {
					subbean.sendMessageString("ＰＯＰＩＤ", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("popid"));
				} else {
					subbean.sendMessageString("ＰＯＰＩＤ", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
			}
		}


		return bean;
	}


}

