/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：顧客契約
*	モジュール名	：KKSV0229_KKSV0229OPDBMapper
*	ソースファイル名：KKSV0229_KKSV0229OPDBMapper.java
*	作成者			：伊吹
*	日付			：2011年11月01日
*＜機能概要＞
*	BP（割引サービス契約一覧照会初期表示）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/11/01	伊吹		新規作成
*   v3.01.00    2012/07/13   富士通     IT2-2012-0001262
*   v4.00.00    2012/11/13   富士通     IT1-2012-0001709 ファミリーパック、ルータ出力対応
*   v4.01.00    2012/12/17   富士通     IT2-2012-0002122 マンション名出力対応
*   v4.02.00    2013/03/01   富士通     IT1-2012-0002413_共通ヘッダ予約状況出力対応
*   v10.00.00   2014/10/03   FJ)岡田    ANK-2260-00-00_前月解約出力対応
*   v13.00.00   2015/02/03   FJ)福岡    ANK-2398-00-00_お客さまIDに紐づく割引出力対応
*   v18.00.00   2015/08/11	FJ) 河邊   【ANK-2631-00-00】ワンストップ案件（ＳＴＥＰ１）※koptWebBからkoptWebAへコピー
*   v18.00.01   2015/08/28   FJ)森杉   【ANK-2631-00-00】ワンストップ案件（ＳＴＥＰ１）解約・変更分の処理を追加
*   v26.00.00   2016/06/01   FJ) 三宅   ANK-2687-00-00 プレミアムサポート施策
*   v28.00.00	2016/12/08	 FJ)三原	ANK-3034-00-00【eoプレミアムクラブ】eo画面へのチケット残枚数追加表示
*   v37.00.00   2018/03/15   FJ)三原    ANK-3366-00-00_eo光設備卸対応
*   v37.00.01   2018/05/21   FJ)謝      【ANK-3383-00-00】標準工事費分割請求（STEP2）
*   v37.00.00   2018/06/01   FJ)謝      【ANK-3383-00-00】標準工事費分割請求（STEP2） ※koptWebBとの資産同期
*   v38.00.00   2018/07/13   FJ)麻生    ANK-3436-00-00_eo光×eo電気×mineoセット割対応
*   v37.00.02   2018/07/13   FJ)藤本    【ANK-3383-09-00】標準工事費分割請求（STEP2）自治体特別キャンペーン登録/解約時チェック
*   v44.00.00	2019/05/21   FJ）澤田	【ANK-3610-00-00】CASHPOST登録
*   v48.00.00	2020/01/31	 FJ) 吉田	【OM-2019-0000973】eo電気を選択してサービス契約照会画面で割引情報タブを選択するとシステムエラー
*   v49.00.00	2020/06/21	 FJ) 荒木	【ANK-3840-00-00】テレビリースサービス新規申込対応
*   v57.00.00	2022/01/19	 FJ)杉本	【ANK-4075-00-00】マンション卸回線(WI-FIスキーム)の不備対応
*   v66.00.00	2023/03/08	 FJ)吉川	【ANK-4307-00-00】【eo定期】プレミアムクラブリニューアル対応
**********************************************************************/
package eo.web.webview.mapping;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CVector;
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.JKKStrConst;
import eo.common.util.JCCFrameworkException;
import eo.common.util.JKKStringUtil;
import eo.web.webview.commonOneStop.KKW01021SFConst;
import eo.web.webview.commonOneStop.KKW01030SFConst;
import eo.web.webview.commonOneStop.KKW01033SFConst;
import eo.web.webview.commonOneStop.JKKCommonConst;

import eo.web.webview.KKA15201SF.KKW01024SFConst;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class KKSV0229_KKSV0229OPDBMapper {
	
	/**
	 * コンストラクタ
	 */
	public KKSV0229_KKSV0229OPDBMapper(){
	}
	

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：割引サービス契約割引情報照会
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV022901CCKKW01021(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
		
		if(null==bean || bean.length != 1){
			return null;
		}
		X31SDataBeanAccess sfBean=bean[0];
		// SFBean書き出し
		BeanMap beanMap = Mover.getBeanMapFromDataBean(sfBean, KKW01021SFConst.SFBEAN);
		// 顧客契約引継リスト
		ArrayList<BeanMap> custKeiHktgiList = (ArrayList<BeanMap>)beanMap.get(JKKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST);
		BeanMap custKeiHktgi=custKeiHktgiList.get(0);
		
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);
		
		// ＳＹＳＩＤ
		parentMap.put("sysid",custKeiHktgi.take(JKKCommonConst.HKTGI_SYSID));
		// サービス契約番号
		parentMap.put("svc_kei_no",custKeiHktgi.take(JKKCommonConst.HKTGI_SVC_KEI_NO));
		// 異動区分
		parentMap.put("ido_div",custKeiHktgi.take(JKKCommonConst.HKTGI_IDO_DIV));

		outputMap.put("KKSV022901CC", parentMap);
						
		return outputMap;
	}

