/*********************************************************************
 * All Right reserved,Copyright (c) Fujitsu, 2011
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：○○○○○○○
 *   モジュール名    ：割引サービス選択
 *   ソースファイル名：KKW01004SFLogic.java
 *   作成者          ：富士通
 *   日付            ：2011年05月11日
 *＜機能概要＞
 *   
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v1.00.00    2011/05/11   富士通      新規作成
 *
 **********************************************************************/

package eo.web.webview.KKW01001SF;

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 com.fujitsu.futurity.web.x31.X31SRuntimeException;

import eo.common.util.JCCFrameworkException;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.KKW01001SF.KKW01001SFConst.FunctionCode;
import eo.web.webview.KKW01001SF.KKW01001SFConst.Item;
import eo.web.webview.KKW01001SF.KKW01001SFConst.Screen;
import eo.web.webview.KKW01001SF.KKW01001SFConst.Service;
import eo.web.webview.KKW01001SF.KKW01001SFConst.HeaderItem;
import eo.web.webview.KKW05801SF.KKW05801SFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JKKSvckeiCommonInfo;

/**
 * <dd>クラス名：KKW01001SFLogic <dd>クラス説明：割引サービス契約の追加更新削除を行う。 <dd>備考：なし。
 * 
 * @version 1.00.00 2011/03/31
 * @author 富士通
 */
@SuppressWarnings("serial")
public class KKW01001SFLogic extends JCCWebBusinessLogic {

	/**
	 * <dd>メソッド名：初期表示処理 <dd>メソッド説明：登録画面の初期表示を行う。 <dd>備考：なし。
	 * 
	 * @param
	 * @return true
	 */

	public boolean actionInit() throws Exception {
		// 跨り関係のない画面からの遷移にあたって
		// 跨り関係のない画面および自画面が設定した受け渡し情報をSFBeanに設定。
		JCCWebCommon.getScreenInfo(this);
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// サービス呼び出し
//			Service.KKSV0066.invokeAndApplySFBean(this, bean, FunctionCode.READ_FULL.getCode());

		// テスト用初期化。
		BeanMap beanMap=generateStubData();
		Mover.setBeanMapToDataBean(beanMap, bean);
		Mover.setString(bean, Item.MSKM_YMD, JCCWebCommon.getOpeDate(this,null));
		
		HashMap<String,Object> header=generateHeaderContentFromSFBean(bean);
		JKKSvckeiCommonInfo.setSvckeiCommonInfo(this, header);

		return true;
	}

	/**
	 * <dd>メソッド名：キャンペーンコード検索ボタン押下 <dd>メソッド説明：登録画面のキャンペーンコード検索ボタン押下時処理を行う。 <dd>
	 * 備考：なし。
	 * 
	 * @param
	 * @return true
	 */

	public boolean actionSearchCampaignCd() throws Exception {
		//引渡し情報なし。画面遷移のみ。
		moveToNext(Screen.KKW01004);
		return true;
	}

	/**
	 * <dd>メソッド名：割引サービス選択画面での選択ボタン押下 <dd>メソッド説明：割引サービス選択画面での選択ボタン押下時処理を行う。 <dd>
	 * 備考：なし。
	 * 
	 * @param
	 * @return true
	 */

	public boolean actionChoiceCampaignCd() throws Exception {
		// 跨り関係のない画面からの遷移にあたって
		// 跨り関係のない画面および自画面が設定した受け渡し情報をSFBeanに設定。
		JCCWebCommon.getScreenInfo(this);
		return true;
	}

	/**
	 * <dd>メソッド名：自動で追加候補一覧へボタン押下 <dd>メソッド説明：登録画面の自動で追加候補一覧へボタン押下時処理を行う。 <dd>
	 * 備考：なし。
	 * 
	 * @param
	 * @return true
	 */

	public boolean actionAddAndMoveToAutoAddKohoIcrn() throws Exception {

		/* TODO サービスを呼び出し、自動追加自動解除対象となる割引、販促を取得して候補へ追加し、表示を行う。 */
		
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// サービス呼び出し
		//サービス呼び出し前の適用キャンペーンリストを保持
		X31SDataBeanAccessArray beforeAplyCampaignList = Mover.getBeanArray(bean, Item.APLY_CAMPAIGN_LIST);
		BeanMapList beforeBeanAplyCampaignList=Mover.getBeanMapListFromDataBeanArray(beforeAplyCampaignList, KKW01001SFConst.DATATYPE08_APLY_CAMPAIGN_LIST);
		//サービス呼び出し前の適用販促リストを保持
		X31SDataBeanAccessArray beforeAplyHnsokuList = Mover.getBeanArray(bean, Item.APLY_HNSOKU_LIST);
		BeanMapList beforeBeanAplyHnsokuList=Mover.getBeanMapListFromDataBeanArray(beforeAplyHnsokuList, KKW01001SFConst.DATATYPE10_APLY_HNSOKU_LIST);
		
//		// サービス呼び出し。適用キャンペーンリスト、適用販促リストが上書きされる。
//		Service.KKSV0067.invokeAndApplySFBean(this, bean, FunctionCode.CHECK_API.getCode());
//
//		//サービス呼び出し後の適用キャンペーンリストを保持
//		X31SDataBeanAccessArray afterAplyCampaignList = Mover.getBeanArray(bean, Item.APLY_CAMPAIGN_LIST);
//		BeanMapList afterBeanAplyCampaignList=Mover.getBeanMapListFromDataBeanArray(afterAplyCampaignList, KKW01001SFConst.DATATYPE08_APLY_CAMPAIGN_LIST);
//		//サービス呼び出し後の適用販促リストを保持
//		X31SDataBeanAccessArray afterAplyHnsokuList = Mover.getBeanArray(bean, Item.APLY_HNSOKU_LIST);
//		BeanMapList afterBeanAplyHnsokuList=Mover.getBeanMapListFromDataBeanArray(afterAplyHnsokuList, KKW01001SFConst.DATATYPE10_APLY_HNSOKU_LIST);

		
		// テスト用データ編集。
		//適用キャンペーンリスト
		BeanMapList afterBeanAplyCampaignList = new BeanMapList(generateStubCampaign("auto"));
		//適用販促リスト
		BeanMapList afterBeanAplyHnsokuList =  new BeanMapList(generateStubHnsoku("auto"));

		//サービス呼び出し前、サービス呼び出し後の適用キャンペーンリストをマージ
		//TODO
		BeanMapList margedBeanAplyCampaignList=margeAplyCampaignList(beforeBeanAplyCampaignList,afterBeanAplyCampaignList);
		//サービス呼び出し前、サービス呼び出し後の適用販促リストをマージ
		//TODO
		BeanMapList margedBeanAplyHnsokuList=margeAplyHnsokuList(beforeBeanAplyHnsokuList,afterBeanAplyHnsokuList);
		//マージされた適用キャンペーンリストを設定
		X31SDataBeanAccessArray margedAplyCampaignList = Mover.getBeanArray(bean, Item.APLY_CAMPAIGN_LIST);
		Mover.setBeanMapListForDataBeanArray(margedAplyCampaignList, margedBeanAplyCampaignList);
		//マージされた適用販促リストを設定
		X31SDataBeanAccessArray margedAplyHnsokuList = Mover.getBeanArray(bean, Item.APLY_HNSOKU_LIST);
		Mover.setBeanMapListForDataBeanArray(margedAplyHnsokuList, margedBeanAplyHnsokuList);
		
		moveToNext(Screen.KKW01006);
		return true;
	}

