/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：ｅｏモバイル（量販・訪販）
*   ソースファイル名：FUW00915SFLogic.java
*   作成者          ：富士通
*   日付            ：2012年01月25日
*＜機能概要＞
*   eoモバイル入力画面のビューロジックです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2012/01/25   FJ）山崎    新規作成
*   v3.00.00    2012/04/17   FJ）大野    料金シミュレーション対応
*   v4.00.00    2012/07/20   FJ）大塚   「ANK-0404-01-01」 eoモバイル3G 42Mハイブリッドタイプ対応
*   v4.01.00	2012/11/22   FJ) 大塚   【IT2-2012-0001790】
*   v4.02.00    2013/05/15   FJ）大村    【ANK-1526-00-00】7.2Mルータ枯渇対応、【ANK-1527-00-00】21MUSB提供終了対応
*   v5.00.00    2013/06/10   FJ）知識    【ANK-1534-00-00】eoモバイル42Mエリア縮小対応
**********************************************************************/
package eo.web.webview.FUW00915SF;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;

import com.fujitsu.futurity.web.x00.JCCBusinessException;
import com.fujitsu.futurity.web.x00.JCCWebServiceException;
import com.fujitsu.futurity.web.x31.X31CHashMap;
import com.fujitsu.futurity.web.x31.X31CMessageResult;
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.X31SWebLog;
import com.fujitsu.futurity.web.x31.X31CMessageResult.X31CMessageMoreInfo;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;
import eo.web.webview.mapping.FUSV0150_FUSV0150OPDBMapper;