// ANK-2631-00-00 ADD START 【ワンストップ用】
	/**
	 * 上りマッピングをする
	 * @param bean　[0]：割引サービス契約割引情報照会
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV022901CCKKW01024(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
		
		if(null==bean || bean.length != 1){
			return null;
		}
		X31SDataBeanAccess sfBean=bean[0];
		// SFBean書き出し
		BeanMap beanMap = Mover.getBeanMapFromDataBean(sfBean, KKW01024SFConst.SFBEAN);
		// 顧客契約引継リスト
		ArrayList<BeanMap> custKeiHktgiList = (ArrayList<BeanMap>)beanMap.get(JKKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST);
		BeanMap custKeiHktgi=custKeiHktgiList.get(0);
		
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);
		
		// ＳＹＳＩＤ
		parentMap.put("sysid",custKeiHktgi.take(JKKCommonConst.HKTGI_SYSID));
		// サービス契約番号
		parentMap.put("svc_kei_no",custKeiHktgi.take(JKKCommonConst.HKTGI_SVC_KEI_NO));
		// 異動区分
		parentMap.put("ido_div",custKeiHktgi.take(JKKCommonConst.HKTGI_IDO_DIV));

		// 選択チェンジ
		parentMap.put("selectedChange","01");

		
		outputMap.put("KKSV022901CC", parentMap);
						
		return outputMap;
	}
// ANK-2631-00-00 ADD END 【ワンストップ用】

// ANK-2631-00-00 MOD START 【ワンストップ用】
//	// ++++++++++++++ 2012/07/13 v3.02.00 追加開始 ++++++++++++++++ //
//	/**
//	 * 上りマッピングをする
//	 * @param bean　[0]：割引サービス契約割引情報照会
//	 * @param outputMap
//	 * @param func_code　機能コード
//	 */
//	@SuppressWarnings("unchecked")
//	public HashMap setKKSV022901CCKKW01030(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
//		
//		if(null==bean || bean.length != 1){
//			return null;
//		}
//		X31SDataBeanAccess sfBean=bean[0];
//		// SFBean書き出し
//		BeanMap beanMap = Mover.getBeanMapFromDataBean(sfBean, KKW01030SFConst.SFBEAN);
//		// 顧客契約引継リスト
//		ArrayList<BeanMap> custKeiHktgiList = (ArrayList<BeanMap>)beanMap.get(JKKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST);
//		BeanMap custKeiHktgi=custKeiHktgiList.get(0);
//		
//		HashMap<String, Object> parentMap = new HashMap<String, Object>();
//
//		// 共通情報のマッピング
//		parentMap.put("func_code", func_code);
//		
//		// ＳＹＳＩＤ
//		parentMap.put("sysid",custKeiHktgi.take(JKKCommonConst.HKTGI_SYSID));
//		// サービス契約番号
//		parentMap.put("svc_kei_no",custKeiHktgi.take(JKKCommonConst.HKTGI_SVC_KEI_NO));
//		// 異動区分
//		parentMap.put("ido_div",custKeiHktgi.take(JKKCommonConst.HKTGI_IDO_DIV));
//
//		outputMap.put("KKSV022901CC", parentMap);
//						
//		return outputMap;
//	}
//	// ++++++++++++++ 2012/07/13 v3.02.00 追加開始 ++++++++++++++++ //
	
	
	/**
	 * 上りマッピングをする
	 * @param bean　[0]：割引サービス契約割引情報照会
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV022901CCKKW01030(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
		
		if(null==bean || bean.length != 1){
			return null;
		}
		X31SDataBeanAccess sfBean=bean[0];
		// SFBean書き出し
		BeanMap beanMap = Mover.getBeanMapFromDataBean(sfBean, KKW01030SFConst.SFBEAN);
		// 顧客契約引継リスト
		ArrayList<BeanMap> custKeiHktgiList = (ArrayList<BeanMap>)beanMap.get(JKKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST);
		BeanMap custKeiHktgi=custKeiHktgiList.get(0);
		
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);
		
		// ＳＹＳＩＤ
		parentMap.put("sysid",custKeiHktgi.take(JKKCommonConst.HKTGI_SYSID));
		// サービス契約番号
		parentMap.put("svc_kei_no",custKeiHktgi.take(JKKCommonConst.HKTGI_SVC_KEI_NO));
		// 異動区分
		parentMap.put("ido_div",custKeiHktgi.take(JKKCommonConst.HKTGI_IDO_DIV));

		// 選択内容
		parentMap.put("selectedChange","01");

		
		outputMap.put("KKSV022901CC", parentMap);
						
		return outputMap;
	}
// ANK-2631-00-00 MOD END 【ワンストップ用】

	
	/**
	 * 上りマッピングをする
	 * @param bean　[0]：割引サービス契約割引情報照会
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV022901CCKKW01033(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
		
		if(null==bean || bean.length != 1){
			return null;
		}
		X31SDataBeanAccess sfBean=bean[0];
		// SFBean書き出し
		BeanMap beanMap = Mover.getBeanMapFromDataBean(sfBean, KKW01033SFConst.SFBEAN);
		// 顧客契約引継リスト
		ArrayList<BeanMap> custKeiHktgiList = (ArrayList<BeanMap>)beanMap.get(JKKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST);
		BeanMap custKeiHktgi=custKeiHktgiList.get(0);
		
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// ＳＹＳＩＤ
		parentMap.put("sysid",custKeiHktgi.take(JKKCommonConst.HKTGI_SYSID));
		// サービス契約番号
		parentMap.put("svc_kei_no",custKeiHktgi.take(JKKCommonConst.HKTGI_SVC_KEI_NO));
		// 異動区分
		parentMap.put("ido_div",custKeiHktgi.take(JKKCommonConst.HKTGI_IDO_DIV));
		
// v13.00.00 ADD START
		// 選択変更
		parentMap.put("selectedChange", beanMap.take("選択変更"));
// v13.00.00 ADD END
		
		outputMap.put("KKSV022901CC", parentMap);
						
		return outputMap;
	}

	/**
	 * 下りマッピング
	 * @param bean　[0]：割引サービス契約割引情報照会
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getKKSV022902CCKKW01021(X31SDataBeanAccess[] bean, HashMap outputMap){
		HashMap<?,?> contentMap=(HashMap<?, ?>)outputMap.get("KKSV022902CC");
		
		X31SDataBeanAccess sfBean=bean[0];
		// SFBean書き出し
		BeanMap beanMap = Mover.getBeanMapFromDataBean(sfBean, KKW01021SFConst.SFBEAN);
		ArrayList<BeanMap> custs=(ArrayList<BeanMap>)beanMap.take(KKW01021SFConst.CUST);
		BeanMap cust=custs.get(0);
		
		cust.put(KKW01021SFConst.SYSID_02,(String)contentMap.get("sysid"));
		cust.put(KKW01021SFConst.CUST_NM_02,(String)contentMap.get("cust_nm"));
		cust.put(KKW01021SFConst.KEISHA_STATE_NM_02,(String)contentMap.get("keisha_state_nm"));
		cust.put(KKW01021SFConst.KEISHA_CITY_NM_02,(String)contentMap.get("keisha_city_nm"));
		cust.put(KKW01021SFConst.KEISHA_OAZTSU_NM_02,(String)contentMap.get("keisha_oaztsu_nm"));
		cust.put(KKW01021SFConst.KEISHA_AZCHO_NM_02,(String)contentMap.get("keisha_azcho_nm"));
		cust.put(KKW01021SFConst.KEISHA_BNCHIGO_02,(String)contentMap.get("keisha_bnchigo"));
		
		// TODO
		cust.put(KKW01021SFConst.KEISHA_ADRTTM_02,(String)contentMap.get("keisha_adrttm"));
		cust.put(KKW01021SFConst.KEISHA_ADRRM_02,(String)contentMap.get("keisha_adrrm"));
		
		cust.put(KKW01021SFConst.KEISHA_TELNO_02,(String)contentMap.get("keisha_telno"));

		// SFBean書き戻し
		Mover.setBeanMapToDataBean(beanMap, sfBean);
		return bean;
	}


	/**
	 * 下りマッピング
	 * @param bean　[0]：割引サービス契約割引情報照会
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getKKSV022902CCKKW01033(X31SDataBeanAccess[] bean, HashMap outputMap){
		HashMap<?,?> contentMap=(HashMap<?, ?>)outputMap.get("KKSV022902CC");
		
		X31SDataBeanAccess sfBean=bean[0];
		// SFBean書き出し
		BeanMap beanMap = Mover.getBeanMapFromDataBean(sfBean, KKW01033SFConst.SFBEAN);
		ArrayList<BeanMap> custs=(ArrayList<BeanMap>)beanMap.take(KKW01033SFConst.CUST);
		BeanMap cust=custs.get(0);
		
		cust.put(KKW01033SFConst.SYSID_02,(String)contentMap.get("sysid"));
		cust.put(KKW01033SFConst.CUST_NM_02,(String)contentMap.get("cust_nm"));
		cust.put(KKW01033SFConst.KEISHA_STATE_NM_02,(String)contentMap.get("keisha_state_nm"));
		cust.put(KKW01033SFConst.KEISHA_CITY_NM_02,(String)contentMap.get("keisha_city_nm"));
		cust.put(KKW01033SFConst.KEISHA_OAZTSU_NM_02,(String)contentMap.get("keisha_oaztsu_nm"));
		cust.put(KKW01033SFConst.KEISHA_AZCHO_NM_02,(String)contentMap.get("keisha_azcho_nm"));
		cust.put(KKW01033SFConst.KEISHA_BNCHIGO_02,(String)contentMap.get("keisha_bnchigo"));
		cust.put(KKW01033SFConst.KEISHA_TELNO_02,(String)contentMap.get("keisha_telno"));

		cust.put(KKW01033SFConst.SVC_KEI_STAT_02,(String)contentMap.get("svc_kei_stat"));
		cust.put(KKW01033SFConst.SVC_KEI_STAT_NM_02,(String)contentMap.get("svc_kei_stat_nm"));
		cust.put(KKW01033SFConst.IDO_DIV_02,(String)contentMap.get("ido_div"));
		cust.put(KKW01033SFConst.IDO_DIV_NM_02,(String)contentMap.get("ido_div_nm"));
		cust.put(KKW01033SFConst.MANSION_ID_02,(String)contentMap.get("mansion_id"));
		cust.put(KKW01033SFConst.MANSION_NM_02,(String)contentMap.get("mansion_nm"));
		cust.put(KKW01033SFConst.KEISHA_ADRTTM_02,(String)contentMap.get("keisha_adrttm"));
		cust.put(KKW01033SFConst.KEISHA_ADRRM_02,(String)contentMap.get("keisha_adrrm"));
		cust.put(KKW01033SFConst.SVC_KEI_NO_02,(String)contentMap.get("svc_kei_no"));
		cust.put(KKW01033SFConst.SEIKY_KEI_NO_02,(String)contentMap.get("seiky_kei_no"));
		cust.put(KKW01033SFConst.EOID_02,(String)contentMap.get("eoid"));
		cust.put(KKW01033SFConst.PRC_GRP_CD_02,(String)contentMap.get("prc_grp_cd"));
		cust.put(KKW01033SFConst.PRC_GRP_NM_02,(String)contentMap.get("prc_grp_nm"));
		cust.put(KKW01033SFConst.PCRS_CD_02,(String)contentMap.get("pcrs_cd"));
		cust.put(KKW01033SFConst.PCRS_NM_02,(String)contentMap.get("pplan_nm"));
		cust.put(KKW01033SFConst.KKTK_SVC_KEI_NO_02,(String)contentMap.get("kktk_svc_kei_no"));
		cust.put(KKW01033SFConst.FAMILY_PACK_UM_02,(String)contentMap.get("family_pack_um"));
		// 2012/07/01 修正
		cust.put(KKW01033SFConst.TOKUSOKU_STAT_02,(String)contentMap.get("tokuSokuStatus"));
		// 2012/11/13 追加
		cust.put(KKW01033SFConst.ROUTER_SBT_02,(String)contentMap.get("router_sbt"));
		
// ++++++++++++++ 2012/12/17 v4.01.00 IT1-2012-0002122 追加開始 ++++++++++++++++ //
		
		cust.put(KKW01033SFConst.P_ID_02,   (String)contentMap.get("pid"));
		cust.put(KKW01033SFConst.CAT_ID_02, (String)contentMap.get("catid"));
		
// ++++++++++++++ 2012/12/17 v4.01.00 IT1-2012-0002122 追加終了 ++++++++++++++++ //
		
/* v4.02.00 add start       ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
		
		cust.put(KKW01033SFConst.RSV_JOKYO_02, (String)contentMap.get("rsv_jyokyo"));
		
/* v4.02.00 add end         ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
// v26.00.00 ADD START
		cust.put(KKW01033SFConst.RANK_NM_02,(String)contentMap.get("member_rank"));
// v26.00.00 ADD END
// ANK-3034-00-00 ADD START
// ANK-4307-00-00 MOD START
		//cust.put(KKW01033SFConst.TIC_NUM_02,(String)contentMap.get("tic_num"));
// ANK-3034-00-00 ADD END
		//保有eoポイント数
		cust.put(KKW01033SFConst.TIC_NUM_02,(String)contentMap.get("total_hoyu_pt_su"));
// ANK-4307-00-00 MOD END

		// ANK-3366-00-00 ADD START
		// 卸先事業者名
		cust.put(KKW01033SFConst.ORSJGS_NM_02, (String)contentMap.get("orsjgs_nm"));
		// ANK-3366-00-00 ADD END
// ANK-3840-00-00 ADD START
		// 定額サービス契約有無
		cust.put(KKW01033SFConst.TEGAK_SVC_UM_02, (String)contentMap.get("tegak_svc_um"));
// ANK-3840-00-00 ADD END
		// ANK-4075-00-00 ADD START
		// スキームタイプ名
		cust.put(KKW01033SFConst.SCM_TYPE_NM_02, (String)contentMap.get("scm_type_nm"));
		// スキーム事業者名
		cust.put(KKW01033SFConst.SCM_JGS_NM_02, (String)contentMap.get("scm_jgs_nm"));
		// ANK-4075-00-00 ADD END

		// SFBean書き戻し
		Mover.setBeanMapToDataBean(beanMap, sfBean);

		return bean;
	}

	/**
	 * 下りマッピング
	 * @param bean　[0]：割引サービス契約割引情報照会
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getKKSV022903CC(X31SDataBeanAccess[] bean, HashMap outputMap){

		HashMap parentMap = null;
		if(outputMap.containsKey("KKSV022903CC")){
			parentMap = (HashMap)outputMap.get("KKSV022903CC");
		}

		ArrayList childList = null;
		

		X31SDataBeanAccessArray listKKSV022903CC_campaign_icrn_list_view_list = bean[0].getDataBeanArray("キャンペーン一覧");
		
// v13.00.00 ADD START
		
		// キャンペーン一覧の初期化：画面リロード時のセッションは不要である為.
		for(int i = 0; i < listKKSV022903CC_campaign_icrn_list_view_list.getCount(); i++) {
			listKKSV022903CC_campaign_icrn_list_view_list.removeDataBean(i);
			i--;
		}
// v13.00.00 ADD END
		
		childList = null;
		if(parentMap.containsKey("list_view_list")){
			childList = (ArrayList)parentMap.get("list_view_list");

			for(int i = 0; i < childList.size(); i++){
				X31SDataBeanAccess subbean = null;
				if(listKKSV022903CC_campaign_icrn_list_view_list.getCount() -1 >= i){
					subbean = listKKSV022903CC_campaign_icrn_list_view_list.getDataBean(i);
				}else{
					subbean = listKKSV022903CC_campaign_icrn_list_view_list.addDataBean();
				}
				HashMap childMap = (HashMap)childList.get(i);
			
				// キャンペーン一覧.番号 ← 一覧情報.一覧情報明細.番号
				subbean.sendMessageString("番号", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("no"));
				// キャンペーン一覧.契約種別 ← 一覧情報.一覧情報明細.契約種別
				subbean.sendMessageString("契約種別", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("kei_kind"));
				// キャンペーン一覧.ステータス ← 一覧情報.一覧情報明細.ステータス
				subbean.sendMessageString("ステータス", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("stat"));
				// キャンペーン一覧.ステータス名称 ← 一覧情報.一覧情報明細.ステータス名称
				subbean.sendMessageString("ステータス名称", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("stat_nm"));
				// キャンペーン一覧.タイプコード ← 一覧情報.一覧情報明細.タイプコード
				subbean.sendMessageString("タイプコード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("type_cd"));
				// キャンペーン一覧.タイプコード名称 ← 一覧情報.一覧情報明細.タイプコード名称
				subbean.sendMessageString("タイプコード名称", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("type_cd_nm"));
				// キャンペーン一覧.キャンペーンコード ← 一覧情報.一覧情報明細.キャンペーンコード
				subbean.sendMessageString("キャンペーンコード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("campaign_cd"));
				// キャンペーン一覧.キャンペーン名 ← 一覧情報.一覧情報明細.キャンペーン名
				subbean.sendMessageString("キャンペーン名", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("campaign_nm"));
				// キャンペーン一覧.申込年月日 ← 一覧情報.一覧情報明細.申込年月日
				subbean.sendMessageString("申込年月日", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("mskm_ymd"));
				// キャンペーン一覧.開始年月日 ← 一覧情報.一覧情報明細.開始年月日
				subbean.sendMessageString("開始年月日", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("staymd"));
				// キャンペーン一覧.終了年月日 ← 一覧情報.一覧情報明細.終了年月日
				subbean.sendMessageString("終了年月日", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("endymd"));
				// キャンペーン一覧.割引サービスコード ← 一覧情報.一覧情報明細.割引サービスコード
				// ++++++++++++++ 2012/07/13 v3.02.00 変更開始 ++++++++++++++++ //
				subbean.sendMessageString("割引サービスコード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("wrib_svc_cd"));
				// キャンペーン一覧.即時適用フラグ名称 ← 一覧情報.即時適用フラグ名称
				subbean.sendMessageString("即時適用フラグ名称", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("aply_jun_nm"));

				// ++++++++++++++ 2012/07/13 v3.02.00 変更開始 ++++++++++++++++ //
				subbean.sendMessageString("課金要否フラグ", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("kakin_yohi"));
//v10.00.00 ADD START				
				subbean.sendMessageString("前月解約フラグ", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("wrib_svc_kei_zengetu_kaiyaku_flg"));
//v10.00.00 ADD END
				// ANK-3383-09-00 ADD START
				subbean.sendMessageString("同一回線フラグ", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("same_kaisen_flg"));
				// ANK-3383-09-00 ADD END
			}
		}


		return bean;
	}
// ANK-3383-00-00 ADD START
	/**
	 * 下りマッピング
	 * @param bean　[0]：割引サービス解約・キャンセル選択
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getKKSV022904CC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{
		HashMap parentMap = null;
		if (outputMap.containsKey("KKSV022904CC"))
		{
			parentMap = (HashMap)outputMap.get("KKSV022904CC");
		}
		
		ArrayList childList = null;
		
		X31SDataBeanAccessArray listKKSV022904CC_jct_wrib_svc_cd_list_jct_wrib_svc_cd_list = bean[0].getDataBeanArray("自治体割引サービスコードリスト");
		childList = null;
		if (listKKSV022904CC_jct_wrib_svc_cd_list_jct_wrib_svc_cd_list != null && parentMap != null && parentMap.containsKey("jct_wrib_svc_cd_list"))
		{
			childList = (ArrayList)parentMap.get("jct_wrib_svc_cd_list");
			
			for (int i = 0; i < childList.size(); i++)
			{
				X31SDataBeanAccess subbean = null;
				if (listKKSV022904CC_jct_wrib_svc_cd_list_jct_wrib_svc_cd_list.getCount() -1 >= i)
				{
					subbean = listKKSV022904CC_jct_wrib_svc_cd_list_jct_wrib_svc_cd_list.getDataBean(i);
				}
				else
				{
					subbean = listKKSV022904CC_jct_wrib_svc_cd_list_jct_wrib_svc_cd_list.addDataBean();
				}
				HashMap childMap = (HashMap)childList.get(i);
				if (subbean == null)
				{
					continue;
				}
				
				// 自治体割引サービスコードリスト.自治体割引サービスコード ← 自治体割引サービス情報取得CCマップ.自治体割引サービスコードリスト.自治体割引サービスコード
				if (childMap != null)
				{
					subbean.sendMessageString("自治体割引サービスコード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("jct_wrib_svc_cd"));
				}
				else
				{
					subbean.sendMessageString("自治体割引サービスコード", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
			}
		}
		
		return bean;
	}
// ANK-3383-00-00 ADD END
	// ANK-3436-00-00 ADD START
	/**
	 * 下りマッピング
	 * @param bean　[0]：割引サービス契約割引情報照会
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getKKSV022905CC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{
		HashMap parentMap = null;
		if (outputMap.containsKey("KKSV022905CC"))
		{
			parentMap = (HashMap)outputMap.get("KKSV022905CC");
		}
		
		if (parentMap != null)
		{
			bean[0].sendMessageString("加入契約支払方式コード", X31CWebConst.DATABEAN_SET_VALUE, (String)parentMap.get("kanyu_kei_pay_hoshiki_cd"));
		}
		else
		{
			bean[0].sendMessageString("加入契約支払方式コード", X31CWebConst.DATABEAN_SET_VALUE, new String());
		}
		
		return bean;
	}
	// ANK-3436-00-00 ADD END
	// ANK-3610-00-00 ADD START
	/**
	 * 下りマッピング
	 * @param bean　[0]：割引サービス契約割引情報照会
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getKKSV022906CC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{
		HashMap parentMap = null;
		if (outputMap.containsKey("KKSV022906CC"))
		{
			parentMap = (HashMap)outputMap.get("KKSV022906CC");
		}
		//CASHPOST登録
		if (!JKKStringUtil.isNullBlank((String)parentMap.get("cashpost_add")))
		{
			bean[0].sendMessageString("ＣＡＳＨＰＯＳＴ登録", X31CWebConst.DATABEAN_SET_VALUE, JKKStrConst.CD_DIV_NM_UM_ARI);
		}
		else
		{
			bean[0].sendMessageString("ＣＡＳＨＰＯＳＴ登録", X31CWebConst.DATABEAN_SET_VALUE, JKKStrConst.CD_DIV_NM_UM_NASHI);
		}
		//CASHPOST送信
		if (!JKKStringUtil.isNullBlank((String)parentMap.get("cashpost_sosin")))
		{
			bean[0].sendMessageString("ＣＡＳＨＰＯＳＴ送信", X31CWebConst.DATABEAN_SET_VALUE, JKKStrConst.CD_DIV_NM_UM_ARI);
		}
		else
		{
			bean[0].sendMessageString("ＣＡＳＨＰＯＳＴ送信", X31CWebConst.DATABEAN_SET_VALUE, JKKStrConst.CD_DIV_NM_UM_NASHI);
		}
		
		return bean;
	}
	// ANK-3610-00-00 ADD END
	// OM-2019-0000973 ADD START
	/**
	 * 下りマッピング
	 * @param bean　[0]：割引サービス契約割引情報照会
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getKKSV022907CC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{
		HashMap parentMap = null;
		if (outputMap.containsKey("KKSV022907CC"))
		{
			parentMap = (HashMap)outputMap.get("KKSV022907CC");
		}
		
		if (!JKKStringUtil.isNullBlank((String)parentMap.get("jct_wrib_kisn_get_ffg")))
		{
			bean[0].sendMessageString("自治体割引回線取得フラグ", X31CWebConst.DATABEAN_SET_VALUE, (String)parentMap.get("jct_wrib_kisn_get_ffg"));
		}
		else
		{
			bean[0].sendMessageString("自治体割引回線取得フラグ", X31CWebConst.DATABEAN_SET_VALUE, new String());
		}
		
		return bean;
	}
	// OM-2019-0000973 ADD END
}

@SuppressWarnings("serial")
class BeanMap extends HashMap<String, Object>
{
	static final int DEFAULT_HASH_SIZE=50;

	public BeanMap(HashMap<String, Object> beanMap)
	{
		super(beanMap);
	}

	public BeanMap()
	{
		super(DEFAULT_HASH_SIZE);
	}

	public BeanMap pair(String item, Object value)
	{
		super.put(item, value);
		return this;
	}

	public Object take(String item)
	{
		return super.get(item);
	}
}

class Mover
{

	enum ValueType
	{
		NULL(null), ARRAY_LIST(ArrayList.class), STRING(String.class), LONG(Long.class), BOOLEAN(Boolean.class), STRINGS(
				String[].class), LONGS(Long[].class), BOOLEANS(Boolean[].class), ;

		Class<?> type;

		private ValueType(Class<?> type)
		{
			this.type = type;
		}

		public boolean isMatch(Object value)
		{
			if (null == value)
			{
				return (this.equals(NULL));
			}
			if (this.equals(NULL))
			{
				return false;
			}
			else
			{
				return this.type.isInstance(value);
			}
		}

		static public ValueType resolve(Object value)
		{
			ValueType[] types = ValueType.values();
			for (ValueType type : types)
			{
				if (type.isMatch(value))
				{
					return type;
				}
			}
			return ValueType.NULL;
		}
	}

	enum StructureType
	{
		NULL(null), DATABEAN(Object[].class), STRING(String.class), LONG(Long.class), BOOLEAN(Boolean.class), STRINGS(
				String[].class), LONGS(Long[].class), BOOLEANS(Boolean[].class), ;

		Class<?> type;

		private StructureType(Class<?> type)
		{
			this.type = type;
		}

		public boolean isMatch(Object value)
		{
			if (null == value)
			{
				return (this.equals(NULL));
			}
			if (this.equals(NULL))
			{
				return false;
			}
			if (value instanceof Class<?>)
			{
				return this.type.equals(value);
			}
			else
			{
				return this.type.equals(value.getClass());
			}
		}

		static public StructureType resolve(Object value)
		{
			StructureType[] types = StructureType.values();
			for (StructureType type : types)
			{
				if (type.isMatch(value))
				{
					return type;
				}
			}
			return StructureType.NULL;
		}
	}

	public static void setString(X31SDataBeanAccess bean, String item, String value)
	{
		bean.sendMessageString(item, X31CWebConst.DATABEAN_SET_VALUE, value);
	}

	public static void setLong(X31SDataBeanAccess bean, String item, Long value)
	{
		bean.sendMessageLong(item, X31CWebConst.DATABEAN_SET_VALUE, value);
	}

	public static void setBoolean(X31SDataBeanAccess bean, String item, Boolean value)
	{
		bean.sendMessageBoolean(item, X31CWebConst.DATABEAN_SET_VALUE, value);
	}

	public static void setStringArrayAt(X31SDataBeanAccess bean, String item, int index, String value)
	{
		bean.sendMessageString(item, X31CWebConst.DATABEAN_SET_VALUE, index, value);
	}

	public static void setLongAt(X31SDataBeanAccess bean, String item, int index, Long value)
	{
		bean.sendMessageLong(item, X31CWebConst.DATABEAN_SET_VALUE, index, value);
	}

	public static void setBooleanAt(X31SDataBeanAccess bean, String item, int index, Boolean value)
	{
		bean.sendMessageBoolean(item, X31CWebConst.DATABEAN_SET_VALUE, index, value);
	}

	public static void setStringArray(X31SDataBeanAccess bean, String item, String[] values)
	{
		X31CVector<String> vector = new X31CVector<String>();
		for (String value : values)
		{
			vector.add(value);
		}
		bean.sendMessageStringArray(item, X31CWebConst.DATABEAN_SET_DEF_VALUE, vector);
	}

	public static void setLongArray(X31SDataBeanAccess bean, String item, Long[] values)
	{
		X31CVector<Long> vector = new X31CVector<Long>();
		for (Long value : values)
		{
			vector.add(value);
		}
		bean.sendMessageLongArray(item, X31CWebConst.DATABEAN_SET_DEF_VALUE, vector);
	}

	public static void setBooleanArray(X31SDataBeanAccess bean, String item, Boolean[] values)
	{
		X31CVector<Boolean> vector = new X31CVector<Boolean>();
		for (Boolean value : values)
		{
			vector.add(value);
		}
		bean.sendMessageBooleanArray(item, X31CWebConst.DATABEAN_SET_DEF_VALUE, vector);
	}

	public static void clearBeanArray(X31SDataBeanAccess bean, String item)
	{
		X31SDataBeanAccessArray beanArray = bean.getDataBeanArray(item);
		beanArray.clearArray();
	}

	public static X31SDataBeanAccessArray getBeanArray(X31SDataBeanAccess bean, String item)
	{
		return bean.getDataBeanArray(item);
	}

	public static String getString(X31SDataBeanAccess bean, String item)
	{
		return bean.sendMessageString(item, X31CWebConst.DATABEAN_GET_VALUE);
	}

	public static Long getLong(X31SDataBeanAccess bean, String item)
	{
		return bean.sendMessageLong(item, X31CWebConst.DATABEAN_GET_VALUE);
	}

	public static Boolean getBoolean(X31SDataBeanAccess bean, String item)
	{
		return bean.sendMessageBoolean(item, X31CWebConst.DATABEAN_GET_VALUE);
	}

	public static String getStringAt(X31SDataBeanAccess bean, String item, int index)
	{
		return bean.sendMessageString(item, X31CWebConst.DATABEAN_GET_VALUE, index);
	}

	public static Long getLongAt(X31SDataBeanAccess bean, String item, int index)
	{
		return bean.sendMessageLong(item, X31CWebConst.DATABEAN_GET_VALUE, index);
	}

	public static Boolean getBooleanAt(X31SDataBeanAccess bean, String item, int index)
	{
		return bean.sendMessageBoolean(item, X31CWebConst.DATABEAN_GET_VALUE, index);
	}

	public static int getArrayCount(X31SDataBeanAccess bean, String item)
	{
		Integer count = (Integer)bean.sendMessage(item, X31CWebConst.DATABEAN_GET_COUNT);
		return count.intValue();
	}

	public static String[] getStringArray(X31SDataBeanAccess bean, String item)
	{
		int count = getArrayCount(bean, item);
		ArrayList<String> result = new ArrayList<String>(count);
		for (int i = 0; i < count; i++)
		{
			String element = getStringAt(bean, item, i);
			result.add(element);
		}
		return (String[])result.toArray(new String[0]);
	}

	public static Long[] getLongArray(X31SDataBeanAccess bean, String item)
	{
		int count = getArrayCount(bean, item);
		ArrayList<Long> result = new ArrayList<Long>(count);
		for (int i = 0; i < count; i++)
		{
			Long element = getLongAt(bean, item, i);
			result.add(element);
		}
		return (Long[])result.toArray(new Long[0]);
	}

	public static Boolean[] getBooleanArray(X31SDataBeanAccess bean, String item)
	{
		int count = getArrayCount(bean, item);
		ArrayList<Boolean> result = new ArrayList<Boolean>(count);
		for (int i = 0; i < count; i++)
		{
			Boolean element = getBooleanAt(bean, item, i);
			result.add(element);
		}
		return (Boolean[])result.toArray(new Boolean[0]);
	}

	public static X31SDataBeanAccess createBeanFromArray(X31SDataBeanAccessArray beanArray)
	{
		return beanArray.addDataBean();
	}

	public static BeanMap getBeanMapFromDataBean(X31SDataBeanAccess bean, Object[] structure)
	{
		BeanMap result = new BeanMap();
		for (Object node : structure)
		{
			Object[] pair = (Object[])node;
			String item = (String)pair[0];
			Object value = pair[1];

			StructureType type = StructureType.resolve(value);

			switch (type)
			{
			case DATABEAN:
			{
				X31SDataBeanAccessArray beanArray = Mover.getBeanArray(bean, item);
				ArrayList<BeanMap> content = getBeanMapListFromDataBeanArray(beanArray, (Object[])value);
				result.pair(item, content);
			}
				break;
			case STRING:
			{
				String content = Mover.getString(bean, item);
				result.pair(item, content);
			}
				break;
			case LONG:
			{
				Long content = Mover.getLong(bean, item);
				result.pair(item, content);
			}
				break;
			case BOOLEAN:
			{
				Boolean content = Mover.getBoolean(bean, item);
				result.pair(item, content);
			}
				break;
			case STRINGS:
			{
				String[] content = Mover.getStringArray(bean, item);
				result.pair(item, content);
			}
				break;
			case LONGS:
			{
				Long[] content = Mover.getLongArray(bean, item);
				result.pair(item, content);
			}
				break;
			case BOOLEANS:
			{
				Boolean[] content = Mover.getBooleanArray(bean, item);
				result.pair(item, content);
			}
				break;

			default:
				break;
			}
		}
		return result;
	}

	public static ArrayList<BeanMap> getBeanMapListFromDataBeanArray(X31SDataBeanAccessArray beanArray, Object[] structure)
	{
		int count = beanArray.getCount().intValue();
		ArrayList<BeanMap> result = new ArrayList<BeanMap>(count);
		for (int i = 0; i < count; i++)
		{
			X31SDataBeanAccess bean = beanArray.getDataBean(i);
			BeanMap content = getBeanMapFromDataBean(bean, structure);
			result.add(content);
		}
		return result;
	}

	@SuppressWarnings("unchecked")
	public static void setBeanMapToDataBean(BeanMap beanMap, X31SDataBeanAccess bean)
	{
		for (String key : beanMap.keySet())
		{
			Object value = beanMap.get(key);
			ValueType type = ValueType.resolve(value);

			switch (type)
			{
			case NULL:
				break;
			case STRING:
				Mover.setString(bean, key, (String)value);
				break;
			case LONG:
				Mover.setLong(bean, key, (Long)value);
				break;
			case BOOLEAN:
				Mover.setBoolean(bean, key, (Boolean)value);
				break;
			case STRINGS:
			{
				X31CVector<String> vec = new X31CVector<String>();
				for (String s : (String[])value)
				{
					vec.add(s);
				}
				bean.sendMessageStringArray(key, X31CWebConst.DATABEAN_SET_DEF_VALUE, vec);
			}
				break;
			case LONGS:
			{
				X31CVector<Long> vec = new X31CVector<Long>();
				for (Long s : (Long[])value)
				{
					vec.add(s);
				}
				bean.sendMessageLongArray(key, X31CWebConst.DATABEAN_SET_DEF_VALUE, vec);
			}
				break;
			case BOOLEANS:
			{
				X31CVector<Boolean> vec = new X31CVector<Boolean>();
				for (Boolean s : (Boolean[])value)
				{
					vec.add(s);
				}
				bean.sendMessageBooleanArray(key, X31CWebConst.DATABEAN_SET_DEF_VALUE, vec);
			}
				break;
			case ARRAY_LIST:
			{
				X31SDataBeanAccessArray subBeanArray = null;
				subBeanArray = bean.getDataBeanArray(key);
				setBeanMapListForDataBeanArray(subBeanArray, (ArrayList<BeanMap>)value);
			}
				break;

			default:
				throw new JCCFrameworkException("JCCWebCommon#getScreenInfoでサポートされていないオブジェクトの型です。");
			}
		}
	}

	public static void setBeanMapListForDataBeanArray(X31SDataBeanAccessArray beanArray, ArrayList<BeanMap> beanMapList)
	{
		beanArray.clearArray();
		for (BeanMap beanMap : beanMapList)
		{
			X31SDataBeanAccess bean = beanArray.addDataBean();
			// 再帰呼び出し
			setBeanMapToDataBean(beanMap, bean);
		}
	}

	public static void addBeanMapForDataBeanArray(X31SDataBeanAccessArray beanArray, BeanMap beanMap)
	{
		X31SDataBeanAccess bean = beanArray.addDataBean();
		setBeanMapToDataBean(beanMap, bean);
	}

}