	//リストをマージ。リスト中に同一の要素がなければ追加対象とする。
	private BeanMapList margeAplyCampaignList(
			BeanMapList before,
			BeanMapList after) {
		BeanMapList result=new BeanMapList();
		
		result.addAll(before);
		
		for(BeanMap target:after){
			
			//追加削除更新の種別を取得
			String addDelUpd=(String)target.get(Item.ADD_DEL_UPD_08.getContent());
			//追加の場合
			//TODO コード化すること
			if("1:追加".equals(addDelUpd)){
				final String targetValue=(String)target.get(Item.WRIB_SVC_CD_08.getContent());
				
				boolean isExistSameData=Items.exist(result, new Items.Predicater<BeanMap>(){
					public boolean evaluate(BeanMap input) {
						String value=(String)input.get(Item.WRIB_SVC_CD_08.getContent());
						return targetValue.equals(value);
					}}
					);
				if(false==isExistSameData){
					result.add(target);
				}
			}
			//削除の場合
			//TODO コード化すること
			if("2:削除".equals(addDelUpd)){
				final String targetValue=(String)target.get(Item.DEL_WRIB_SVC_KEI_NO_08.getContent());
				
				boolean isExistSameData=Items.exist(result, new Items.Predicater<BeanMap>(){
					public boolean evaluate(BeanMap input) {
						String value=(String)input.get(Item.DEL_WRIB_SVC_KEI_NO_08.getContent());
						return targetValue.equals(value);
					}}
					);
				if(false==isExistSameData){
					result.add(target);
				}
			}
		}
		return result;
	}

	//リストをマージ。リスト中に同一の要素がなければ追加対象とする。
	private BeanMapList margeAplyHnsokuList(
			BeanMapList before,
			BeanMapList after) {
		BeanMapList result=new BeanMapList();
		
		result.addAll(before);
		
		for(BeanMap target:after){
			
			//追加削除更新の種別を取得
			String addDelUpd=(String)target.get(Item.ADD_DEL_UPD_10.getContent());
			//追加の場合
			//TODO コード化すること
			if("1:追加".equals(addDelUpd)){
				final String targetValue=(String)target.get(Item.ADD_DCHSKM_CD_10.getContent());
				
				boolean isExistSameData=Items.exist(result, new Items.Predicater<BeanMap>(){
					public boolean evaluate(BeanMap input) {
						String value=(String)input.get(Item.ADD_DCHSKM_CD_10.getContent());
						return targetValue.equals(value);
					}}
					);
				if(false==isExistSameData){
					result.add(target);
				}
			}
			//削除の場合
			//TODO コード化すること
			if("2:削除".equals(addDelUpd)){
				final String targetValue=(String)target.get(Item.DEL_DCHSKMST_NO_10.getContent());
				
				boolean isExistSameData=Items.exist(result, new Items.Predicater<BeanMap>(){
					public boolean evaluate(BeanMap input) {
						String value=(String)input.get(Item.DEL_DCHSKMST_NO_10.getContent());
						return targetValue.equals(value);
					}}
					);
				if(false==isExistSameData){
					result.add(target);
				}
			}
		}
		return result;
	}


	/**
	 * <dd>メソッド名：現在の追加候補一覧へボタン押下 <dd>メソッド説明：登録画面の現在の追加候補一覧へボタン押下時処理を行う。 <dd>
	 * 備考：なし。
	 * 
	 * @param
	 * @return true
	 */

	public boolean actionMoveToAddKohoIcrn() throws Exception {
		//引渡し情報なし。画面遷移のみ。
		moveToNext(Screen.KKW01006);
		return true;
	}

	/**
	 * <dd>メソッド名：個別に追加候補一覧へボタン押下 <dd>メソッド説明：登録画面の個別に追加候補一覧へボタン押下時処理を行う。 <dd>
	 * 備考：なし。
	 * 
	 * @param
	 * @return true
	 */

	public boolean actionAddAndMoveToKbtAddKohoIcrn() throws Exception {
		/* TODO サービスを呼び出し、キャンペーンコードをもととした
		 * 追加対象となる割引、販促を取得して候補へ追加し、表示を行う。 */
		
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		// サービス呼び出し
		//サービス呼び出し前の適用キャンペーンリストを保持
		X31SDataBeanAccessArray beforeAplyCampaignList = Mover.getBeanArray(bean, Item.APLY_CAMPAIGN_LIST);
		BeanMapList beforeBeanAplyCampaignList=Mover.getBeanMapListFromDataBeanArray(beforeAplyCampaignList, KKW01001SFConst.DATATYPE08_APLY_CAMPAIGN_LIST);
		//サービス呼び出し前の適用販促リストを保持
		X31SDataBeanAccessArray beforeAplyHnsokuList = Mover.getBeanArray(bean, Item.APLY_HNSOKU_LIST);
		BeanMapList beforeBeanAplyHnsokuList=Mover.getBeanMapListFromDataBeanArray(beforeAplyHnsokuList, KKW01001SFConst.DATATYPE10_APLY_HNSOKU_LIST);
		
//		// サービス呼び出し。適用キャンペーンリスト、適用販促リストが上書きされる。
//		Service.KKSV0068.invokeAndApplySFBean(this, bean, FunctionCode.CHECK_ONLY.getCode());
//		//サービス呼び出し後の適用キャンペーンリストを保持
//		X31SDataBeanAccessArray afterAplyCampaignList = Mover.getBeanArray(bean, Item.APLY_CAMPAIGN_LIST);
//		BeanMapList afterBeanAplyCampaignList=Mover.getBeanMapListFromDataBeanArray(afterAplyCampaignList, KKW01001SFConst.DATATYPE08_APLY_CAMPAIGN_LIST);
//		//サービス呼び出し後の適用販促リストを保持
//		X31SDataBeanAccessArray afterAplyHnsokuList = Mover.getBeanArray(bean, Item.APLY_HNSOKU_LIST);
//		BeanMapList afterBeanAplyHnsokuList=Mover.getBeanMapListFromDataBeanArray(afterAplyHnsokuList, KKW01001SFConst.DATATYPE10_APLY_HNSOKU_LIST);

		// テスト用データ編集。
		String campaign_cd=Mover.getString(bean, Item.CAMPAIGN_CD);
		
		//サービス呼び出し後の適用キャンペーンリスト(テスト用データ)
		BeanMapList afterBeanAplyCampaignList = campaign_cd.matches("[0-9].*")? new BeanMapList(generateStubCampaign("kbt")) : new BeanMapList();
		//サービス呼び出し後の適用販促リスト(テスト用データ)
		BeanMapList afterBeanAplyHnsokuList =  campaign_cd.matches("[A-Z].*")? new BeanMapList(generateStubHnsoku("kbt")) : new BeanMapList();

		//サービス呼び出し前、サービス呼び出し後の適用キャンペーンリストをマージ
		BeanMapList margedBeanAplyCampaignList=margeAplyCampaignList(beforeBeanAplyCampaignList,afterBeanAplyCampaignList);
		//サービス呼び出し前、サービス呼び出し後の適用販促リストをマージ
		BeanMapList margedBeanAplyHnsokuList=margeAplyHnsokuList(beforeBeanAplyHnsokuList,afterBeanAplyHnsokuList);
		//マージされた適用キャンペーンリストを設定
		X31SDataBeanAccessArray margedAplyCampaignList = Mover.getBeanArray(bean, Item.APLY_CAMPAIGN_LIST);
		Mover.setBeanMapListForDataBeanArray(margedAplyCampaignList, margedBeanAplyCampaignList);
		//マージされた適用販促リストを設定
		X31SDataBeanAccessArray margedAplyHnsokuList = Mover.getBeanArray(bean, Item.APLY_HNSOKU_LIST);
		Mover.setBeanMapListForDataBeanArray(margedAplyHnsokuList, margedBeanAplyHnsokuList);
		
		moveToNext(Screen.KKW01006);
		return true;
	}