/**
 * ｅｏモバイル（量販・訪販）画面ビューロジックです。
 * <p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW00915SFLogic extends JCCWebBusinessLogic
{
	/** サービスID */
	private static final String USECASE_ID_FUSV0150 = "FUSV0150";
	/** オペレーションID */
	private static final String OPERATION_ID_FUSV0150 = "FUSV0150OP";

	/** プロパティファイル取得文字列（グループID指定） */
	private static final String QUERY_COURSE_CHOICE_PATH = "DISPSETTING/SETTING[@screenId='FUW00915']/DISPCTL[@groupid='GROUPID_REPLACE_STR']";
	/** モバイルコース名取得文字列 */
	private static final String MOBILE_SERVICE_NAME = "DISPSETTING/SETTING[@screenId='#']/DISPTEXT[@groupid='MOBILE_SERVICE_NAME']";
	/** モバイル機器名取得文字列 */
	private static final String MOBILE_KIKI_NAME = "DISPSETTING/SETTING[@screenId='#']/DISPTEXT[@groupid='MOBILE_KIKI_NAME']";
	
	// プロパティファイルの項目取得キー（コース選択情報）
	// 単項目
	/** プロパティファイルの項目取得キー（単項目）:モバイルコース種類 */
	private static final String KEY_MOBILE_COURSE_KIND = "MOBILE_COURSE_KIND";
	/** プロパティファイルの項目取得キー（単項目）:モバイルコース名 */
	private static final String KEY_MOBILE_COURSE_NAME = "MOBILE_COURSE_NAME";
	/** プロパティファイルの項目取得キー（単項目）:モバイルコースコード */
	private static final String KEY_MOBILE_COURSE_CODE = "MOBILE_COURSE_CODE";
	/** プロパティファイルの項目取得キー（単項目）:モバイルコースクラス */
	private static final String KEY_MOBILE_COURSE_CLASS = "MOBILE_COURSE_CLASS";
	/** プロパティファイルの項目取得キー（単項目）:サービスコード */
	private static final String KEY_SVC_CD = "SVC_CD";
	/** プロパティファイルの項目取得キー（単項目）:料金グループコード */
	private static final String KEY_PRC_GRP_CD = "PRC_GRP_CD";
	/** プロパティファイルの項目取得キー（単項目）:説明エリアクラス */
	private static final String KEY_MOBILE_COURSE_SETMEI_CLASS = "MOBILE_COURSE_SETMEI_CLASS";
	/** プロパティファイルの項目取得キー（単項目）:文言 */
	private static final String KEY_MOBILE_COURSE_MONGON = "MOBILE_COURSE_MONGON";
	/** プロパティファイルの項目取得キー（単項目）:無料文言 */
	private static final String KEY_MOBILE_COURSE_MRYO_MONGON = "MOBILE_COURSE_MRYO_MONGON";
	/** プロパティファイルの項目取得キー（単項目）:機器提供サービスコード */
	private static final String KEY_KKTK_SVC_CD = "KKTK_SVC_CD";
	/** プロパティファイルの項目取得キー（単項目）:モバイルコースタイトル名 */
	private static final String KEY_MOBILE_COURSE_TITLE = "MOBILE_COURSE_TITLE";
	// 配列項目
	/** プロパティファイルの項目取得キー（配列項目）:料金コースコード */
	private static final String ARRAYKEY_PCRS_CD_SVC = "PCRS_CD_SVC_";
	/** プロパティファイルの項目取得キー（配列項目）:料金プランコード */
	private static final String ARRAYKEY_PPLAN_CD_SVC = "PPLAN_CD_SVC_";
	/** プロパティファイルの項目取得キー（配列項目）:料金コースコード（機器） */
	private static final String ARRAYKEY_PCRS_CD_KIKI = "PCRS_CD_KIKI_";
	/** プロパティファイルの項目取得キー（配列項目）:料金プランコード（機器） */
	private static final String ARRAYKEY_PPLAN_CD_KIKI = "PPLAN_CD_KIKI_";

	// プロパティファイルの項目取得キー
	/** プロパティファイルの項目取得キー:料金シミュレーション */
	private static final String KEY_TITLE_PRC_SIML = "TITLE_TRITORY_PRC_SIML";
	/** プロパティファイルの項目取得キー:サービス選択 */
	private static final String KEY_TITLE_SVC_CHOICE = "TITLE_TRITORY_SVC_CHOICE";

	/** プロパティファイルの項目取得キー:サービス契約内訳<eoモバイル>登録SC２（EKK0201D010）呼び出す、料金コースコード取得 */
	private static final String KEY_SVC_CALL_EKK0201D010_2 = "SVC_CALL_EKK0201D010_2";
	/** プロパティファイルの項目取得キー:機器提供サービス契約登録SC１（EKK0341D010）呼び出す、料金コースコード取得 */
	private static final String KEY_SVC_CALL_EKK0341D010_1 = "SVC_CALL_EKK0341D010_1";
	/** プロパティファイルの項目取得キー:機器提供サービス契約登録SC２（EKK0341D010）呼び出す、料金コースコード取得 */
	private static final String KEY_SVC_CALL_EKK0341D010_2 = "SVC_CALL_EKK0341D010_2";

	/** プロパティファイルの項目取得キー:料金コースコード（機器）（追加分） */
	private static final String PCRS_CD_ADD_KIKI = "PCRS_CD_ADD_KIKI";
	/** プロパティファイルの項目取得キー:料金プランコード（機器）（追加分） */
	private static final String PPLAN_CD_ADD_KIKI = "PPLAN_CD_ADD_KIKI";
	/** プロパティファイルの項目取得キー:機器提供サービスコード（機器）（追加分） */
	private static final String KKTK_SVC_CD_ADD = "KKTK_SVC_CD_ADD";

	/** 属性名 */
	private static final String QUERY_ATTR_NAME = "id";

	/** モバイルコース情報取得文字列 */
	private static final String MOBILE_COURSE_INFO = "MOBILE_COURSE_INFO_";
	/** グループID置換用文字列 */
	private static final String GROUPID_REPLACE_STR = "GROUPID_REPLACE_STR";

	/** 各種フラグ:表示 */
	private static final String FLG_DSP = "1";
	/** 各種フラグ:非表示 */
	private static final String FLG_HIDSP = "0";

	/** ボディ領域(コース選択)表示パターン:コース選択を全て表示「1」 */
	private static final String COURSE_CHOICE_PATTERN_ALLDSP = "1";
	/** ボディ領域(コース選択)表示パターン:モバイルコース(3G 7.2M)、モバイルコース(3G 21M)のみ表示「2」 */
	private static final String COURSE_CHOICE_PATTERN_3GDSP = "2";
	/** ボディ領域(コース選択)表示パターン:コース選択を全て非表示「3」 */
	private static final String COURSE_CHOICE_PATTERN_ALLHIDSP = "3";

	/** モバイルコース種類:3G */
	private static final String MOBILE_COURSE_KIND_3G = "3G";
	/** モバイルコース種類:WiMAX */
	private static final String MOBILE_COURSE_KIND_WIMAX = "WiMAX";

	/** 各種選択サービス:選択「1」 */
	private static final String SELECT_SVC_CHOICE = "1";

	/** 通信機器タイプ ルータタイプ（ＷｉＭＡＸ） */
	private static final String MOBILE_KIKI_ROUTER_WIMAX = "3";

	/** 通信機器タイプ USBタイプ（ＷｉＭＡＸ） */
	private static final String MOBILE_KIKI_USB_WIMAX = "4";

	/** 遷移画面IDキー */
	private static final String SET_SCREEN_ID = "SET_SCREEN_ID";
	/** 遷移画面名キー */
	private static final String SET_SCREEN_NAME = "SET_SCREEN_NAME";

	/** 区切り文字 */
	private static final String SPLIT_STR = ",";

	/** テキストID */
	private static final String ACTION = "ACTION";

	/**
	 * 初期処理
	 * 
	 * @return 必ずtrue
	 * @throws Exception
	 */
	public boolean init() throws Exception
	{
		X31CHashMap posted_requests = null;
		// ---- 共有フォームbean ----
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// ---- サービスフォームbean ----
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// 共有フォームBean.ＷＥＢ新規情報
		X31SDataBeanAccess webNewInfoBean = getX31SDataBeanAccess(commoninfoBean, CommonInfoCFConst.WEB_NEW_INFO);
		// 共有フォームBean.リダイレクト情報
		X31SDataBeanAccess tmpRedirectInfoBean = getX31SDataBeanAccessInPath(webNewInfoBean, CommonInfoCFConst.REDIRECT_INFO);

		// ●共有フォームBeanよりＷＥＢ新規情報を取得する。
		Map<String, Object> resultMap = getCommoninfoBeanInfo(commoninfoBean);

		// IT2-2012-1790 2012/11/26 Otsuka
		// 共有フォームBean.リダイレクト情報 ナビゲータパターン
		String redTransferPtn = (String)resultMap.get(CommonInfoCFConst.NAVIGATOR_PTN_17);
		// 共有フォームBean.ｅｏモバイル モバイルコース
		String mobileCourseCode = (String)resultMap.get(CommonInfoCFConst.MOBILE_COURSE_14);
		// 共有フォームBean.ｅｏモバイル 通信機器タイプ
		String mobileKiki = (String)resultMap.get(CommonInfoCFConst.MOBILE_KIKI_14);
		// 選択サービスネット
		String selectSvcNet = (String)resultMap.get(CommonInfoCFConst.SELECT_SVC_NET_10);

		// ●各項目、ボタンの表示制御処理

		// ●ナビゲータ領域表示制御処理
		if (JFUStrConst.NAVI_PTN_SIML.equals(redTransferPtn)) // IT2-2012-1790 2012/11/26 Otsuka
		{
			// 共有フォームBean.リダイレクト情報.遷移パターンが「2:料金シミュレーション」の場合、非表示
			bean.sendMessageString(FUW00915SFConst.NAVI_TRITORY_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, FLG_HIDSP);
		}
		else
		{
			// 上記以外の場合、表示
			bean.sendMessageString(FUW00915SFConst.NAVI_TRITORY_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, FLG_DSP);
		}

		// ●ボディ領域(コース選択)表示制御判定処理
		String courseChoiceDspPattern = null;

		// 3Gの場合
		if (JFUStrConst.MOBILE_COURSE_3G_UNDECIDED.equals(mobileCourseCode) || JFUStrConst.MOBILE_COURSE_3G_7_2M.equals(mobileCourseCode)
				|| JFUStrConst.MOBILE_COURSE_3G_21M.equals(mobileCourseCode) || JFUStrConst.MOBILE_COURSE_3G_HHB.equals(mobileCourseCode)
				|| JFUStrConst.MOBILE_COURSE_3G_21M_HHB.equals(mobileCourseCode))
		{
			// 選択サービス（ネット）が1の場合
			if ("1".equals(selectSvcNet))
			{
				// 3Gをすべて表示
				courseChoiceDspPattern =
						bean.sendMessageString(FUW00915SFConst.COURSE_CHOICE_DSP_PATTERN, X31CWebConst.DATABEAN_SET_VALUE,
								COURSE_CHOICE_PATTERN_ALLDSP);
			}
			else
			{
				// 7.2M,21Mのみ表示
				courseChoiceDspPattern =
						bean.sendMessageString(FUW00915SFConst.COURSE_CHOICE_DSP_PATTERN, X31CWebConst.DATABEAN_SET_VALUE,
								COURSE_CHOICE_PATTERN_3GDSP);
			}
		}
		else
		{
			// 共有フォームBean.画面遷移モードが「1:確認画面遷移」 
			// "3"(コース選択を全て非表示)を設定
			courseChoiceDspPattern =
					bean
							.sendMessageString(FUW00915SFConst.COURSE_CHOICE_DSP_PATTERN, X31CWebConst.DATABEAN_SET_VALUE,
									COURSE_CHOICE_PATTERN_ALLHIDSP);
		}

		// ●ボディ領域(Wi-Fi 説明)表示制御処理
		if (JFUStrConst.MOBILE_COURSE_WIFI.equals(mobileCourseCode))
		{
			// 共有フォームBean.ｅｏモバイル.モバイルコースが「1: WiFi」の場合、
			// 表示
			bean.sendMessageString(FUW00915SFConst.WIFI_SETMEI_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, FLG_DSP);
		}
		else
		{
			// 上記以外の場合、非表示
			bean.sendMessageString(FUW00915SFConst.WIFI_SETMEI_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, FLG_HIDSP);
		}

		// ●ボディ領域(WiMAX 説明)表示制御処理
		if (JFUStrConst.MOBILE_COURSE_WIMAX.equals(mobileCourseCode))
		{
			// 共有フォームBean.ｅｏモバイル.モバイルコースが「5: WiMAX」の場合、表示
			bean.sendMessageString(FUW00915SFConst.WIMAX_SETMEI_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, FLG_DSP);
		}
		else
		{
			// 上記以外の場合、非表示
			bean.sendMessageString(FUW00915SFConst.WIMAX_SETMEI_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, FLG_HIDSP);
		}

		// ●ボディ領域(通信機器選択)表示制御処理
		if (JFUStrConst.MOBILE_COURSE_WIMAX.equals(mobileCourseCode))
		{
			// 共有フォームBean.ｅｏモバイル.モバイルコースが「5: WiMAX」の場合、表示
			bean.sendMessageString(FUW00915SFConst.TSUSHIN_KIKI_CHOICE_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, FLG_DSP);
		}

		// ●プロパティ情報の取得処理
		// ●ボディ領域(コース選択)表示制御処理
		// ●ボディ領域(コース選択)表示パターン判定処理
		HashSet<String> selectKeyKindSet = null;
		String rtnMobileCourseSkbt = null;
		if (COURSE_CHOICE_PATTERN_ALLDSP.equals(courseChoiceDspPattern))
		{
			// ボディ領域(コース選択)表示パターン:コース選択を全て表示「1」の場合
			selectKeyKindSet = new HashSet<String>();
			selectKeyKindSet.add(MOBILE_COURSE_KIND_3G);
			selectKeyKindSet.add("3G HBD");
			rtnMobileCourseSkbt = getSetMobileCourseList(bean, selectKeyKindSet, mobileCourseCode);
			// 選択されていたモバイルコースコードを設定する。
			bean.sendMessageString(FUW00915SFConst.CHOICE_MOBILE_COURSE_CODE, X31CWebConst.DATABEAN_SET_VALUE, mobileCourseCode);
		}
		else if (COURSE_CHOICE_PATTERN_3GDSP.equals(courseChoiceDspPattern))
		{

			// ボディ領域(コース選択)表示パターン:モバイルコース(3G 7.2M)、モバイルコース(3G 21M)のみ表示「2」の場合
			selectKeyKindSet = new HashSet<String>();
			selectKeyKindSet.add(MOBILE_COURSE_KIND_3G);
			rtnMobileCourseSkbt = getSetMobileCourseList(bean, selectKeyKindSet, mobileCourseCode);
			// 選択されていたモバイルコースコードを設定する。
			bean.sendMessageString(FUW00915SFConst.CHOICE_MOBILE_COURSE_CODE, X31CWebConst.DATABEAN_SET_VALUE, mobileCourseCode);
		}
		else if (COURSE_CHOICE_PATTERN_ALLHIDSP.equals(courseChoiceDspPattern))
		{
			// ボディ領域(コース選択)表示パターン:コース選択を全て非表示「3」
			rtnMobileCourseSkbt = getSetMobileCourseList(bean, selectKeyKindSet, mobileCourseCode);
			// 選択されていたモバイルコースコードを設定する。
			bean.sendMessageString(FUW00915SFConst.CHOICE_MOBILE_COURSE_CODE, X31CWebConst.DATABEAN_SET_VALUE, mobileCourseCode);
			// 選択されていたモバイルコースコードから取得した選択されたモバイルコース識別子を設定する。
			bean.sendMessageString(FUW00915SFConst.CHOICE_MOBILE_COURSE, X31CWebConst.DATABEAN_SET_VALUE, rtnMobileCourseSkbt);
		}

		// 表示タイトルの設定
		if (JFUStrConst.NAVI_PTN_SIML.equals(redTransferPtn)) // IT2-2012-1790 2012/11/26 Otsuka
		{
			// 共有フォームBean.リダイレクト情報.遷移パターンが「2:料金シミュレーション」の場合、
			bean.sendMessageString(FUW00915SFConst.TITLE_TRITORY, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon.getDispText(
					JFUScreenConst.SCREEN_ID_FUW00915, KEY_TITLE_PRC_SIML));
		}
		else
		{
			// 上記以外の場合 「サービス選択」を表示
			bean.sendMessageString(FUW00915SFConst.TITLE_TRITORY, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon.getDispText(
					JFUScreenConst.SCREEN_ID_FUW00915, KEY_TITLE_SVC_CHOICE));
		}

		// ●選択されたモバイルコース、選択された選択された通信機器タイプの設定処理
		// 選択されたモバイルコース
		bean.sendMessageString(FUW00915SFConst.CHOICE_MOBILE_COURSE, X31CWebConst.DATABEAN_SET_VALUE, rtnMobileCourseSkbt);
		// 選択された選択された通信機器タイプ
		bean.sendMessageString(FUW00915SFConst.CHOICE_TSUSHIN_KIKI_TYPE, X31CWebConst.DATABEAN_SET_VALUE, rtnTsushinKikiTypeWimax(mobileKiki,
				mobileCourseCode));

		// ●遷移先画面の設定
		// 画面機能の先頭になる場合の固定ロジック
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon.getScreenId(this));

		// ■POSTされてきたパラメータを取得します(本来の画面機能)
		posted_requests = this.getRequestParams();
		// WEBアクセス認証キーのMapキーを取得
		String mapKey = JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00915, ACTION);
		// WEBアクセス認証キーを取得
		if (posted_requests.containsKey(mapKey))
		{
			String actionKey = (String)posted_requests.get(mapKey);
			// アクションを設定
			tmpRedirectInfoBean.sendMessageString(CommonInfoCFConst.RED_ACTION_17, X31CWebConst.DATABEAN_SET_VALUE, actionKey);
		}

		return true;
	}

	/**
	 * 申込画面の次へボタン押下
	 * 
	 * @return 必ずtrue
	 * @throws Exception
	 */
	public boolean next() throws Exception
	{
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// ●「次へボタン・確認画面に戻るボタン押下時共通処理(commonNextBackKakunin)」メソッドに処理を委譲する。
		commonNextBackKakunin(commoninfoBean, bean);

		// 遷移先の画面ID・遷移元の画面IDを設定する。
		JFUWebCommon.setScreenId(this, JFUScreenConst.SCREEN_ID_FUW00926, JFUScreenConst.SCREEN_ID_FUW00915);

		// 遷移先画面IDを設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00926);
		// 遷移先画面名を設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00926);

		return true;
	}

	/**
	 * モバイルコースが３Gの場合trueを返します。
	 * 
	 * <br>
	 * @param course
	 * @return
	 */
	private boolean is3G(String course)
	{
		if (JFUStrConst.MOBILE_COURSE_3G_7_2M.equals(course))
		{
			return true;
		}
		if (JFUStrConst.MOBILE_COURSE_3G_21M.equals(course))
		{
			return true;
		}
		if (JFUStrConst.MOBILE_COURSE_3G_HHB.equals(course))
		{
			return true;
		}
		if (JFUStrConst.MOBILE_COURSE_3G_21M_HHB.equals(course))
		{
			return true;
		}
		return false;
	}

	/**
	 * 戻るボタン押下
	 * 
	 * @return 必ずtrue
	 * @throws Exception
	 */
	public boolean back() throws Exception
	{
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// ●共有フォームBean設定処理
		X31SDataBeanAccess webNewInfoBean = getX31SDataBeanAccess(commoninfoBean, CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess eomobileInfoBean = getX31SDataBeanAccessInPath(webNewInfoBean, CommonInfoCFConst.EOMOBILE);
		X31SDataBeanAccess tmpRedirectInfoBean = getX31SDataBeanAccessInPath(webNewInfoBean, CommonInfoCFConst.REDIRECT_INFO);

		webNewInfoBean.sendMessageString(CommonInfoCFConst.SCREEN_MODE_06, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.SCREEN_MODE_DEF);

		/**
		 * eoモバイルコースが３G系の場合は「3G 未定」に書き換える。
		 */
		if (is3G(eomobileInfoBean.sendMessageString(CommonInfoCFConst.MOBILE_COURSE_14, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			eomobileInfoBean.sendMessageString(CommonInfoCFConst.MOBILE_COURSE_14, X31CWebConst.DATABEAN_SET_VALUE,
					JFUStrConst.MOBILE_COURSE_3G_UNDECIDED);
		}

		eomobileInfoBean.sendMessageString(CommonInfoCFConst.MOBILE_KIKI_14, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);

		tmpRedirectInfoBean.sendMessageString(CommonInfoCFConst.RED_WIMAXROM_17, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);

		// ●共有フォームBeanよりＷＥＢ新規情報を取得する。
		Map<String, Object> resultMap = getCommoninfoBeanInfo(commoninfoBean);

		String selectSvcTv = (String)resultMap.get(CommonInfoCFConst.SELECT_SVC_TV_10);
		String selectSvcTel = (String)resultMap.get(CommonInfoCFConst.SELECT_SVC_TEL_10);
		String selectSvcNet = (String)resultMap.get(CommonInfoCFConst.SELECT_SVC_NET_10);

		// 遷移先画面情報取得
		Map<String, String> seniScreenInfoMap = chkSeniJudgeJokenBack(selectSvcTv, selectSvcTel, selectSvcNet);
		// 遷移先画面IDを設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, seniScreenInfoMap.get(SET_SCREEN_ID));
		// 遷移先画面名を設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, seniScreenInfoMap.get(SET_SCREEN_NAME));

		return true;
	}

	/**
	 * 確認画面に戻るボタン押下
	 * 
	 * @return 必ずtrue
	 * @throws Exception
	 */
	public boolean backKakunin() throws Exception
	{
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// ●「次へボタン・確認画面に戻るボタン押下時共通処理(commonNextBackKakunin)」メソッドに処理を委譲する。
		commonNextBackKakunin(commoninfoBean, bean);

		// 遷移先画面IDを設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00926);

		// 遷移先画面名を設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00926);

		return true;
	}

	/**
	 * 料金シミュレーションを呼び出します。
	 * 
	 * @return true
	 * @throws Exception
	 */
	public boolean ryokin() throws Exception
	{
		// 料金シミュレーション共通部品を呼び出し
		JFUWebCommon.ryokin(this);

		return true;
	}

	/**
	 * 次へボタン・確認画面に戻るボタン押下時共通処理
	 * 
	 * @param commoninfoBean
	 * @param bean
	 * @return true
	 * @throws Exception
	 */
	private boolean commonNextBackKakunin(X31SDataBeanAccess commoninfoBean, X31SDataBeanAccess bean) throws Exception
	{
		// ●共有フォームBeanよりＷＥＢ新規情報を取得する。
		Map<String, Object> resultMap = getCommoninfoBeanInfo(commoninfoBean);

		// 共有フォームBean.ｅｏモバイル.ＭＡＣアドレス
		String macAddress = (String)resultMap.get(CommonInfoCFConst.MAC_ADDRESS_14);
		// 共有フォームBean.リダイレクト情報.紹介者コード
		String redIntroduce = (String)resultMap.get(CommonInfoCFConst.RED_INTRODUCE_17);

		// コード種別 異動区分 新規契約を設定
		bean.sendMessageString(FUW00915SFConst.IDO_DIV, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00576_00001);

		// ●リダイレクト情報の取得・設定処理
		// 紹介コードを設定
		bean.sendMessageString(FUW00915SFConst.INTR_CD, X31CWebConst.DATABEAN_SET_VALUE, redIntroduce);
		// ＭＡＣアドレスを設定
		bean.sendMessageString(FUW00915SFConst.MACAD, X31CWebConst.DATABEAN_SET_VALUE, macAddress);

		// ●選択されたモバイルコース、選択された通信機器に紐づくコース選択情報の取得処理
		// 画面で選択された選択されたモバイルコースを取得する。
		String choiceMobileCourse = bean.sendMessageString(FUW00915SFConst.CHOICE_MOBILE_COURSE, X31CWebConst.DATABEAN_GET_VALUE);
		String redWimaxrom = (String)resultMap.get(CommonInfoCFConst.RED_WIMAXROM_17);
		String choiceTsushinKikiType = bean.sendMessageString(FUW00915SFConst.CHOICE_TSUSHIN_KIKI_TYPE, X31CWebConst.DATABEAN_GET_VALUE);

		// モバイルコースリストを取得
		X31SDataBeanAccessArray mobileCourseList = bean.getDataBeanArray(FUW00915SFConst.MOBILE_COURSE_LIST);

		// モバイルコース(選択)の情報済み取得フラグ
		boolean choiceMobileCourseInfoGetFlg = false;

		for (int i = 0; i < mobileCourseList.getCount(); i++)
		{
			// 選択されたモバイルコースの情報とWifiの情報が両方取得できた場合は繰り返し処理を終了する。
			if (choiceMobileCourseInfoGetFlg)
			{
				break;
			}

			// "モバイルコースリスト" + "/n"
			X31SDataBeanAccess mobileCourseBean =
					JFUWebCommon.getDataBeanTypeByPath(bean, FUW00915SFConst.MOBILE_COURSE_LIST + JFUWebCommon.SEP_N_LAST, i);
			// "モバイルコース識別子"
			String mobileCourseSkbt = JFUWebCommon.getDataBeanItemByPath(mobileCourseBean, FUW00915SFConst.MOBILE_COURSE_SKBT_01);

			// "モバイルコースコード"
			String mobileCourseCode = JFUWebCommon.getDataBeanItemByPath(mobileCourseBean, FUW00915SFConst.MOBILE_COURSE_CODE_01);

			// Wi-Fiの情報を取得する。
			if (JFUStrConst.MOBILE_COURSE_WIFI.equals(mobileCourseCode))
			{
				// Ｗｉ−Ｆｉ用料金コースコード
				String wifiPcrsCd = mobileCourseBean.sendMessageString(FUW00915SFConst.PCRS_CD_01, X31CWebConst.DATABEAN_GET_VALUE, 0);
				bean.sendMessageString(FUW00915SFConst.WIFI_PCRS_CD, X31CWebConst.DATABEAN_SET_VALUE, wifiPcrsCd);

				// Ｗｉ−Ｆｉ用料金プランコード
				String wifiPplanCd = mobileCourseBean.sendMessageString(FUW00915SFConst.PPLAN_CD_01, X31CWebConst.DATABEAN_GET_VALUE, 0);
				bean.sendMessageString(FUW00915SFConst.WIFI_PPLAN_CD, X31CWebConst.DATABEAN_SET_VALUE, wifiPplanCd);

			}

			if (!mobileCourseSkbt.equals(choiceMobileCourse))
			{
				continue;
			}
			else
			{
				choiceMobileCourseInfoGetFlg = true;

				// "モバイルコースコード"
				bean.sendMessageString(FUW00915SFConst.CHOICE_MOBILE_COURSE_CODE, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon
						.getDataBeanItemByPath(mobileCourseBean, FUW00915SFConst.MOBILE_COURSE_CODE_01));

				// "サービスコード"
				bean.sendMessageString(FUW00915SFConst.CHOICE_SVC_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon.getDataBeanItemByPath(
						mobileCourseBean, FUW00915SFConst.SVC_CD_01));
				// "料金グループコード"
				bean.sendMessageString(FUW00915SFConst.CHOICE_PRC_GRP_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon.getDataBeanItemByPath(
						mobileCourseBean, FUW00915SFConst.PRC_GRP_CD_01));

				// 料金コースコード
				int pcrsCdYosoCnt = 0;
				int pPlanYosoCnt = 0;
				int kikiPcrsCdYosoCnt = 0;
				int kikiPplanYosoCnt = 0;

				// "モバイルコース種類"
				String mobileCourseKind = JFUWebCommon.getDataBeanItemByPath(mobileCourseBean, FUW00915SFConst.MOBILE_COURSE_KIND_01);

				// モバイルコース種類が「WiMAX」の場合
				if (MOBILE_COURSE_KIND_WIMAX.equals(mobileCourseKind))
				{
					int yosoCnt = isNullOrEmpty(redWimaxrom) ? Integer.parseInt(JFUStrConst.WIMAXROM_BLACK) : Integer.parseInt(redWimaxrom);
					pcrsCdYosoCnt = yosoCnt;
					pPlanYosoCnt = yosoCnt;
				}

				// 料金コースコード
				String choicePcrsCd = mobileCourseBean.sendMessageString(FUW00915SFConst.PCRS_CD_01, X31CWebConst.DATABEAN_GET_VALUE, pcrsCdYosoCnt);
				bean.sendMessageString(FUW00915SFConst.CHOICE_PCRS_CD, X31CWebConst.DATABEAN_SET_VALUE, choicePcrsCd);

				// 料金プランコード
				String choicePplanCd = mobileCourseBean.sendMessageString(FUW00915SFConst.PPLAN_CD_01, X31CWebConst.DATABEAN_GET_VALUE, pPlanYosoCnt);
				bean.sendMessageString(FUW00915SFConst.CHOICE_PPLAN_CD, X31CWebConst.DATABEAN_SET_VALUE, choicePplanCd);

				// "機器提供サービスコード"
				bean.sendMessageString(FUW00915SFConst.CHOICE_KKTK_SVC_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon.getDataBeanItemByPath(
						mobileCourseBean, FUW00915SFConst.KKTK_SVC_CD_01));

				// ●通信機器タイプ再設定処理
				// モバイルコースコードが「モバイルコース 3G 7.2M光ハイブリッド」の場合
				if (JFUStrConst.MOBILE_COURSE_3G_HHB.equals(mobileCourseCode))
				{
					choiceTsushinKikiType = JFUStrConst.MOBILE_KIKI_HYBRID;

					// 機器2台目分設定
					// 機器提供サービスコード２　　JFUStrConst.KK0771_KKTK_SVC_CD_C016
					bean.sendMessageString(FUW00915SFConst.CHOICE_KKTK_SVC_CD2, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon.getDispText(
							JFUScreenConst.SCREEN_ID_FUW00915, KKTK_SVC_CD_ADD));

					// 機器用料金コースコード２
					bean.sendMessageString(FUW00915SFConst.CHOICE_PCRS_CD_KIKI2, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon.getDispText(
							JFUScreenConst.SCREEN_ID_FUW00915, PCRS_CD_ADD_KIKI));
					// 機器用料金プランコード２
					bean.sendMessageString(FUW00915SFConst.CHOICE_PPLAN_CD_KIKI2, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon.getDispText(
							JFUScreenConst.SCREEN_ID_FUW00915, PPLAN_CD_ADD_KIKI));
				}
				// モバイルコースコードが21M光ハイブリッド」の場合
				else if (JFUStrConst.MOBILE_COURSE_3G_21M_HHB.equals(mobileCourseCode))
				{
					choiceTsushinKikiType = JFUStrConst.MOBILE_KIKI_HYBRID;

					// 21M光ハイブリッドの場合は機器が1つのため２台目の設定は行わない。
				}
				// モバイルコースコードが「モバイルコース 3G（21M）」の場合
				else if (JFUStrConst.MOBILE_COURSE_3G_21M.equals(mobileCourseCode))
				{
					choiceTsushinKikiType = JFUStrConst.MOBILE_KIKI_USB;

				}
				//【ANK-1526-00-00】7.2Mルータ枯渇対応、【ANK-1527-00-00】21MUSB提供終了対応 >>>
				// モバイルコースコードが「モバイルコース 3G（7.2M）」の場合
				else if (JFUStrConst.MOBILE_COURSE_3G_7_2M.equals(mobileCourseCode))
				{
					choiceTsushinKikiType = JFUStrConst.MOBILE_KIKI_USB;
				}
				//【ANK-1526-00-00】7.2Mルータ枯渇対応、【ANK-1527-00-00】21MUSB提供終了対応 <<<E

				else if (!getSvcCallIdEkk0341d010_1().contains(choicePcrsCd))
				{
					// 上記以外で機器提供サービス契約登録SC（EKK0341D010）サービスを呼びださない料金コースコードの場合
					choiceTsushinKikiType = "";
				}

				// 画面で通信機器を選択していた場合
				if (!isNullOrEmpty(choiceTsushinKikiType))
				{
					int kikiYosoCnt = Integer.parseInt(rtnTsushinKikiType(choiceTsushinKikiType, mobileCourseCode)) - 1;
					kikiPcrsCdYosoCnt = kikiYosoCnt;
					kikiPplanYosoCnt = kikiYosoCnt;

					// 機器用料金コースコード
					String choicePcrsCdKiki =
							mobileCourseBean.sendMessageString(FUW00915SFConst.PCRS_CD_KIKI_01, X31CWebConst.DATABEAN_GET_VALUE, kikiPcrsCdYosoCnt);
					bean.sendMessageString(FUW00915SFConst.CHOICE_PCRS_CD_KIKI, X31CWebConst.DATABEAN_SET_VALUE, choicePcrsCdKiki);

					// 機器用料金プランコード
					String choicePplanCdKiki =
							mobileCourseBean.sendMessageString(FUW00915SFConst.PPLAN_CD_KIKI_01, X31CWebConst.DATABEAN_GET_VALUE, kikiPplanYosoCnt);
					bean.sendMessageString(FUW00915SFConst.CHOICE_PPLAN_CD_KIKI, X31CWebConst.DATABEAN_SET_VALUE, choicePplanCdKiki);
				}
			}
		}
		// ●サービス呼び出し処理
		// eoモバイル入力チェックサービスの呼び出しを行う。

		// ユースケースID格納用マップを生成。
		HashMap<String, String> paramMap = new HashMap<String, String>(16);
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0150);
		paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, OPERATION_ID_FUSV0150);

		FUSV0150_FUSV0150OPDBMapper mapper = new FUSV0150_FUSV0150OPDBMapper();

		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		X31SDataBeanAccess[] paramBean = { bean };

		// サービス契約<eoモバイル>登録SC
		mapper.setFUSV015001SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_2);
		// サービス契約内訳<eoモバイル>登録SC
		mapper.setFUSV015002SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_2);
		// サービス契約内訳<eoモバイル>登録SC
		mapper.setFUSV015003SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_2, getSvcCallIdEkk0201d010_2());
		// 機器提供サービス契約登録SC
		mapper.setFUSV015004SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_2, getSvcCallIdEkk0341d010_1());
		// 機器提供サービス契約登録SC
		mapper.setFUSV015005SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_2, getSvcCallIdEkk0341d010_2());

		// 検索結果格納用マップを生成。
		HashMap<Object, Object> outputMap = new HashMap<Object, Object>();
		try
		{
			// サービスの呼び出しを行う。
			X31CMessageResult msgResult = invokeService(paramMap, dataMap, outputMap);
			if (msgResult != null)
			{
				JCCWebCommon.setMessageInfo(this, msgResult);
			}

			// ●サービス処理結果の取得
		}
		catch (JCCWebServiceException se)
		{
			// 例外情報を取得
			X31CMessageResult msgResult = se.getMessageList();
			X31CMessageMoreInfo[] moreInfo = msgResult.getMessageMoreInfoList();
			X31CMessageMoreInfo info = moreInfo[0];// 関連チェック系は必ずエラーが1つのため0番目から取得する。
			String status = info.getStatus();

			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) || String.valueOf(JPCModelConstant.ENTITY_RELATION_ERR).equals(status))
			{
				// 特定のエラーの場合は業務用例外クラスをthrowする。
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
			}
			if (String.valueOf(JPCModelConstant.TEMPLATE_CORRELATION_ERR).equals(status)
					|| String.valueOf(JPCModelConstant.ENTITY_CORRELATION_ERR).equals(status))
			{
				// 特定のエラーの場合は業務用例外クラスをthrowする。
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
			}

			// 業務エラーを再throw
			throw se;
		}

		// ●共有フォームBean設定処理
		X31SDataBeanAccess webNewInfoBean = getX31SDataBeanAccess(commoninfoBean, CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess eomobileInfo = getX31SDataBeanAccessInPath(webNewInfoBean, CommonInfoCFConst.EOMOBILE);

		String choiceMobileCourseCode = bean.sendMessageString(FUW00915SFConst.CHOICE_MOBILE_COURSE_CODE, X31CWebConst.DATABEAN_GET_VALUE);

		// 当画面で「モバイルコース WiMAX 」が選択された場合
		if (JFUStrConst.MOBILE_COURSE_WIMAX.equals(choiceMobileCourseCode) && isNullOrEmpty(redWimaxrom))
		{
			X31SDataBeanAccess tmpRedirectInfoBean = getX31SDataBeanAccessInPath(webNewInfoBean, CommonInfoCFConst.REDIRECT_INFO);
			// 「WiMAXROM 黒ロム 」を設定する。
			tmpRedirectInfoBean.sendMessageString(CommonInfoCFConst.RED_WIMAXROM_17, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.WIMAXROM_BLACK);
		}

		eomobileInfo.sendMessageString(CommonInfoCFConst.MOBILE_COURSE_14, X31CWebConst.DATABEAN_SET_VALUE, choiceMobileCourseCode);
		// ●モバイルコース名取得処理
		Map<String, String> mobileServiceNameMap = JFUWebCommon.getDispItemsAsMap(MOBILE_SERVICE_NAME, QUERY_ATTR_NAME);
		// モバイルコース名
		eomobileInfo.sendMessageString(CommonInfoCFConst.MOBILE_COURSE_NM_14, X31CWebConst.DATABEAN_SET_VALUE, mobileServiceNameMap.get(choiceMobileCourseCode));
		
		// 通信機器タイプ
		String mobileKiki = rtnTsushinKikiType(choiceTsushinKikiType, choiceMobileCourseCode);
		eomobileInfo.sendMessageString(CommonInfoCFConst.MOBILE_KIKI_14, X31CWebConst.DATABEAN_SET_VALUE, mobileKiki);
		// ●モバイル機器名取得処理
		Map<String, String> mobileKikiNameMap = JFUWebCommon.getDispItemsAsMap(MOBILE_KIKI_NAME, QUERY_ATTR_NAME);
		// モバイル機器タイプ名
		eomobileInfo.sendMessageString(CommonInfoCFConst.MOBILE_KIKI_NM_14, X31CWebConst.DATABEAN_SET_VALUE, mobileKikiNameMap.get(mobileKiki));

		// ●引継情報の作成
		webNewInfoBean.sendMessageString(CommonInfoCFConst.SCREEN_MODE_06, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.SCREEN_MODE_DEF);

		// ●共有フォームBeanよりＷＥＢ新規情報を再取得する。
		getCommoninfoBeanInfo(commoninfoBean);

		return true;
	}

	/**
	 * Null又は空文字かどうかを判定する。
	 * 
	 * @param value
	 * @return （true:null、または空文字、false:null、または空文字以外）
	 */
	private boolean isNullOrEmpty(String value)
	{
		return null == value || "".equals(value) || "null".equals(value);
	}

	/**
	 * 指定した階層のデータBeanリストから0番目のデータBeanを取得する。 <BR>
	 * 
	 * @param bean
	 * @param componentIDPath
	 * @return 取得したデータBean
	 */
	private X31SDataBeanAccess getX31SDataBeanAccessInPath(X31SDataBeanAccess bean, String componentIDPath)
	{
		X31SDataBeanAccess subBean = bean;
		String[] componentIDArray = componentIDPath.split("/");
		int componentIDCount = componentIDArray.length;
		for (int i = 0; i < componentIDCount; i++)
		{
			if (!"".equals(componentIDArray[i]))
			{
				subBean = getX31SDataBeanAccess(subBean, componentIDArray[i]);
			}
		}
		return subBean;
	}

	/**
	 * データBeanリストから0番目のデータBeanを取得する。 <BR>
	 * 
	 * @param bean
	 * @param componentID
	 * @return 取得したデータBean
	 */
	private X31SDataBeanAccess getX31SDataBeanAccess(X31SDataBeanAccess bean, String componentID)
	{
		X31SDataBeanAccessArray subBeanArray = bean.getDataBeanArray(componentID);
		X31SDataBeanAccess subBean = subBeanArray.getDataBean(0);
		if (null == subBean)
		{
			subBeanArray.addDataBean();
			subBean = subBeanArray.getDataBean(0);
		}
		return subBean;
	}

	/**
	 * 共有フォームBeanの情報を取得する。 <BR>
	 * 
	 * @param commoninfoBean
	 * @param fixMlad
	 * @return 取得した情報を保持したマップ
	 */
	private Map<String, Object> getCommoninfoBeanInfo(X31SDataBeanAccess commoninfoBean)
	{
		Map<String, Object> resultMap = new HashMap<String, Object>();

		// ●共有フォームBeanよりＷＥＢ新規情報を取得する。
		// ＷＥＢ新規情報
		X31SDataBeanAccess webNewInfoBean = getX31SDataBeanAccess(commoninfoBean, CommonInfoCFConst.WEB_NEW_INFO);
		String screenMode = webNewInfoBean.sendMessageString(CommonInfoCFConst.SCREEN_MODE_06, X31CWebConst.DATABEAN_GET_VALUE);
		resultMap.put(CommonInfoCFConst.SCREEN_MODE_06, screenMode);

		String sysid = webNewInfoBean.sendMessageString(CommonInfoCFConst.SYSID_06, X31CWebConst.DATABEAN_GET_VALUE);
		resultMap.put(CommonInfoCFConst.SYSID_06, sysid);

		// リダイレクト情報
		X31SDataBeanAccess tmpRedirectInfoBean = getX31SDataBeanAccessInPath(webNewInfoBean, CommonInfoCFConst.REDIRECT_INFO);

		// IT2-2012-1790 2012/11/26 Otsuka start
		String redTransferPtn = tmpRedirectInfoBean.sendMessageString(CommonInfoCFConst.NAVIGATOR_PTN_17, X31CWebConst.DATABEAN_GET_VALUE);
		resultMap.put(CommonInfoCFConst.NAVIGATOR_PTN_17, redTransferPtn);
		// IT2-2012-1790 2012/11/26 Otsuka end

		String redIntroduce = tmpRedirectInfoBean.sendMessageString(CommonInfoCFConst.RED_INTRODUCE_17, X31CWebConst.DATABEAN_GET_VALUE);
		resultMap.put(CommonInfoCFConst.RED_INTRODUCE_17, redIntroduce);
		String redWimaxrom = tmpRedirectInfoBean.sendMessageString(CommonInfoCFConst.RED_WIMAXROM_17, X31CWebConst.DATABEAN_GET_VALUE);
		resultMap.put(CommonInfoCFConst.RED_WIMAXROM_17, redWimaxrom);
		String action = tmpRedirectInfoBean.sendMessageString(CommonInfoCFConst.RED_ACTION_17, X31CWebConst.DATABEAN_GET_VALUE);
		resultMap.put(CommonInfoCFConst.RED_ACTION_17, action);

		// ｅｏモバイル情報
		X31SDataBeanAccess eomobileInfoBean = getX31SDataBeanAccessInPath(webNewInfoBean, CommonInfoCFConst.EOMOBILE);
		String mobileCourse = eomobileInfoBean.sendMessageString(CommonInfoCFConst.MOBILE_COURSE_14, X31CWebConst.DATABEAN_GET_VALUE);
		resultMap.put(CommonInfoCFConst.MOBILE_COURSE_14, mobileCourse);
		String mobileKiki = eomobileInfoBean.sendMessageString(CommonInfoCFConst.MOBILE_KIKI_14, X31CWebConst.DATABEAN_GET_VALUE);
		resultMap.put(CommonInfoCFConst.MOBILE_KIKI_14, mobileKiki);
		String macAddress = eomobileInfoBean.sendMessageString(CommonInfoCFConst.MAC_ADDRESS_14, X31CWebConst.DATABEAN_GET_VALUE);
		resultMap.put(CommonInfoCFConst.MAC_ADDRESS_14, macAddress);
		resultMap.put(CommonInfoCFConst.EOMOBILE, eomobileInfoBean);

		// 契約サービス情報
		X31SDataBeanAccess keiyakuSvcInfoBean = getX31SDataBeanAccessInPath(webNewInfoBean, CommonInfoCFConst.KEIYAKU_SVC_INFO);
		String selectSvcTv = keiyakuSvcInfoBean.sendMessageString(CommonInfoCFConst.SELECT_SVC_TV_10, X31CWebConst.DATABEAN_GET_VALUE);
		resultMap.put(CommonInfoCFConst.SELECT_SVC_TV_10, selectSvcTv);
		String selectSvcTel = keiyakuSvcInfoBean.sendMessageString(CommonInfoCFConst.SELECT_SVC_TEL_10, X31CWebConst.DATABEAN_GET_VALUE);
		resultMap.put(CommonInfoCFConst.SELECT_SVC_TEL_10, selectSvcTel);
		String selectSvcNet = keiyakuSvcInfoBean.sendMessageString(CommonInfoCFConst.SELECT_SVC_NET_10, X31CWebConst.DATABEAN_GET_VALUE);
		resultMap.put(CommonInfoCFConst.SELECT_SVC_NET_10, selectSvcNet);

		return resultMap;
	}

	/**
	 * マップ項目をX31CVector<String>型に変換して返却する。 <BR>
	 * 
	 * @param map
	 * @param keyStr
	 * @return 取得した配列
	 */
	private X31CVector<String> getMapToList(Map<String, String> map, String keyStr)
	{
		X31CVector<String> values = new X31CVector<String>();
		for (int j = 0; j < map.size(); j++)
		{
			String getkey = keyStr + String.valueOf(j + 1);
			String value = map.get(getkey);
			values.add(value);
		}
		return values;
	}

	/**
	 * プロパティ情報(モバイルコース情報)を取得・設定する。 <BR>
	 * 
	 * @param bean
	 * @param selectKeyKindSet モバイルコース種類指定用Set 指定なし(null)の場合は、すべて取得
	 * @param choiceMobileCourseCode 選択されているモバイルコースコード
	 * @return 引数で渡されたモバイルコースコードに紐づく、モバイルコース識別子
	 * @throws Exception
	 */
	private String getSetMobileCourseList(X31SDataBeanAccess bean, HashSet<String> selectKeyKindSet, String choiceMobileCourseCode) throws Exception
	{
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// ＷＥＢ新規情報
		X31SDataBeanAccess webNewInfoBean = getX31SDataBeanAccess(commoninfoBean, CommonInfoCFConst.WEB_NEW_INFO);

		// ｅｏ光ネット
		X31SDataBeanAccess eoNetBean = getX31SDataBeanAccess(webNewInfoBean, CommonInfoCFConst.EONET);

		// 光ネットコース
		String netCourse = eoNetBean.sendMessageString(CommonInfoCFConst.NET_COURSE_11, X31CWebConst.DATABEAN_GET_VALUE);

		// モバイルコースリストを取得
		X31SDataBeanAccessArray mobileCourseList = bean.getDataBeanArray(FUW00915SFConst.MOBILE_COURSE_LIST);

		String rtnMobileCourseSkbt = null;

		// プロパティ情報の取得処理・設定処理
		for (int i = 1; true; i++)
		{
			// 取得キーを生成
			String mobileCourseInfoKey = MOBILE_COURSE_INFO + String.valueOf(i);
			String key = QUERY_COURSE_CHOICE_PATH.replace(GROUPID_REPLACE_STR, mobileCourseInfoKey);
			Map<String, String> courseChoiceMap = JFUWebCommon.getDispItemsAsMap(key, QUERY_ATTR_NAME);

			// プロパティ情報(モバイルコース情報)が取得できない場合
			if (null == courseChoiceMap || 0 == courseChoiceMap.size())
			{
				if (1 == i)
				{
					// 一件も取得できない場合
					X31SWebLog.DEBUG_LOG.debug("プロパティが正しく設定されていません。");
				}
				break;
			}

			// ●FUW00915SF.モバイルコースリスト設定処理
			// ●通常項目
			String mobileCourseSkbt = mobileCourseInfoKey;
			String mobileCourseKind = courseChoiceMap.get(KEY_MOBILE_COURSE_KIND);

			// 指定したモバイルコース種類と一致するモバイルコース情報の場合
			// 設定処理を行う。
			if (null == selectKeyKindSet || selectKeyKindSet.contains(mobileCourseKind))
			{
				//  3Gハイブリッド ネット申し込みがない場合、表示しない
				// モバイルコースコード 
				String mobileCourseCode = courseChoiceMap.get(KEY_MOBILE_COURSE_CODE);

				if ((JFUStrConst.MOBILE_COURSE_3G_HHB.equals(mobileCourseCode) || JFUStrConst.MOBILE_COURSE_3G_21M_HHB.equals(mobileCourseCode))
						&& (null == netCourse || "".equals(netCourse)))
				{
					//次の値の処理を行う
					continue;
				}

				X31SDataBeanAccess mobileCourseBean = mobileCourseList.addDataBean();

				// 選択されたモバイルコースコードが設定されている場合
				if (null != choiceMobileCourseCode && choiceMobileCourseCode.equals(mobileCourseCode))
				{
					// モバイルコース識別子を返却用に設定する。
					rtnMobileCourseSkbt = mobileCourseSkbt;
				}

				// モバイルコース名
				String mobileCourseName = courseChoiceMap.get(KEY_MOBILE_COURSE_NAME);
				// バイルコースクラス
				String mobileCourseClass = courseChoiceMap.get(KEY_MOBILE_COURSE_CLASS);
				// サービスコード
				String svcCd = courseChoiceMap.get(KEY_SVC_CD);
				// 料金グループコード
				String prcGrpCd = courseChoiceMap.get(KEY_PRC_GRP_CD);
				// 説明エリアクラス
				String mobileCourseSetmeiClass = courseChoiceMap.get(KEY_MOBILE_COURSE_SETMEI_CLASS);
				// 文言
				String mobileCourseMongon = courseChoiceMap.get(KEY_MOBILE_COURSE_MONGON);
				// 無料文言
				String mobileCourseMryoMongon = courseChoiceMap.get(KEY_MOBILE_COURSE_MRYO_MONGON);
				// 機器提供サービスコード
				String kktkSvcCd = courseChoiceMap.get(KEY_KKTK_SVC_CD);
				// モバイルコースタイトル名
				String mobileCourseTitle = courseChoiceMap.get(KEY_MOBILE_COURSE_TITLE);

				// 設定処理
				mobileCourseBean.sendMessageString(FUW00915SFConst.MOBILE_COURSE_SKBT_01, X31CWebConst.DATABEAN_SET_VALUE, mobileCourseSkbt);
				mobileCourseBean.sendMessageString(FUW00915SFConst.MOBILE_COURSE_KIND_01, X31CWebConst.DATABEAN_SET_VALUE, mobileCourseKind);
				mobileCourseBean.sendMessageString(FUW00915SFConst.MOBILE_COURSE_NAME_01, X31CWebConst.DATABEAN_SET_VALUE, mobileCourseName);
				mobileCourseBean.sendMessageString(FUW00915SFConst.MOBILE_COURSE_CODE_01, X31CWebConst.DATABEAN_SET_VALUE, mobileCourseCode);
				mobileCourseBean.sendMessageString(FUW00915SFConst.MOBILE_COURSE_CLASS_01, X31CWebConst.DATABEAN_SET_VALUE, mobileCourseClass);
				mobileCourseBean.sendMessageString(FUW00915SFConst.SVC_CD_01, X31CWebConst.DATABEAN_SET_VALUE, svcCd);
				mobileCourseBean.sendMessageString(FUW00915SFConst.PRC_GRP_CD_01, X31CWebConst.DATABEAN_SET_VALUE, prcGrpCd);
				mobileCourseBean.sendMessageString(FUW00915SFConst.KKTK_SVC_CD_01, X31CWebConst.DATABEAN_SET_VALUE, kktkSvcCd);
				mobileCourseBean.sendMessageString(FUW00915SFConst.MOBILE_COURSE_SETMEI_CLASS_01, X31CWebConst.DATABEAN_SET_VALUE,
						mobileCourseSetmeiClass);
				mobileCourseBean.sendMessageString(FUW00915SFConst.MOBILE_COURSE_MONGON_01, X31CWebConst.DATABEAN_SET_VALUE, mobileCourseMongon);
				mobileCourseBean.sendMessageString(FUW00915SFConst.MOBILE_COURSE_MRYO_MONGON_01, X31CWebConst.DATABEAN_SET_VALUE,
						mobileCourseMryoMongon);
				mobileCourseBean.sendMessageString(FUW00915SFConst.MOBILE_COURSE_TITLE_01, X31CWebConst.DATABEAN_SET_VALUE, mobileCourseTitle);

				// ●配列項目(モバイルコースリスト.料金コースコード)
				X31CVector<String> pcrsCdValues = getMapToList(courseChoiceMap, ARRAYKEY_PCRS_CD_SVC);
				mobileCourseBean.sendMessageStringArray(FUW00915SFConst.PCRS_CD_01, X31CWebConst.DATABEAN_SET_DEF_VALUE, pcrsCdValues);

				// ●配列項目(モバイルコースリスト.料金プランコード)
				X31CVector<String> pplanCdValues = getMapToList(courseChoiceMap, ARRAYKEY_PPLAN_CD_SVC);
				// 設定処理
				mobileCourseBean.sendMessageStringArray(FUW00915SFConst.PPLAN_CD_01, X31CWebConst.DATABEAN_SET_DEF_VALUE, pplanCdValues);

				// ●配列項目(モバイルコースリスト.機器用料金コースコード)
				X31CVector<String> pcrsCdKikiValues = getMapToList(courseChoiceMap, ARRAYKEY_PCRS_CD_KIKI);
				// 設定処理
				mobileCourseBean.sendMessageStringArray(FUW00915SFConst.PCRS_CD_KIKI_01, X31CWebConst.DATABEAN_SET_DEF_VALUE, pcrsCdKikiValues);

				// ●配列項目(モバイルコースリスト.機器用料金プランコード)
				X31CVector<String> pplanCdKikiValues = getMapToList(courseChoiceMap, ARRAYKEY_PPLAN_CD_KIKI);
				// 設定処理
				mobileCourseBean.sendMessageStringArray(FUW00915SFConst.PPLAN_CD_KIKI_01, X31CWebConst.DATABEAN_SET_DEF_VALUE, pplanCdKikiValues);
			}
		}
		return rtnMobileCourseSkbt;
	}

	/**
	 * ＷｉＭＡＸ用の通信機器タイプをルータタイプかUSBタイプかを判定し、変換して返す。<BR>
	 * 
	 * @param wimaxTsushinKikiType ＷｉＭＡＸ用の通信機器タイプ
	 * @param mobileCourse モバイルコース
	 * @return 変換した通信機器タイプ
	 */
	private String rtnTsushinKikiType(String wimaxTsushinKikiType, String mobileCourse)
	{
		// 変換した通信機器タイプ
		String rtnTsushinKikiType = wimaxTsushinKikiType;

		if (JFUStrConst.MOBILE_COURSE_WIMAX.equals(mobileCourse))
		{
			if (MOBILE_KIKI_ROUTER_WIMAX.equals(wimaxTsushinKikiType))
			{
				// 3→1
				rtnTsushinKikiType = JFUStrConst.MOBILE_KIKI_ROUTER;
			}
			else if (MOBILE_KIKI_USB_WIMAX.equals(wimaxTsushinKikiType))
			{
				// 4→2
				rtnTsushinKikiType = JFUStrConst.MOBILE_KIKI_USB;
			}
		}
		return rtnTsushinKikiType;
	}

	/**
	 * 通信機器タイプをルータタイプかUSBタイプかを判定し、ＷｉＭＡＸ用の通信機器タイプに変換して返す。<BR>
	 * 
	 * @param tsushinKikiType 通信機器タイプ
	 * @param mobileCourse モバイルコース
	 * @return 変換したＷｉＭＡＸ用の通信機器タイプ
	 */
	private String rtnTsushinKikiTypeWimax(String tsushinKikiType, String mobileCourse)
	{
		// 変換した通信機器タイプ
		String rtnWimaxTsushinKikiType = tsushinKikiType;

		if (JFUStrConst.MOBILE_COURSE_WIMAX.equals(mobileCourse))
		{

			if (JFUStrConst.MOBILE_KIKI_ROUTER.equals(rtnWimaxTsushinKikiType))
			{
				// 1→3
				rtnWimaxTsushinKikiType = MOBILE_KIKI_ROUTER_WIMAX;
			}
			else if (JFUStrConst.MOBILE_KIKI_USB.equals(rtnWimaxTsushinKikiType))
			{
				// 2→4
				rtnWimaxTsushinKikiType = MOBILE_KIKI_USB_WIMAX;
			}
		}
		return rtnWimaxTsushinKikiType;
	}

	/**
	 * 戻るボタン押下時遷移条件チェック<BR>
	 * 
	 * @param selectSvcTv 選択サービステレビ
	 * @param selectSvcTel 選択サービス電話
	 * @param selectSvcNet 選択サービスネット
	 * @return 遷移画面情報保持マップ
	 */
	private Map<String, String> chkSeniJudgeJokenBack(String selectSvcTv, String selectSvcTel, String selectSvcNet)
	{
		Map<String, String> seniScreenInfoMap = new HashMap<String, String>();

		if (SELECT_SVC_CHOICE.equals(selectSvcTv))
		{
			// eo光テレビ入力画面へ遷移
			seniScreenInfoMap.put(SET_SCREEN_ID, JFUScreenConst.SCREEN_ID_FUW00914);
			seniScreenInfoMap.put(SET_SCREEN_NAME, JFUScreenConst.SCREEN_NAME_FUW00914);
		}
		else if (SELECT_SVC_CHOICE.equals(selectSvcTel))
		{
			// eo光電話入力画面へ遷移
			seniScreenInfoMap.put(SET_SCREEN_ID, JFUScreenConst.SCREEN_ID_FUW00913);
			seniScreenInfoMap.put(SET_SCREEN_NAME, JFUScreenConst.SCREEN_NAME_FUW00913);
		}
		else if (SELECT_SVC_CHOICE.equals(selectSvcNet))
		{
			// eo光ネット入力画面へ遷移
			seniScreenInfoMap.put(SET_SCREEN_ID, JFUScreenConst.SCREEN_ID_FUW00912);
			seniScreenInfoMap.put(SET_SCREEN_NAME, JFUScreenConst.SCREEN_NAME_FUW00912);
		}

		return seniScreenInfoMap;
	}

	/**
	 * サービス契約内訳<eoモバイル>登録SC２（EKK0201D010）サービス呼び出す、料金コースコード取得<BR>
	 * 
	 * @return 料金コースコード結果
	 * @throws Exception
	 */
	private HashSet<String> getSvcCallIdEkk0201d010_2() throws Exception
	{
		String svcCallEkk0201d010 = JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00915, KEY_SVC_CALL_EKK0201D010_2);
		String[] svcCallEkk0201d010Array = svcCallEkk0201d010.split(SPLIT_STR);
		HashSet<String> callSvcEkk0201d010Result = new HashSet<String>();

		for (int i = 0; i < svcCallEkk0201d010Array.length; i++)
		{
			callSvcEkk0201d010Result.add(svcCallEkk0201d010Array[i]);
		}
		return callSvcEkk0201d010Result;
	}

	/**
	 * 機器提供サービス契約登録SC１（EKK0341D010）サービス呼び出す、料金コースコード取得<BR>
	 * 
	 * @return 料金コースコード結果
	 * @throws Exception
	 */
	private HashSet<String> getSvcCallIdEkk0341d010_1() throws Exception
	{
		String svcCallEkk0341d010 = JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00915, KEY_SVC_CALL_EKK0341D010_1);
		String[] svcCallEkk0341d010Array = svcCallEkk0341d010.split(SPLIT_STR);
		HashSet<String> callSvcEkk0341d010Result = new HashSet<String>();

		for (int i = 0; i < svcCallEkk0341d010Array.length; i++)
		{
			callSvcEkk0341d010Result.add(svcCallEkk0341d010Array[i]);
		}
		return callSvcEkk0341d010Result;
	}

	/**
	 * 機器提供サービス契約登録SC２（EKK0341D010）サービス呼び出す、料金コースコード取得<BR>
	 * 
	 * @return 料金コースコード結果
	 * @throws Exception
	 */
	private HashSet<String> getSvcCallIdEkk0341d010_2() throws Exception
	{
		String svcCallEkk0341d010 = JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00915, KEY_SVC_CALL_EKK0341D010_2);
		String[] svcCallEkk0341d010Array = svcCallEkk0341d010.split(SPLIT_STR);
		HashSet<String> callSvcEkk0341d010Result = new HashSet<String>();

		for (int i = 0; i < svcCallEkk0341d010Array.length; i++)
		{
			callSvcEkk0341d010Result.add(svcCallEkk0341d010Array[i]);
		}
		return callSvcEkk0341d010Result;
	}

}