/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：FUW00167SFLogic
*   ソースファイル名：FUW00167SFLogic.java
*   作成者          ：富士通
*   日付            ：2021年04月16日
*＜機能概要＞
*   コンテンツ申込画面のビューロジックです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v53.00.00   2021/04/16   FJ）新谷    新規作成
**********************************************************************/
package eo.web.webview.FUW00167SF;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;

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.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.JFUContentsServiceInfoUtil;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;
import eo.web.webview.mapping.FUSV0338_FUSV0338OPDBMapper;

/**
 * コンテンツ申込画面ビューロジック
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW00167SFLogic extends JCCWebBusinessLogic
{

	/** 確認画面へ戻るボタン表示フラグ:1:表示 */
	private static final String KAKUNIN_BACK_BTN_DSP_FLG_ON = "1";

	/** 戻るボタン表示フラグ:1:表示 */
	private static final String BACK_BTN_DSP_FLG_ON = "1";

	/** 次へボタン表示フラグ:1:表示 */
	private static final String NEXT_BTN_DSP_FLG_ON = "1";

	/** ユースケースID（FUSV0338） */
	private static final String USECASE_ID_FUSV0338 = "FUSV0338";

	/**
	 * 初期処理
	 * 
	 * @return true
	 * @throws Exception
	 */
	public boolean init() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// サービスフォームBeanのアクセスクラスを取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// サービス呼出処理
		callService(serviceFormBean);

		// コンテンツサービス情報の設定
		setContSvcInfo(serviceFormBean);

		// ボタン表示設定
		setBtnDispFlg(commonInfoBean, serviceFormBean);

		// コンテンツサービス情報の表示数チェック
		if (!checkContSvcInfoDispNum(serviceFormBean))
		{
			// 表示するコンテンツサービスが無い場合、リダイレクト設定を行う。
			setRedirectInfo(commonInfoBean, serviceFormBean);

			// 初期処理を終了
			return true;
		}

		// サービスフォームBeanに共有フォームBeanの値を復元
		setRtrnInfo(commonInfoBean, serviceFormBean);

		// Web申込受付実績を登録
		JFUWebCommon.executeWebMskmUkJskAdd(this);

		return true;
	}

	/**
	 * 次へボタン押下
	 * 
	 * @return true
	 * @throws Exception
	 */
	public boolean next() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// サービスフォームBeanのアクセスクラスを取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// 引継情報の作成(最初に引継情報の削除も行われる)
		createHikitugiInfo(commonInfoBean, serviceFormBean);

		// 遷移先画面の設定
		setNextScreenInfo(commonInfoBean);

		return true;
	}

	/**
	 * 戻るボタン押下
	 * 
	 * @return true
	 * @throws Exception
	 */
	public boolean back() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// 引継情報の削除
		deleteHikitugiInfo(commonInfoBean);

		// 遷移先画面の設定
		setBackScreenInfo(commonInfoBean);

		return true;

	}

	/**
	 * 確認画面へ戻るボタン押下
	 * 
	 * @return true
	 * @throws Exception
	 */
	public boolean backKakunin() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// サービスフォームBeanのアクセスクラスを取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// 引継情報の作成(最初に引継情報の削除も行われる)
		createHikitugiInfo(commonInfoBean, serviceFormBean);

		// 遷移先画面の設定
		setBackKakuninScreenInfo(commonInfoBean);

		return true;
	}

	/**
	 * 料金シミュレーションを呼び出す。
	 * 
	 * @return true
	 * @throws Exception
	 */
	public boolean ryokin() throws Exception
	{
		// 料金シミュレーション共通部品を呼び出し
		JFUWebCommon.ryokin(this);

		return true;
	}

	/**
	 * サービスを呼び出し、戻りデータをサービスフォームBeanに格納する。
	 * @param serviceFormBean サービスフォームBean
	 */
	private void callService(X31SDataBeanAccess serviceFormBean)
	{
		// サービスIDをparamにセット
		Map<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0338);

		// DataBean-BPマッピング（機能コード「1」）
		FUSV0338_FUSV0338OPDBMapper mapper = new FUSV0338_FUSV0338OPDBMapper();
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		X31SDataBeanAccess[] paramBeanIn = { serviceFormBean };
		mapper.setFUSV033801SC(paramBeanIn, inputMap, JPCModelConstant.FUNC_CD_1, this);

		// サービス呼び出し
		invokeService(paramMap, inputMap, outputMap);

		// サービスからの戻りデータをBeanにセット
		X31SDataBeanAccess[] paramBeanOut = { serviceFormBean };
		mapper.getFUSV033801SC(paramBeanOut, outputMap);
	}

	/**
	 * コンテンツサービス情報をサービスフォームBeanに設定する。
	 * @param serviceFormBean サービスフォームBean
	 * @throws Exception XML解析時に発生する例外
	 */
	@SuppressWarnings("unchecked")
	private void setContSvcInfo(X31SDataBeanAccess serviceFormBean) throws Exception
	{
		// サービスフォームBean.コンテンツサービスキー情報リストの取得
		X31SDataBeanAccessArray contSvcKeyInfoList = serviceFormBean.getDataBeanArray(FUW00167SFConst.CONT_SVC_KEY_INFO);
		// サービスフォームBean.コンテンツサービス情報リストの取得
		X31SDataBeanAccessArray contSvcInfoList = serviceFormBean.getDataBeanArray(FUW00167SFConst.CONT_SVC_INFO);
		// オンライン運用日時(年月日時分)の取得
		String opeDateTime = JFUWebCommon.getOpeDateTime(this, null).substring(0, 12);

		// "コンテンツサービスコード"をキーに、プロパティファイル「フロント用コンテンツ情報定義ファイル」から情報を取得し、ワークMapリストに保持
		ArrayList<Map<String, String>> workMapList = new ArrayList<Map<String, String>>();
		for (int i = 0; i < contSvcKeyInfoList.getCount(); i++)
		{
			X31SDataBeanAccess contSvcKeyInfo = contSvcKeyInfoList.getDataBean(i);
			String cont_svc_cd = contSvcKeyInfo.sendMessageString(FUW00167SFConst.CONT_SVC_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
			String cont_cd = contSvcKeyInfo.sendMessageString(FUW00167SFConst.CONT_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
			Map<String, String> workMap = JFUContentsServiceInfoUtil.getContentsServiceInfoItemsAsMap(cont_svc_cd);
			workMap.put(JFUStrConst.CONT_SVC_INFO_CONT_CD, cont_cd);
			workMapList.add(workMap);
		}

		// 表示期間内のコンテンツサービス情報を表示用Mapリストに設定
		ArrayList<Map<String, String>> dispMapList = new ArrayList<Map<String, String>>();
		for (int i = 0; i < workMapList.size(); i++)
		{
			if (JFUContentsServiceInfoUtil.checkDispKikan(workMapList.get(i), opeDateTime))
			{
				dispMapList.add(workMapList.get(i));
			}
		}

		// 表示順序でソート
		Collections.sort(dispMapList, new Comparator()
		{

			/**
			 * コンテンツサービス情報を表示順で昇順にする
			 * <br>
			 * @param o1
			 * @param o2
			 * @return 並び替え結果
			 */
			public int compare(Object o1, Object o2)
			{
				HashMap map1 = (HashMap)o1;
				HashMap map2 = (HashMap)o2;
				String str1 = (String)map1.get(JFUStrConst.CONT_SVC_INFO_DISP_JUN);
				String str2 = (String)map2.get(JFUStrConst.CONT_SVC_INFO_DISP_JUN);
				return str1.compareTo(str2);
			}
		});

		// 表示用Mapリストの情報をサービスフォームBeanに設定
		for (int i = 0; i < dispMapList.size(); i++)
		{
			contSvcInfoList.addDataBean();
			contSvcInfoList.getDataBean(i).sendMessageString(FUW00167SFConst.CONT_SVC_CD_02, X31CWebConst.DATABEAN_SET_VALUE,
					dispMapList.get(i).get(JFUStrConst.CONT_SVC_INFO_CONT_SVC_CD));
			contSvcInfoList.getDataBean(i).sendMessageString(FUW00167SFConst.CONT_CD_02, X31CWebConst.DATABEAN_SET_VALUE,
					dispMapList.get(i).get(JFUStrConst.CONT_SVC_INFO_CONT_CD));
			contSvcInfoList.getDataBean(i).sendMessageString(FUW00167SFConst.SVC_NM_02, X31CWebConst.DATABEAN_SET_VALUE,
					dispMapList.get(i).get(JFUStrConst.CONT_SVC_INFO_SVC_NM));
			contSvcInfoList.getDataBean(i).sendMessageString(FUW00167SFConst.SVC_PRC_02, X31CWebConst.DATABEAN_SET_VALUE,
					dispMapList.get(i).get(JFUStrConst.CONT_SVC_INFO_SVC_PRC));
			contSvcInfoList.getDataBean(i).sendMessageString(FUW00167SFConst.SETMEI_MONGON_02, X31CWebConst.DATABEAN_SET_VALUE,
					dispMapList.get(i).get(JFUStrConst.CONT_SVC_INFO_SETMEI_MONGON));
			contSvcInfoList.getDataBean(i).sendMessageString(FUW00167SFConst.CHUI_MONGON_02, X31CWebConst.DATABEAN_SET_VALUE,
					dispMapList.get(i).get(JFUStrConst.CONT_SVC_INFO_CHUI_MONGON));
			contSvcInfoList.getDataBean(i).sendMessageString(FUW00167SFConst.RIYOKIYAKU_NM_1_02, X31CWebConst.DATABEAN_SET_VALUE,
					dispMapList.get(i).get(JFUStrConst.CONT_SVC_INFO_RIYOKIYAKU_NM_1));
			contSvcInfoList.getDataBean(i).sendMessageString(FUW00167SFConst.RIYOKIYAKU_NM_2_02, X31CWebConst.DATABEAN_SET_VALUE,
					dispMapList.get(i).get(JFUStrConst.CONT_SVC_INFO_RIYOKIYAKU_NM_2));
			contSvcInfoList.getDataBean(i).sendMessageString(FUW00167SFConst.RIYOKIYAKU_URL_1_02, X31CWebConst.DATABEAN_SET_VALUE,
					dispMapList.get(i).get(JFUStrConst.CONT_SVC_INFO_RIYOKIYAKU_URL_1));
			contSvcInfoList.getDataBean(i).sendMessageString(FUW00167SFConst.RIYOKIYAKU_URL_2_02, X31CWebConst.DATABEAN_SET_VALUE,
					dispMapList.get(i).get(JFUStrConst.CONT_SVC_INFO_RIYOKIYAKU_URL_2));
		}
	}

	/**
	 * 画面に表示するコンテンツサービス情報があるかチェックする。
	 * @param serviceFormBean サービスフォームBean
	 * @return チェック結果
	 */
	private boolean checkContSvcInfoDispNum(X31SDataBeanAccess serviceFormBean)
	{
		// サービスフォームBean.コンテンツサービス情報リストの取得
		X31SDataBeanAccessArray contSvcInfoList = serviceFormBean.getDataBeanArray(FUW00167SFConst.CONT_SVC_INFO);

		if (0 == contSvcInfoList.getCount())
		{
			return false;
		}

		return true;
	}

	/**
	 * リダイレクト情報を設定する。
	 * @param commonInfoBean 共有フォームBean
	 * @param serviceFormBean サービスフォームBean
	 * @throws Exception 
	 */
	private void setRedirectInfo(X31SDataBeanAccess commonInfoBean, X31SDataBeanAccess serviceFormBean) throws Exception
	{
		// WEB新規情報の取得
		X31SDataBeanAccessArray webNewInfoList = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webNewInfo = webNewInfoList.getDataBean(0);

		// WEB新規情報.画面遷移モードの取得
		String screenMode = webNewInfo.sendMessageString(CommonInfoCFConst.SCREEN_MODE_06, X31CWebConst.DATABEAN_GET_VALUE);

		if (JFUStrConst.SCREEN_MODE_KAKUNIN.equals(screenMode))
		{
			// 画面遷移モードが「確認画面遷移」の場合、確認画面へ戻るボタン押下時の遷移先画面情報を設定
			setBackKakuninScreenInfo(commonInfoBean);
		}
		else
		{
			// 画面遷移モードが「通常遷移」の場合、遷移元画面から遷移先を決定

			// 遷移元画面IDの取得
			String bfScreenId115 = JCCWebCommon.getScreenId(this, JFUScreenConst.SCREEN_ID_FUW00115);
			String bfScreenId166 = JCCWebCommon.getScreenId(this, JFUScreenConst.SCREEN_ID_FUW00166);
			String bfScreenId167 = JCCWebCommon.getScreenId(this, JFUScreenConst.SCREEN_ID_FUW00167);

			if ((!JFUWebCommon.isNull(bfScreenId115) || !JFUWebCommon.isNull(bfScreenId166))
					&& (JFUWebCommon.isNull(bfScreenId167) || bfScreenId167.isEmpty()))
			{
				// 遷移元画面から前画面への遷移で遷移してきた場合、戻るボタン押下時の遷移先画面情報を設定
				String bkDispFlg = serviceFormBean.sendMessageString(FUW00167SFConst.BACK_BTN_DSP_FLG, X31CWebConst.DATABEAN_GET_VALUE);
				if (BACK_BTN_DSP_FLG_ON.equals(bkDispFlg))
				{
					// 戻り先がある場合、戻るボタン押下時の遷移先画面情報を設定
					setBackScreenInfo(commonInfoBean);
				}
				else
				{
					// 戻り先がない場合、次へボタン押下時の遷移先画面情報を設定
					setNextScreenInfo(commonInfoBean);
				}
			}
			else
			{
				// 遷移元画面から次画面への遷移で遷移してきた場合、次へボタン押下時の遷移先画面情報を設定
				setNextScreenInfo(commonInfoBean);
			}

		}

		// 本来の遷移をキャンセル
		this.cancelTransferPage();

		// 次の遷移先を設定
		String nextScreenID = commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_GET_VALUE);
		this.setTransferPageId(nextScreenID + "0PJP");
	}

	/**
	 * サービスフォームBeanに共有フォームBeanの選択値を復元する。
	 * @param commonInfoBean 共有フォームBean
	 * @param serviceFormBean サービスフォームBean
	 */
	private void setRtrnInfo(X31SDataBeanAccess commonInfoBean, X31SDataBeanAccess serviceFormBean)
	{
		// WEB新規情報の取得
		X31SDataBeanAccessArray webNewInfoList = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webNewInfo = webNewInfoList.getDataBean(0);

		// WEB新規情報.コンテンツサービス情報リスト(復元元)の取得
		X31SDataBeanAccessArray contSvcInfoListFrom = webNewInfo.getDataBeanArray(CommonInfoCFConst.CONT_SVC_INFO);

		// サービスフォームBean.コンテンツサービス情報リスト(復元先)の取得
		X31SDataBeanAccessArray contSvcInfoListTo = serviceFormBean.getDataBeanArray(FUW00167SFConst.CONT_SVC_INFO);

		for (int i = 0; i < contSvcInfoListFrom.getCount(); i++)
		{
			// 共有フォームBeanのコンテンツサービスコードを取得
			X31SDataBeanAccess contSvcInfoFrom = contSvcInfoListFrom.getDataBean(i);
			String contSvcCodeFrom = contSvcInfoFrom.sendMessageString(CommonInfoCFConst.CONT_SVC_CD_67, X31CWebConst.DATABEAN_GET_VALUE);

			if (JFUWebCommon.isNull(contSvcCodeFrom))
			{
				continue;
			}

			for (int j = 0; j < contSvcInfoListTo.getCount(); j++)
			{
				// サービスフォームBeanのコンテンツサービスコードを取得
				X31SDataBeanAccess contSvcInfoTo = contSvcInfoListTo.getDataBean(j);
				String contSvcCodeTo = contSvcInfoTo.sendMessageString(FUW00167SFConst.CONT_SVC_CD_02, X31CWebConst.DATABEAN_GET_VALUE);

				if (JFUWebCommon.isNull(contSvcCodeTo))
				{
					continue;
				}

				if (contSvcCodeFrom.equals(contSvcCodeTo))
				{
					// コンテンツサービスコードが一致する場合、コンテンツサービス申込選択を設定
					boolean mskmChoice =
							contSvcInfoFrom.sendMessageBoolean(CommonInfoCFConst.CONT_SVC_MSKM_CHOICE_67, X31CWebConst.DATABEAN_GET_VALUE);
					contSvcInfoTo.sendMessageBoolean(FUW00167SFConst.CONT_SVC_MSKM_CHOICE_02, X31CWebConst.DATABEAN_SET_VALUE, mskmChoice);

					if (mskmChoice)
					{
						// コンテンツサービス申込選択がtrueの場合、利用規約同意もtrueを設定
						contSvcInfoTo.sendMessageBoolean(FUW00167SFConst.RIYOKIYAKU_DOI_02, X31CWebConst.DATABEAN_SET_VALUE, true);
					}
					break;
				}
			}
		}
	}

	/**
	 * ボタンの表示設定を行う。
	 * @param commonInfoBean 共有フォームBean
	 * @param serviceFormBean サービスフォームBean
	 */
	private void setBtnDispFlg(X31SDataBeanAccess commonInfoBean, X31SDataBeanAccess serviceFormBean)
	{
		// WEB新規情報の取得
		X31SDataBeanAccessArray webNewInfoList = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webNewInfo = webNewInfoList.getDataBean(0);

		// WEB新規情報.画面遷移モードの取得
		String screenMode = webNewInfo.sendMessageString(CommonInfoCFConst.SCREEN_MODE_06, X31CWebConst.DATABEAN_GET_VALUE);

		if (JFUStrConst.SCREEN_MODE_KAKUNIN.equals(screenMode))
		{
			// 画面遷移モードが「確認画面遷移」の場合、確認画面へ戻るボタンを表示
			serviceFormBean.sendMessageString(FUW00167SFConst.KAKUNIN_BACK_BTN_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, KAKUNIN_BACK_BTN_DSP_FLG_ON);
		}
		else
		{
			// 画面遷移モードが「通常遷移」の場合、次へ、戻るボタンの表示を設定

			// WEB新規情報.申込回線サービスの取得
			String mskmKsnSvc = webNewInfo.sendMessageString(CommonInfoCFConst.MSKM_KSN_SVC_06, X31CWebConst.DATABEAN_GET_VALUE);

			// WEB新規情報.申込マンションタイプの取得
			String mskmMnsType = webNewInfo.sendMessageString(CommonInfoCFConst.MSKM_MNS_TYPE_06, X31CWebConst.DATABEAN_GET_VALUE);

			// 契約サービス情報の取得
			X31SDataBeanAccessArray keiyakuSvcInfoList = webNewInfo.getDataBeanArray(CommonInfoCFConst.KEIYAKU_SVC_INFO);
			X31SDataBeanAccess keiyakuSvcInfo = keiyakuSvcInfoList.getDataBean(0);

			// 契約サービス情報.選択サービス（ネット）の取得
			String selectSvcNet = keiyakuSvcInfo.sendMessageString(CommonInfoCFConst.SELECT_SVC_NET_10, X31CWebConst.DATABEAN_GET_VALUE);

			// 契約サービス情報.選択サービス（電話）の取得
			String selectSvcTel = keiyakuSvcInfo.sendMessageString(CommonInfoCFConst.SELECT_SVC_TEL_10, X31CWebConst.DATABEAN_GET_VALUE);

			// 契約サービス情報.選択サービス（テレビ）の取得
			String selectSvcTv = keiyakuSvcInfo.sendMessageString(CommonInfoCFConst.SELECT_SVC_TV_10, X31CWebConst.DATABEAN_GET_VALUE);

			// ｅｏ光テレビの取得
			X31SDataBeanAccessArray eoTvList = webNewInfo.getDataBeanArray(CommonInfoCFConst.EOTV);
			X31SDataBeanAccess eoTv = eoTvList.getDataBean(0);

			// ｅｏ光テレビ.テレビコース（ｅｏ光テレビ入力）の取得
			String tvCrs = eoTv.sendMessageString(CommonInfoCFConst.EO_TV_COURSE_13, X31CWebConst.DATABEAN_GET_VALUE);

			if ((JFUStrConst.MSKM_KSN_SVC_HOME.equals(mskmKsnSvc) || JFUStrConst.MSKM_MNS_TYPE_MEZON.equals(mskmMnsType))
					&& (JFUStrConst.SELECT_SVC_TV_CHOICE.equals(selectSvcTv) && JFUStrConst.SELECT_SVC_NET_MI_CHOICE.equals(selectSvcNet) && JFUStrConst.SELECT_SVC_TEL_MI_CHOICE
							.equals(selectSvcTel)) && (JFUStrConst.EO_TV_COURSE_BS.equals(tvCrs) || JFUStrConst.EO_TV_COURSE_BS_STAR.equals(tvCrs)))
			{
				// 戻り先のオプション選択画面が無い場合、次へボタンのみ表示
				serviceFormBean.sendMessageString(FUW00167SFConst.NEXT_BTN_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, NEXT_BTN_DSP_FLG_ON);
			}
			else
			{
				// それ以外の場合、戻るボタンと次へボタンを表示
				serviceFormBean.sendMessageString(FUW00167SFConst.BACK_BTN_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, BACK_BTN_DSP_FLG_ON);
				serviceFormBean.sendMessageString(FUW00167SFConst.NEXT_BTN_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, NEXT_BTN_DSP_FLG_ON);
			}
		}
	}

	/**
	 * 共有フォームBeanの引継ぎ情報を削除後、共有フォームBeanに引継ぎ情報の設定を行う。
	 * @param commonInfoBean 共有フォームBean
	 * @param serviceFormBean サービスフォームBean
	 */
	private void createHikitugiInfo(X31SDataBeanAccess commonInfoBean, X31SDataBeanAccess serviceFormBean)
	{
		// 引継情報の削除
		deleteHikitugiInfo(commonInfoBean);

		// WEB新規情報の取得
		X31SDataBeanAccessArray webNewInfoList = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webNewInfo = webNewInfoList.getDataBean(0);

		// WEB新規情報.コンテンツサービス情報リスト(作成先)の取得
		X31SDataBeanAccessArray contSvcInfoListTo = webNewInfo.getDataBeanArray(CommonInfoCFConst.CONT_SVC_INFO);

		// サービスフォームBean.コンテンツサービス情報リスト(作成元)の取得
		X31SDataBeanAccessArray contSvcInfoListFrom = serviceFormBean.getDataBeanArray(FUW00167SFConst.CONT_SVC_INFO);

		// 共有フォームBeanに引継ぎ情報を設定
		for (int i = 0; i < contSvcInfoListFrom.getCount(); i++)
		{
			contSvcInfoListTo.addDataBean();
			X31SDataBeanAccess contSvcInfo = contSvcInfoListTo.getDataBean(i);

			contSvcInfo.sendMessageString(CommonInfoCFConst.CONT_SVC_CD_67, X31CWebConst.DATABEAN_SET_VALUE, contSvcInfoListFrom.getDataBean(i)
					.sendMessageString(FUW00167SFConst.CONT_SVC_CD_02, X31CWebConst.DATABEAN_GET_VALUE));
			contSvcInfo.sendMessageString(CommonInfoCFConst.CONT_CD_67, X31CWebConst.DATABEAN_SET_VALUE, contSvcInfoListFrom.getDataBean(i)
					.sendMessageString(FUW00167SFConst.CONT_CD_02, X31CWebConst.DATABEAN_GET_VALUE));
			contSvcInfo.sendMessageString(CommonInfoCFConst.CONT_SVC_NM_67, X31CWebConst.DATABEAN_SET_VALUE, contSvcInfoListFrom.getDataBean(i)
					.sendMessageString(FUW00167SFConst.SVC_NM_02, X31CWebConst.DATABEAN_GET_VALUE));
			contSvcInfo.sendMessageBoolean(CommonInfoCFConst.CONT_SVC_MSKM_CHOICE_67, X31CWebConst.DATABEAN_SET_VALUE, contSvcInfoListFrom
					.getDataBean(i).sendMessageBoolean(FUW00167SFConst.CONT_SVC_MSKM_CHOICE_02, X31CWebConst.DATABEAN_GET_VALUE));
		}
	}

	/**
	 * 共有フォームBeanの引継ぎ情報を削除する。
	 * @param commonInfoBean 共有フォームBean
	 */
	private void deleteHikitugiInfo(X31SDataBeanAccess commonInfoBean)
	{
		// WEB新規情報の取得
		X31SDataBeanAccessArray webNewInfoList = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webNewInfo = webNewInfoList.getDataBean(0);

		// WEB新規情報.コンテンツサービス情報リストの取得
		X31SDataBeanAccessArray contSvcInfoList = webNewInfo.getDataBeanArray(CommonInfoCFConst.CONT_SVC_INFO);

		if (0 < contSvcInfoList.getCount())
		{
			contSvcInfoList.clearArray();
		}
	}

	/**
	 * 次へボタン押下時の遷移先画面情報を設定する。
	 * @param commonInfoBean 共有フォームBean
	 * @throws Exception 
	 */
	private void setNextScreenInfo(X31SDataBeanAccess commonInfoBean) throws Exception
	{
		// WEB新規情報の取得
		X31SDataBeanAccessArray webNewInfoList = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webNewInfo = webNewInfoList.getDataBean(0);

		// 選択可能キャンペーンフラグの取得
		Boolean campaignFlg = JFUWebCommon.isCamapaignList(webNewInfo, JCCWebCommon.getOpeDate(this, null));

		if (campaignFlg)
		{
			// 選択可能キャンペーンリストがある場合、キャンペーン選択画面
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00166);
			commonInfoBean
					.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00166);
		}
		else
		{
			// 選択可能キャンペーンリストがない場合、お支払方法入力画面
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00115);
			commonInfoBean
					.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00115);
		}

		// 自身の画面の遷移元IDを削除
		JCCWebCommon.setScreenId(this, JFUScreenConst.SCREEN_ID_FUW00167, "");
	}

	/**
	 * 戻るボタン押下時の遷移先画面情報を設定する。
	 * @param commonInfoBean 共有フォームBean
	 */
	private void setBackScreenInfo(X31SDataBeanAccess commonInfoBean)
	{
		// WEB新規情報の取得
		X31SDataBeanAccessArray webNewInfoList = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webNewInfo = webNewInfoList.getDataBean(0);

		// 契約サービス情報の取得
		X31SDataBeanAccessArray keiyakuSvcInfoList = webNewInfo.getDataBeanArray(CommonInfoCFConst.KEIYAKU_SVC_INFO);
		X31SDataBeanAccess keiyakuSvcInfo = keiyakuSvcInfoList.getDataBean(0);

		// 契約サービス情報.選択サービス（テレビ）の取得
		String selectSvcTv = keiyakuSvcInfo.sendMessageString(CommonInfoCFConst.SELECT_SVC_TV_10, X31CWebConst.DATABEAN_GET_VALUE);

		// 契約サービス情報.選択サービス（電話）の取得
		String selectSvcTel = keiyakuSvcInfo.sendMessageString(CommonInfoCFConst.SELECT_SVC_TEL_10, X31CWebConst.DATABEAN_GET_VALUE);

		// ｅｏ光テレビの取得
		X31SDataBeanAccessArray eoTvList = webNewInfo.getDataBeanArray(CommonInfoCFConst.EOTV);
		X31SDataBeanAccess eoTv = eoTvList.getDataBean(0);

		// ｅｏ光テレビ.テレビコース（ｅｏ光テレビ入力）の取得
		String tvCrs = eoTv.sendMessageString(CommonInfoCFConst.EO_TV_COURSE_13, X31CWebConst.DATABEAN_GET_VALUE);

		if (JFUStrConst.SELECT_SVC_TV_CHOICE.equals(selectSvcTv) && JFUStrConst.EO_TV_COURSE_BASIC.equals(tvCrs))
		{
			// 選択サービス（テレビ）が「選択」 かつ テレビコース（eo光テレビ入力）が「ベーシックHD、プレミアムHD」の場合、eo光テレビオプション選択画面
			JCCWebCommon.setScreenId(this, JFUScreenConst.SCREEN_ID_FUW00167, JFUScreenConst.SCREEN_ID_FUW00120);
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00120);
			commonInfoBean
					.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00120);
		}
		else if (JFUStrConst.SELECT_SVC_TEL_CHOICE.equals(selectSvcTel))
		{
			// 選択サービス（電話）が「選択」の場合、eo光電話オプション選択画面
			JCCWebCommon.setScreenId(this, JFUScreenConst.SCREEN_ID_FUW00167, JFUScreenConst.SCREEN_ID_FUW00119);
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00119);
			commonInfoBean
					.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00119);
		}
		else
		{
			// それ以外の場合、eo光ネットオプション選択画面
			JCCWebCommon.setScreenId(this, JFUScreenConst.SCREEN_ID_FUW00167, JFUScreenConst.SCREEN_ID_FUW00118);
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00118);
			commonInfoBean
					.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00118);
		}
	}

	/**
	 * 確認画面へ戻るボタン押下時の遷移先画面情報を設定する。
	 * @param commonInfoBean 共有フォームBean
	 */
	private void setBackKakuninScreenInfo(X31SDataBeanAccess commonInfoBean)
	{
		// お支払方法確認画面
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00116);
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00116);
	}
}