	/**
	 * <dd>メソッド名：キャンペーン詳細へボタン押下 <dd>メソッド説明：登録画面のキャンペーン詳細へボタン押下時処理を行う。 <dd>備考：なし。
	 * 
	 * @param
	 * @return true
	 */

	public boolean actionMoveToCampaignDtl() throws Exception {
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		String wribDtlChoice=Mover.getString(bean, Item.WRIB_DTL_CHOICE);
		int index=Integer.parseInt(wribDtlChoice);
		X31SDataBeanAccessArray beanArray=Mover.getBeanArray(bean, Item.WRIB_LIST);
		BeanMapList beanMapList=Mover.getBeanMapListFromDataBeanArray(beanArray, KKW01001SFConst.DATATYPE05_WRIB_LIST);
		BeanMap wrib=beanMapList.get(index);
		String campaign_cd=(String)wrib.take(Item.WRIB_CAMPAIGN_CD_05);
		String campaign_nm=(String)wrib.take(Item.WRIB_CAMPAIGN_NM_05);
		
		// 遷移先画面のサービスフォームBeanへ設定される値のマップを作成。
		HashMap<String,Object> screenMap=new HashMap<String,Object>();
		screenMap.put(KKW05801SFConst.MOTO_SCREEN_ID,Screen.KKW01001.getScreenId());
		screenMap.put(KKW05801SFConst.CAMPAIGN_CD, campaign_cd);
		screenMap.put(KKW05801SFConst.CAMPAIGN_NM, campaign_nm);
		// 遷移先画面のサービスフォームBeanへ設定される値のマップを作成。
		JCCWebCommon.setScreenInfo(this, Screen.KKW05801.getScreenId(), screenMap);

		moveToNext(Screen.KKW05801);
		return true;
	}

	/**
	 * <dd>メソッド名：販売促進詳細へボタン押下 <dd>メソッド説明：登録画面の販売促進詳細へボタン押下時処理を行う。 <dd>備考：なし。
	 * 
	 * @param
	 * @return true
	 */

	public boolean actionMoveToHnsokuDtl() throws Exception {
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		String hnsokuDtlChoice=Mover.getString(bean, Item.HNSOKU_DTL_CHOICE);
		int index=Integer.parseInt(hnsokuDtlChoice);
		X31SDataBeanAccessArray beanArray=Mover.getBeanArray(bean, Item.HNSOKU_LIST);
		BeanMapList beanMapList=Mover.getBeanMapListFromDataBeanArray(beanArray, KKW01001SFConst.DATATYPE06_HNSOKU_LIST);
		BeanMap hnsoku=beanMapList.get(index);
		String campaign_cd=(String)hnsoku.take(Item.HNSOKU_CAMPAIGN_CD_06);
		String campaign_nm=(String)hnsoku.take(Item.HNSOKU_CAMPAIGN_NM_06);
		
		// 遷移先画面のサービスフォームBeanへ設定される値のマップを作成。
		HashMap<String,Object> screenMap=new HashMap<String,Object>();
		screenMap.put(KKW05801SFConst.MOTO_SCREEN_ID,Screen.KKW01001.getScreenId());
		screenMap.put(KKW05801SFConst.CAMPAIGN_CD, campaign_cd);
		screenMap.put(KKW05801SFConst.CAMPAIGN_NM, campaign_nm);
		// 遷移先画面のサービスフォームBeanへ設定される値のマップを作成。
		JCCWebCommon.setScreenInfo(this, Screen.KKW05801.getScreenId(), screenMap);

		moveToNext(Screen.KKW05801);
		return true;
	}

	/**
	 * <dd>メソッド名：登録確認ボタン押下 <dd>メソッド説明：登録画面の登録確認ボタン押下時処理を行う。 <dd>備考：なし。
	 * 
	 * @param
	 * @return true
	 */

	public boolean actionAddCfm() throws Exception {
		/* サービスを呼び出し、追加更新削除対象となる割引、販促のチェックを行い
		 * 問題なければ確認画面へ遷移 */
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		//TODO
//		Service.KKSV0069.invokeAndApplySFBean(this, bean, FunctionCode.CHECK_ONLY.getCode());

		
		
		// テスト用データ編集。
		//適用キャンペーンリスト
		BeanMapList dummyBeanAplyCampaignList = new BeanMapList(generateStubCampaign("autoW"));
		//適用キャンペーンリストを設定
		X31SDataBeanAccessArray aplyCampaignList = Mover.getBeanArray(bean, Item.APLY_CAMPAIGN_LIST);
		Mover.setBeanMapListForDataBeanArray(aplyCampaignList, dummyBeanAplyCampaignList);

		//適用販促リスト
		BeanMapList dummyBeanAplyHnsokuList =  new BeanMapList(generateStubHnsoku("autoH"));

		//適用販促リストを設定
		X31SDataBeanAccessArray dummyAplyHnsokuList = Mover.getBeanArray(bean, Item.APLY_HNSOKU_LIST);
		Mover.setBeanMapListForDataBeanArray(dummyAplyHnsokuList, dummyBeanAplyHnsokuList);

		
		moveToNext(Screen.KKW01002);
		return true;

	}

	/**
	 * <dd>メソッド名：戻るボタン押下 <dd>メソッド説明：登録画面の戻るボタン押下時処理を行う。 <dd>備考：なし。
	 * 
	 * @param
	 * @return true
	 */

	public boolean actionBack() throws Exception {
		//画面遷移のみ。
		backToNextOtherScreen();
		return true;

	}

	/**
	 * <dd>メソッド名：修正ボタン押下 <dd>メソッド説明：確認画面の修正ボタン押下時処理を行う。 <dd>備考：なし。
	 * 
	 * @param
	 * @return true
	 */

	public boolean actionSyusei() throws Exception {
		//画面遷移のみ。
		moveToNext(Screen.KKW01001);
		return true;
	}

	/**
	 * <dd>メソッド名：確定ボタン押下 <dd>メソッド説明：確認画面の確定ボタン押下時処理を行う。 <dd>備考：なし。
	 * 
	 * @param
	 * @return true
	 */

	public boolean actionFix() throws Exception {
		/* サービスを呼び出し、追加更新削除対象となる割引、販促のチェック、登録を行い
		 * 問題なければ完了画面へ遷移 */
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		//TODO
//		Service.KKSV0069.invokeAndApplySFBean(this, bean, FunctionCode.CHECK_AND_CHANGE.getCode());
		moveToNext(Screen.KKW01003);
		return true;

	}

	/**
	 * <dd>メソッド名：異動区分選択へボタン押下 <dd>メソッド説明：完了画面の異動区分選択へボタン押下時処理を行う。 <dd>備考：なし。
	 * 
	 * @param
	 * @return true
	 */

	public boolean actionMoveToIdoDivChoice() throws Exception {
		//引渡し情報なし。画面遷移のみ。
		moveToNext(Screen.KKW00145);
		return true;
	}

	/**
	 * <dd>メソッド名：お客様一覧照会へボタン押下 <dd>メソッド説明：完了画面のお客様一覧照会へボタン押下時処理を行う。 <dd>備考：なし。
	 * 
	 * @param
	 * @return true
	 */

	public boolean actionMoveToCustIcrnShokai() throws Exception {
		//引渡し情報なし。画面遷移のみ。
		moveToNext(Screen.CKW00101);
		return true;

	}

	private void moveToNextSameScreen(String nextScreenId, String nextScreenNm)
			throws Exception {
		// 遷移先情報の設定
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, nextScreenId);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, nextScreenNm);
	}

	private void moveToNextSameScreen(Screen next) throws Exception {
		moveToNextSameScreen(next.getScreenId(), next.getScreenName());
	}

	private void moveToNextOtherScreen(String nextScreenId, String nextScreenNm)
			throws Exception {
		// 遷移先情報の設定
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		JCCWebCommon.setScreenId(this, nextScreenId, this.getGamenId());
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, nextScreenId);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, nextScreenNm);
	}

	private void moveToNextOtherScreen(Screen next) throws Exception {
		moveToNextOtherScreen(next.getScreenId(), next.getScreenName());
	}

	private void moveToNext(Screen next) throws Exception {
		if (next.isSameSFBean()) {
			moveToNextSameScreen(next);
		} else {
			moveToNextOtherScreen(next);
		}
	}

	private void backToNextOtherScreen() throws Exception {
		// 遷移先情報の設定
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		commoninfoBean
				.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
						X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon
								.getScreenId(this));
	}

	private void backToNext(Screen next) throws Exception {
		if (next.isSameSFBean()) {
			moveToNextSameScreen(next);
		} else {
			backToNextOtherScreen();
		}
	}


	static class BeanMap extends HashMap<String, Object> {
		public BeanMap pair(Item item, Object value) {
			super.put(item.getContent(), value);
			return this;
		}
		public Object take(Item item) {
			return super.get(item.getContent());
		}
	}

	static class BeanMapList extends ArrayList<BeanMap> {
		public BeanMapList(BeanMap... beans) {
			for (BeanMap bean : beans) {
				super.add(bean);
			}
		}
	}

	static class Mover {
		static public void setString(X31SDataBeanAccess bean, Item item,
				String value) {
			bean.sendMessageString(item.getContent(),
					X31CWebConst.DATABEAN_SET_VALUE, value);
		}

		static public void setLong(X31SDataBeanAccess bean, Item item,
				Long value) {
			bean.sendMessageLong(item.getContent(),
					X31CWebConst.DATABEAN_SET_VALUE, value);
		}

		static public void setBoolean(X31SDataBeanAccess bean, Item item,
				Boolean value) {
			bean.sendMessageBoolean(item.getContent(),
					X31CWebConst.DATABEAN_SET_VALUE, value);
		}

		static public void setStringArrayAt(X31SDataBeanAccess bean, Item item,
				int index, String value) {
			bean.sendMessageString(item.getContent(),
					X31CWebConst.DATABEAN_SET_VALUE, index, value);
		}

		static public void setLongAt(X31SDataBeanAccess bean, Item item,
				int index, Long value) {
			bean.sendMessageLong(item.getContent(),
					X31CWebConst.DATABEAN_SET_VALUE, index, value);
		}

		static public void setBooleanAt(X31SDataBeanAccess bean, Item item,
				int index, Boolean value) {
			bean.sendMessageBoolean(item.getContent(),
					X31CWebConst.DATABEAN_SET_VALUE, index, value);
		}

		static public void setStringArray(X31SDataBeanAccess bean,
				Item item, String[] values) {
			X31CVector<String> vector = new X31CVector<String>();
			for(String value:values){
				vector.add(value);
			}
			bean.sendMessageStringArray(item.getContent(),
					X31CWebConst.DATABEAN_SET_DEF_VALUE, vector);
		}

		static public void setLongArray(X31SDataBeanAccess bean, Item item,
				Long[] values) {
			X31CVector<Long> vector = new X31CVector<Long>();
			for(Long value:values){
				vector.add(value);
			}
			bean.sendMessageLongArray(item.getContent(),
					X31CWebConst.DATABEAN_SET_DEF_VALUE, vector);
		}

		static public void setBooleanArray(X31SDataBeanAccess bean, Item item,
				Boolean[] values) {
			X31CVector<Boolean> vector = new X31CVector<Boolean>();
			for(Boolean value:values){
				vector.add(value);
			}
			bean.sendMessageBooleanArray(item.getContent(),
					X31CWebConst.DATABEAN_SET_DEF_VALUE, vector);
		}

		static public void clearBeanArray(X31SDataBeanAccess bean, Item item,
				Boolean[] values) {
			X31CVector<Boolean> vector = new X31CVector<Boolean>();
			for(Boolean value:values){
				vector.add(value);
			}
			bean.sendMessageBooleanArray(item.getContent(),
					X31CWebConst.DATABEAN_SET_DEF_VALUE, vector);
		}
		
		static public X31SDataBeanAccessArray getBeanArray(
				X31SDataBeanAccess bean, Item item) {
			return bean.getDataBeanArray(item.getContent());
		}

		static public String getString(X31SDataBeanAccess bean, Item item) {
			return bean.sendMessageString(item.getContent(),
					X31CWebConst.DATABEAN_GET_VALUE);
		}

		static public Long getLong(X31SDataBeanAccess bean, Item item) {
			return bean.sendMessageLong(item.getContent(),
					X31CWebConst.DATABEAN_GET_VALUE);
		}

		static public Boolean getBoolean(X31SDataBeanAccess bean, Item item) {
			return bean.sendMessageBoolean(item.getContent(),
					X31CWebConst.DATABEAN_GET_VALUE);
		}

		static public String getStringAt(X31SDataBeanAccess bean, Item item,
				int index) {
			return bean.sendMessageString(item.getContent(),
					X31CWebConst.DATABEAN_GET_VALUE, index);
		}

		static public Long getLongAt(X31SDataBeanAccess bean, Item item,
				int index) {
			return bean.sendMessageLong(item.getContent(),
					X31CWebConst.DATABEAN_GET_VALUE, index);
		}

		static public Boolean getBooleanAt(X31SDataBeanAccess bean, Item item,
				int index) {
			return bean.sendMessageBoolean(item.getContent(),
					X31CWebConst.DATABEAN_GET_VALUE, index);
		}

		static public int getArrayCount(X31SDataBeanAccess bean, Item item) {
			Integer count = (Integer) bean.sendMessage(item.getContent(),
					X31CWebConst.DATABEAN_GET_COUNT);
			return count.intValue();
		}

		static public String[] getStringArray(X31SDataBeanAccess bean, Item item) {
			ArrayList<String> result = new ArrayList<String>();
			int count = getArrayCount(bean, item);
			for (int i = 0; i > count; i++) {
				String element = getStringAt(bean, item, i);
				result.add(element);
			}
			return (String[]) result.toArray(new String[result.size()]);
		}

		static public Long[] getLongArray(X31SDataBeanAccess bean, Item item) {
			ArrayList<Long> result = new ArrayList<Long>();
			int count = getArrayCount(bean, item);
			for (int i = 0; i > count; i++) {
				Long element = getLongAt(bean, item, i);
				result.add(element);
			}
			return (Long[]) result.toArray(new Long[result.size()]);
		}

		static public Boolean[] getBooleanArray(X31SDataBeanAccess bean,
				Item item) {
			ArrayList<Boolean> result = new ArrayList<Boolean>();
			int count = getArrayCount(bean, item);
			for (int i = 0; i > count; i++) {
				Boolean element = getBooleanAt(bean, item, i);
				result.add(element);
			}
			return (Boolean[]) result.toArray(new Boolean[result.size()]);
		}

		static public X31SDataBeanAccess createBeanFromArray(
				X31SDataBeanAccessArray beanArray) {
			return beanArray.addDataBean();
		}

		static public BeanMap getBeanMapFromDataBean(X31SDataBeanAccess bean,
				Object[] structure) {
			BeanMap result = new BeanMap();
			for (Object node : structure) {
				Object[] pair = (Object[]) node;
				Item item = (Item) pair[0];
				Object value = pair[1];

				if (value instanceof Object[]) {
					X31SDataBeanAccessArray beanArray = Mover.getBeanArray(
							bean, item);
					BeanMapList content = getBeanMapListFromDataBeanArray(
							beanArray, (Object[]) value);
					result.pair(item, content);
					continue;
				}
				if (value == String.class) {
					String content = Mover.getString(bean, item);
					result.pair(item, content);
					continue;
				}
				if (value == Long.class) {
					Long content = Mover.getLong(bean, item);
					result.pair(item, content);
					continue;
				}
				if (value == Boolean.class) {
					Boolean content = Mover.getBoolean(bean, item);
					result.pair(item, content);
					continue;
				}
				if (value == String[].class) {
					String[] content = Mover.getStringArray(bean, item);
					result.pair(item, content);
					continue;
				}
				if (value == Long[].class) {
					Long[] content = Mover.getLongArray(bean, item);
					result.pair(item, content);
					continue;
				}
				if (value == Boolean[].class) {
					Boolean[] content = Mover.getBooleanArray(bean, item);
					result.pair(item, content);
					continue;
				}
			}
			return result;
		}

		static public BeanMapList getBeanMapListFromDataBeanArray(
				X31SDataBeanAccessArray beanArray, Object[] structure) {
			int count = beanArray.getCount().intValue();
			BeanMapList result = new BeanMapList();
			for (int i = 0; i < count; i++) {
				X31SDataBeanAccess bean = beanArray.getDataBean(i);
				BeanMap content = getBeanMapFromDataBean(bean, structure);
				result.add(content);
			}
			return result;
		}
		
		public static void setBeanMapToDataBean(BeanMap beanMap, X31SDataBeanAccess bean) throws Exception{
			for(String key:beanMap.keySet()){
				Item item=Item.resolve(key);
				Object value = beanMap.get(key);
				// 値がNULLの場合、次へ
				if ( value == null ) {
					continue;
				}
				
				// 引継ぎ情報がString型の場合
				if(value instanceof String){
					Mover.setString(bean, item, (String)value);
				// 引継ぎ情報がLong型の場合
				}else if(value instanceof Long) {
					Mover.setLong(bean, item, (Long)value);
				// 引継ぎ情報がBoolean型の場合
				}else if(value instanceof Boolean) {
					Mover.setBoolean(bean, item, (Boolean)value);
				// 引継ぎ情報がString[]型の場合
				}else if(value instanceof String[]) {
					X31CVector<String> vec = new X31CVector<String>();
					for(String s:(String[])value){
						vec.add(s);
					}
					bean.sendMessageStringArray(key, X31CWebConst.DATABEAN_SET_DEF_VALUE, vec);
				// 引継ぎ情報がLong[]型の場合
				}else if(value instanceof Long[]) {
					X31CVector<Long> vec = new X31CVector<Long>();
					for(Long s:(Long[])value){
						vec.add(s);
					}
					bean.sendMessageLongArray(key, X31CWebConst.DATABEAN_SET_DEF_VALUE, vec);
				// 引継ぎ情報がBoolean[]型の場合
				}else if(value instanceof Boolean[]) {
					X31CVector<Boolean> vec = new X31CVector<Boolean>();
					for(Boolean s:(Boolean[])value){
						vec.add(s);
					}
					bean.sendMessageBooleanArray(key, X31CWebConst.DATABEAN_SET_DEF_VALUE, vec);
				// 引継ぎ情報がArrayList型の場合
				}else if(value instanceof ArrayList) {
					
					X31SDataBeanAccessArray subBeanArray = null;
					try {
						subBeanArray = bean.getDataBeanArray(key);
					} catch (X31SRuntimeException sre) {
						continue;
					}
					setBeanMapListForDataBeanArray(subBeanArray, (BeanMapList)value);
				// 上記以外の場合は例外をthrowする。
				}else{
					throw new JCCFrameworkException("JCCWebCommon#getScreenInfoでサポートされていないオブジェクトの型です。");
				}
			}
		}
		
		public static void setBeanMapListForDataBeanArray(X31SDataBeanAccessArray beanArray,BeanMapList beanMapList) throws Exception{
			beanArray.clearArray();
			for(BeanMap beanMap : (BeanMapList)beanMapList){
				X31SDataBeanAccess bean = beanArray.addDataBean();
				// 再帰呼び出し
				setBeanMapToDataBean(beanMap, bean);
			}
		}

		public static void addBeanMapForDataBeanArray(X31SDataBeanAccessArray beanArray,BeanMap beanMap) throws Exception{
			X31SDataBeanAccess bean = beanArray.addDataBean();
			setBeanMapToDataBean(beanMap, bean);
		}

		
	}

	private BeanMap generateStubData() {
		BeanMap beanMap = new BeanMap()
		.pair(Item.IDO_DIV, "dummy")
		.pair(Item.KEI_STAT, "dummy")
		.pair(Item.MANSION_ID, "dummy")
		.pair(Item.MANSION_NM, "dummy")
		.pair(Item.KEISHA_NM, "dummy")
		.pair(Item.TELNO, "dummy")
		.pair(Item.TOKUSOKU_STAT, "dummy")
		.pair(Item.KEISHA_AD, "dummy")
		.pair(Item.SVC_KEI_NO, "dummy")
		.pair(Item.SEIKY_KEI_NO, "dummy")
		.pair(Item.SYSID, "dummy")
		.pair(Item.EOID, "dummy")
		.pair(Item.PRC_GRP, "dummy")
		.pair(Item.PCRS,"dummy")
		.pair(Item.FAMILY_PACK_UM, "dummy")
		.pair(Item.ROUTER_SBT, "dummy")
		.pair(Item.MSKM_YMD, "20110101")
		.pair(Item.MSKM_KSN_YEAR, "2011")
		.pair(Item.MSKM_KSN_MON, "01")
		.pair(Item.MSKM_KSN_DAY, "01")
		.pair(Item.CAMPAIGN_CD,"dummy")
		.pair(Item.CAMPAIGN_NM, "dummy")
		.pair(Item.SELECTED_SVC_NM_1, "dummy")
		.pair(Item.SELECTED_SVC_NM_2, "dummy")
		.pair(Item.SELECTED_SVC_NM_3, "dummy")
		.pair(Item.SOKUJI_APLY,false)
		.pair(Item.WRIB_DTL_CHOICE, "0")
		.pair(Item.HNSOKU_DTL_CHOICE, "0");

		beanMap.pair(Item.STI_SVC_CHOICE_LIST, new BeanMapList(
				new BeanMap()
				.pair(Item.CHOICE_01, false)
				.pair(Item.SVC_KEI_NO_01,"SVC000000001")
				.pair(Item.SVC_NM_01, "dummy0101")
				.pair(Item.PCRS_NM_01, "dummy0101")
				.pair(Item.SEIKY_KEI_NO_01, "dummy0101")
				.pair(Item.SVC_KEI_STAT_01, "dummy0101")
				.pair(Item.SVC_KAISEN_PLACE_AD_01, "dummy0101"),
				new BeanMap()
				.pair(Item.CHOICE_01, false)
				.pair(Item.SVC_KEI_NO_01, "SVC000000002")
				.pair(Item.SVC_NM_01,"dummy0102")
				.pair(Item.PCRS_NM_01, "dummy0102")
				.pair(Item.SEIKY_KEI_NO_01, "dummy0102")
				.pair(Item.SVC_KEI_STAT_01, "dummy0102")
				.pair(Item.SVC_KAISEN_PLACE_AD_01, "dummy0102")
				)
				);
		beanMap.pair(Item.STI_SVC_UW_CHOICE_LIST, new BeanMapList(
				new BeanMap()
				.pair(Item.CHOICE_02, false)
				.pair(Item.SVC_KEI_UCWK_NO_02,"dummy0201")
				.pair(Item.SVC_UW_NM_02,"dummy0201")
				.pair(Item.PCRS_NM_02,"dummy0201")
				.pair(Item.SEIKY_KEI_NO_02,"dummy0201")
				.pair(Item.SVC_KEI_UCWK_STAT_02,"dummy0201")
				.pair(Item.UCWK_KAISEN_PLACE_AD_02,"dummy0201")
				.pair(Item.TELNO_02,"dummy0201")
				.pair(Item.STB_ID_02,"dummy0201")
				,
				new BeanMap()
				.pair(Item.CHOICE_02, false)
				.pair(Item.SVC_KEI_UCWK_NO_02,"dummy0202")
				.pair(Item.SVC_UW_NM_02,"dummy0202")
				.pair(Item.PCRS_NM_02,"dummy0202")
				.pair(Item.SEIKY_KEI_NO_02,"dummy0202")
				.pair(Item.SVC_KEI_UCWK_STAT_02,"dummy0202")
				.pair(Item.UCWK_KAISEN_PLACE_AD_02,"dummy0202")
				.pair(Item.TELNO_02,"dummy0202")
				.pair(Item.STB_ID_02,"dummy0202")
				)
				);
		beanMap.pair(Item.STI_OP_CHOICE_LIST, new BeanMapList(
				new BeanMap()
				.pair(Item.CHOICE_03,false)
				.pair(Item.OP_NAIYO_03,"dummy0301")
				.pair(Item.OP_SVC_NM_03,"dummy0301")
				.pair(Item.SEIKY_KEI_NO_03,"dummy0301")
				.pair(Item.OP_SVC_KEI_STAT_03,"dummy0301")
				.pair(Item.OP_SVC_KEI_NO_03,"dummy0301")
				,
				new BeanMap()
				.pair(Item.CHOICE_03,false)
				.pair(Item.OP_NAIYO_03,"dummy0302")
				.pair(Item.OP_SVC_NM_03,"dummy0302")
				.pair(Item.SEIKY_KEI_NO_03,"dummy0302")
				.pair(Item.OP_SVC_KEI_STAT_03,"dummy0302")
				.pair(Item.OP_SVC_KEI_NO_03,"dummy0302")
				)
				);
		beanMap.pair(Item.STI_KKTK_CHOICE_LIST, new BeanMapList(
				new BeanMap()
				.pair(Item.CHOICE_04,false)
				.pair(Item.KKTK_SVC_KEI_NO_04,"dummy0401")
				.pair(Item.KKTK_SVC_NM_04,"dummy0401")
				.pair(Item.TAKNKIKI_MODEL_CD_04,"dummy0401")
				.pair(Item.SEIKY_KEI_NO_04,"dummy0401")
				.pair(Item.KKTK_SVC_KEI_STAT_04,"dummy0401")
				.pair(Item.KIKI_STC_SAKI_AD_04,"dummy0401")
				.pair(Item.TK_SBT_CD_04,"dummy0401")
				.pair(Item.HAMBAI_SBT_CD_04,"dummy0401")
				.pair(Item.KIKI_SBT_CD_04,"dummy0401")
				.pair(Item.KIKI_SEIZO_NO_04,"dummy0401")
				,
				new BeanMap()
				.pair(Item.CHOICE_04,false)
				.pair(Item.KKTK_SVC_KEI_NO_04,"dummy0402")
				.pair(Item.KKTK_SVC_NM_04,"dummy0402")
				.pair(Item.TAKNKIKI_MODEL_CD_04,"dummy0402")
				.pair(Item.SEIKY_KEI_NO_04,"dummy0402")
				.pair(Item.KKTK_SVC_KEI_STAT_04,"dummy0402")
				.pair(Item.KIKI_STC_SAKI_AD_04,"dummy0402")
				.pair(Item.TK_SBT_CD_04,"dummy0402")
				.pair(Item.HAMBAI_SBT_CD_04,"dummy0402")
				.pair(Item.KIKI_SBT_CD_04,"dummy0402")
				.pair(Item.KIKI_SEIZO_NO_04,"dummy0402")
				)
				);

		beanMap.pair(Item.WRIB_LIST, new BeanMapList(
				new BeanMap()
				.pair(Item.WRIB_DEL_05,"dummy0501")
				.pair(Item.WRIB_MSKM_YMD_05,"20110101")
				.pair(Item.WRIB_CAMPAIGN_CD_05,"dummy0501")
				.pair(Item.WRIB_CAMPAIGN_NM_05,"dummy0501")
				.pair(Item.WRIB_AUTO_MAN_05,"dummy0501")
				.pair(Item.WRIB_TRGT_05,"dummy0501")
				.pair(Item.WRIB_TRGT_SVC_05,"dummy0501")
				.pair(Item.WRIB_SVC_KEI_NO_05,"dummy0501")
				.pair(Item.WRIB_CHOKI_USE_WRIB_KH_05,"dummy0501")
				.pair(Item.WRIB_SVC_STAYMD_YEAR_05,"2011")
				.pair(Item.WRIB_SVC_STAYMD_MON_05,"01")
				.pair(Item.WRIB_SVC_STAYMD_DAY_05,"01")
				.pair(Item.WRIB_SVC_STAYMD_05,"20110101")
				.pair(Item.WRIB_SVC_ENDYMD_05,"20110101")
				.pair(Item.WRIB_APLY_HAMBET_CD_05,"dummy0501")
				.pair(Item.WRIB_APLY_CNT_05,"dummy0501")
				.pair(Item.WRIB_APLY_ZUMI_CNT_05,"dummy0501")
				.pair(Item.WRIB_SVC_KEI_STAT_05,"dummy0501")
				,
				new BeanMap()
				.pair(Item.WRIB_DEL_05,"dummy0502")
				.pair(Item.WRIB_MSKM_YMD_05,"20110101")
				.pair(Item.WRIB_CAMPAIGN_CD_05,"dummy0502")
				.pair(Item.WRIB_CAMPAIGN_NM_05,"dummy0502")
				.pair(Item.WRIB_AUTO_MAN_05,"dummy0502")
				.pair(Item.WRIB_TRGT_05,"dummy0502")
				.pair(Item.WRIB_TRGT_SVC_05,"dummy0502")
				.pair(Item.WRIB_SVC_KEI_NO_05,"dummy0502")
				.pair(Item.WRIB_CHOKI_USE_WRIB_KH_05,"dummy0502")
				.pair(Item.WRIB_SVC_STAYMD_YEAR_05,"2011")
				.pair(Item.WRIB_SVC_STAYMD_MON_05,"01")
				.pair(Item.WRIB_SVC_STAYMD_DAY_05,"01")
				.pair(Item.WRIB_SVC_STAYMD_05,"20110101")
				.pair(Item.WRIB_SVC_ENDYMD_05,"20110101")
				.pair(Item.WRIB_APLY_HAMBET_CD_05,"dummy0502")
				.pair(Item.WRIB_APLY_CNT_05,"dummy0502")
				.pair(Item.WRIB_APLY_ZUMI_CNT_05,"dummy0502")
				.pair(Item.WRIB_SVC_KEI_STAT_05,"dummy0502")
				)
				);

				beanMap.pair(Item.HNSOKU_LIST, new BeanMapList(
				new BeanMap()
				.pair(Item.HNSOKU_DEL_06,"dummy0601")
				.pair(Item.HNSOKU_MSKM_YMD_06,"20110101")
				.pair(Item.HNSOKU_CAMPAIGN_CD_06,"dummy0601")
				.pair(Item.HNSOKU_CAMPAIGN_NM_06,"dummy0601")
				.pair(Item.HNSOKU_AUTO_MAN_06,"dummy0601")
				.pair(Item.HNSOKU_TRGT_06,"dummy0601")
				.pair(Item.HNSOKU_TRGT_SVC_06,"dummy0601")
				.pair(Item.HNSOKU_SVC_KEI_NO_06,"dummy0601")
				.pair(Item.HNSOKU_SVC_STAYMD_06,"20110101")
				.pair(Item.HNSOKU_SVC_ENDYMD_06,"20110101")
				.pair(Item.HNSOKU_APLY_HAMBET_CD_06,"dummy0601")
				.pair(Item.HNSOKU_APLY_CNT_06,"dummy0601")
				.pair(Item.HNSOKU_APLY_ZUMI_CNT_06,"dummy0601")
				.pair(Item.HNSOKU_SVC_KEI_STAT_06,"dummy0601")
				,
				new BeanMap()
				.pair(Item.HNSOKU_DEL_06,"dummy0602")
				.pair(Item.HNSOKU_MSKM_YMD_06,"20110101")
				.pair(Item.HNSOKU_CAMPAIGN_CD_06,"dummy0602")
				.pair(Item.HNSOKU_CAMPAIGN_NM_06,"dummy0602")
				.pair(Item.HNSOKU_AUTO_MAN_06,"dummy0602")
				.pair(Item.HNSOKU_TRGT_06,"dummy0602")
				.pair(Item.HNSOKU_TRGT_SVC_06,"dummy0602")
				.pair(Item.HNSOKU_SVC_KEI_NO_06,"dummy0602")
				.pair(Item.HNSOKU_SVC_STAYMD_06,"20110101")
				.pair(Item.HNSOKU_SVC_ENDYMD_06,"20110101")
				.pair(Item.HNSOKU_APLY_HAMBET_CD_06,"dummy0602")
				.pair(Item.HNSOKU_APLY_CNT_06,"dummy0602")
				.pair(Item.HNSOKU_APLY_ZUMI_CNT_06,"dummy0602")
				.pair(Item.HNSOKU_SVC_KEI_STAT_06,"dummy0602")
				)
				);
		return beanMap;
	}

	private BeanMap generateStubWribScvTgtKeiInfo(String seed) {
		String value=seed+"01";
		return new BeanMap()
		.pair(Item.OYA_KEI_SKBT_CD_09,value)
		.pair(Item.SVC_KEI_NO_09,value)
		.pair(Item.SVC_KEI_UCWK_NO_09,value)
		.pair(Item.OP_SVC_KEI_NO_09,value)
		.pair(Item.SUB_OP_SVC_KEI_NO_09,value)
		.pair(Item.KKTK_SVC_KEI_NO_09,value)
		.pair(Item.WRIB_SVC_TGT_SVC_CD_09,value)
		.pair(Item.SET_ADD_YMD_09,"20110101")
		.pair(Item.WRISVC_TG_KEI_TSTAYMD_09,"20110101")
		.pair(Item.WRISVC_TG_KEI_TENDYMD_09,"20110101");
	}

	private BeanMap generateStubCampaign(String seed) {
		String value=seed+"01";
		return new BeanMap()
		.pair(Item.CAMPAIGN_CD_08,value)
		.pair(Item.CAMPAIGN_NM_08,value)
		.pair(Item.AUTO_MAN_08,value)
		.pair(Item.ADD_DEL_UPD_08,value)
		.pair(Item.WRIB_SVC_CD_08,value)
		.pair(Item.DEL_WRIB_SVC_KEI_NO_08,value)
		.pair(Item.UPD_WRIB_SVC_KEI_NO_08,value)
		.pair(Item.UPD_FTRIAL_PRD_ENDYMD_08,"20110101")
		.pair(Item.UPD_SVC_CHRG_STAYMD_08,"20110101")
		.pair(Item.APLY_ADD_WRIB_SCV_TGT_KEI_INFO, new BeanMapList(generateStubWribScvTgtKeiInfo(value)));
	}
	
	private BeanMap generateStubDchskmstTgKeiInfo(String seed) {
		String value=seed+"01";
		return new BeanMap()
		.pair(Item.OYA_KEI_SKBT_CD_11,value)
		.pair(Item.SVC_KEI_NO_11,value)
		.pair(Item.SVC_KEI_UCWK_NO_11,value)
		.pair(Item.OP_SVC_KEI_NO_11,value)
		.pair(Item.SUB_OP_SVC_KEI_NO_11,value)
		.pair(Item.KKTK_SVC_KEI_NO_11,value)
		.pair(Item.SET_ADD_YMD_11,"20110101")
		.pair(Item.DCHSKMST_TG_KEI_TSTAYMD_11,"20110101")
		.pair(Item.DCHSKMST_TG_KEI_TENDYMD_11,"20110101");
	}	

	private BeanMap generateStubHnsoku(String seed) {
		String value=seed+"01";
		return new BeanMap()
		.pair(Item.CAMPAIGN_CD_10,value)
		.pair(Item.CAMPAIGN_NM_10,value)
		.pair(Item.AUTO_MAN_10,value)
		.pair(Item.ADD_DEL_UPD_10,value)
		.pair(Item.ADD_DCHSKM_CD_10,value)
		.pair(Item.DEL_DCHSKMST_NO_10,value)
		.pair(Item.APLY_ADD_DCHSKMST_TG_KEI_INFO, new BeanMapList(generateStubDchskmstTgKeiInfo(value)));
	}
	
	private HashMap<String,Object> generateHeaderContentFromSFBean(X31SDataBeanAccess bean){
		HashMap<String,Object> result=new HashMap<String,Object>();

		Object[] headerStructure = {
		new Object[] { Item.IDO_DIV, String.class }, //
		new Object[] { Item.KEI_STAT, String.class }, //
		new Object[] { Item.MANSION_ID, String.class }, //
		new Object[] { Item.MANSION_NM, String.class }, //
		new Object[] { Item.KEISHA_NM, String.class }, //
		new Object[] { Item.TELNO, String.class }, //
		new Object[] { Item.TOKUSOKU_STAT, String.class }, //
		new Object[] { Item.KEISHA_AD, String.class }, //
		new Object[] { Item.SVC_KEI_NO, String.class }, //
		new Object[] { Item.SEIKY_KEI_NO, String.class }, //
		new Object[] { Item.SYSID, String.class }, //
		new Object[] { Item.EOID, String.class }, //
		new Object[] { Item.PRC_GRP, String.class }, //
		new Object[] { Item.PCRS, String.class }, //
		new Object[] { Item.FAMILY_PACK_UM, String.class }, //
		new Object[] { Item.ROUTER_SBT, String.class }, //
		};

		BeanMap content=Mover.getBeanMapFromDataBean(bean, headerStructure);
		
		result.put(HeaderItem.IDO_DIV.getContent(),(String)content.get(Item.IDO_DIV.getContent()));
		result.put(HeaderItem.SVC_KEI_STAT.getContent(),(String)content.get(Item.KEI_STAT.getContent()));
		result.put(HeaderItem.MANSION_ID.getContent(),(String)content.get(Item.MANSION_ID.getContent()));
		result.put(HeaderItem.MANSION_NM.getContent(),(String)content.get(Item.MANSION_NM.getContent()));
		result.put(HeaderItem.KEISHA_NM.getContent(),(String)content.get(Item.KEISHA_NM.getContent()));
		result.put(HeaderItem.TELNO.getContent(),(String)content.get(Item.TELNO.getContent()));
		result.put(HeaderItem.TOKUSOKU_STAT.getContent(),(String)content.get(Item.TOKUSOKU_STAT.getContent()));
		result.put(HeaderItem.KEISHA_AD.getContent(),(String)content.get(Item.KEISHA_AD.getContent()));
		result.put(HeaderItem.SVC_KEI_NO.getContent(),(String)content.get(Item.SVC_KEI_NO.getContent()));
		result.put(HeaderItem.SEIKY_KEI_NO.getContent(),(String)content.get(Item.SEIKY_KEI_NO.getContent()));
		result.put(HeaderItem.SYSID.getContent(),(String)content.get(Item.SYSID.getContent()));
		result.put(HeaderItem.EO_ID.getContent(),(String)content.get(Item.EOID.getContent()));
		result.put(HeaderItem.PRC_GRP.getContent(),(String)content.get(Item.PRC_GRP.getContent()));
		result.put(HeaderItem.PCRS.getContent(),(String)content.get(Item.PCRS.getContent()));
		result.put(HeaderItem.FAMILY_PACK_UM.getContent(),(String)content.get(Item.FAMILY_PACK_UM.getContent()));
		result.put(HeaderItem.ROUTER_SBT.getContent(),(String)content.get(Item.ROUTER_SBT.getContent()));
		
		return result;
	}
	

	static class Items{
		interface Transformer<I,O>{
			O transform(I input);			
		}
		interface Closure<I>{
			void execute(I input);			
		}
		interface Predicater<I>{
			boolean evaluate(I input);			
		}
		
		static public <I,O> ArrayList<O> map(ArrayList<I> in,final Transformer<I,O> transformer){
			final ArrayList<O> result=new ArrayList<O>();
			each(in,new Closure<I>(){
			@Override	
			public void execute(I input) {
				result.add(transformer.transform(input));
			}
			});
			return result;
		}
		
		static public <I> void each(ArrayList<I> in,Closure<I> closure){
			for(I item:in){
				closure.execute(item);
			}
		}

		static public <I> boolean exist(ArrayList<I> in,Predicater<I> predicater){
			for(I item:in){
				if(predicater.evaluate(item)){
					return true;
				}
			}
			return false;
		}
		
	}
	
}
