/*********************************************************************
 * All Rights reserved, Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム共通（共通マスタ）
 *   モジュール名    ：ZMW03301SFLogic
 *   ソースファイル名：ZMW03301SFLogic.java
 *   作成者          ：富士通
 *   日付            ：2012年04月03日
 *＜機能概要＞
 *   ロール情報一覧のビューロジックです。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v3.00.00    2012/04/03   FJ）岩元    新規作成
 *	v3.00.00	2012/04/03   FJ) 岩元	【SGY-2012-000006】統合認証対応
 *
 **********************************************************************/

package eo.web.webview.ZMW03301SF;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;

import eo.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
import eo.common.util.JPCUtilCommon;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.ZMW03401SF.ZMW03401SFConst;
import eo.web.webview.ZMW03501SF.ZMW03501SFConst;
import eo.web.webview.ZMW03601SF.ZMW03601SFConst;
import eo.web.webview.ZMW03701SF.ZMW03701SFConst;
import eo.web.webview.common.JZMScreenConst;
import eo.web.webview.common.JZMWebCommon;
import eo.web.webview.common.JZMWebConst;
import eo.web.webview.mapping.ZMSV0099_ZMSV0099OPDBMapper;
import eo.web.webview.mapping.ZMSV0101_ZMSV0101OPDBMapper;

/**
 * ロール情報一覧のビューロジックです。
 * @author 909281
 *
 */
@SuppressWarnings("serial")
public class ZMW03301SFLogic extends JCCWebBusinessLogic
{

	/** メッセージID EKB0330--I  */
	private static final String SEARCH_ERR_MESSAGE_ZERO = JPCOnlineMessageConstant.EKB0330__I;

	/** メッセージID EKB0340--I  */
	private static final String SEARCH_ERR_MESSAGE_OVERMAX =  JPCOnlineMessageConstant.EKB0340__I;

	/** メッセージID EKB0350--I  */
	private static final String SEARCH_ERR_MESSAGE_NODATA =  JPCOnlineMessageConstant.EKB0350__I;

	/** 最大検索数 */
	private static final String MAX_SHOW_CNT_03301 = "ZMW03301_MAX_SHOW_CNT";

	/** 遷移先画面区分 新規登録 */
	private static final String SENI_SAKI_ADD = JZMWebConst.ZERO;

	/** 遷移先画面区分 更新 */
	private static final String SENI_SAKI_UPD = JZMWebConst.TWO;

	/** 遷移先画面区分 詳細 */
	private static final String SENI_SAKI_DTAIL = JZMWebConst.FOUR;

	/**
	 * ロール一覧初期表示処理を行います。
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	public boolean init()throws Exception
	{

		// 共有フォームBean
		X31SDataBeanAccess commonBean = getCommonInfoBean();

		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 戻り先IDの取得
		String screenId = JZMWebCommon.getScreenId(this);

		// 戻り先IDの有無で戻るボタン表示フラグを表示する
		JZMWebCommon.setSendMessageBoolean(bean, ZMW03301SFConst.BACK_BTN_DSP_FLG, screenId != null);

		// セッションから情報を取り出す。
		HashMap<String, Object> input = (HashMap<String, Object>)JZMWebCommon.getScreenInfo(this);

		// 権限コードの初期設定
		bean.sendMessageString(ZMW03301SFConst.AUTHORITY_CD, X31CWebConst.DATABEAN_SET_VALUE, JZMWebConst.BLANK);

		// 権限名の初期設定
		bean.sendMessageString(ZMW03301SFConst.AUTHORITY_NM, X31CWebConst.DATABEAN_SET_VALUE, JZMWebConst.BLANK);

		// 明細表示フラグを0(非表示)を設定
		bean.sendMessageBoolean(ZMW03301SFConst.DTL_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, false);

		// 検索フラグを0(非表示)を設定
		bean.sendMessageBoolean(ZMW03301SFConst.SEARCH_FLG, X31CWebConst.DATABEAN_SET_VALUE, false);

		if(input != null)
		{
			// 削除完了画面からの遷移の場合ページリンク情報と選択NGワード番号を削除する
			if(JZMWebCommon.getScreenInfo(this, JZMScreenConst.SCREEN_ID_ZMW03602) != null)
			{
				JZMWebCommon.setScreenInfo(this, JZMScreenConst.SCREEN_ID_ZMW03602, null);
				JZMWebCommon.clearPageLinkInfo(this, this.getGamenId());
				JZMWebCommon.setSendMessageString(bean, ZMW03301SFConst.CHOICE_ROLE_CD, null);
			}

			// 検索サービスを呼び出す
			callRoleSearchSrv(false);

		}

		// 画面遷移
		JZMWebCommon.setNextScreenInfo(commonBean, JZMScreenConst.SCREEN_ID_ZMW03301, JZMScreenConst.SCREEN_NAME_ZMW03301);

		return true;
	}


	/**
	 * ロール設定初期表示処理を行います。
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	@SuppressWarnings("unchecked")
	public boolean init2()throws Exception
	{

		// 共有フォームBean
		X31SDataBeanAccess commonBean = getCommonInfoBean();

		// セッションから情報を取り出す。
		HashMap sessionMap = JZMWebCommon.getScreenInfo(this, JZMScreenConst.SCREEN_ID_ZMW03301);

		// DataBeanを取得
		X31SDataBeanAccess bean = this.getServiceFormBean();

		// DataBeanに値を設定
		JZMWebCommon.setMapToDataBean(sessionMap, bean);

		// 画面遷移
		JZMWebCommon.setNextScreenInfo(commonBean, JZMScreenConst.SCREEN_ID_ZMW03302, JZMScreenConst.SCREEN_NAME_ZMW03302);

		return true;
	}


	/**
	 * 検索処理を行います。
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	public boolean search()throws Exception
	{

		// 共有フォームBean
		X31SDataBeanAccess commonBean = getCommonInfoBean();

		// サービスフォームBean
		X31SDataBeanAccess bean = getServiceFormBean();

		// ページリンク情報の消去
		JZMWebCommon.clearPageLinkInfo(this, this.getGamenId());

		// 表示情報と検索情報を入れ替える
		JZMWebCommon.shiftBeanValue(bean, ZMW03301SFConst.ROLE_CD, ZMW03301SFConst.DSP_ROLE_CD);
		JZMWebCommon.shiftBeanValue(bean, ZMW03301SFConst.ROLE_NM, ZMW03301SFConst.DSP_ROLE_NM);
		JZMWebCommon.shiftBeanValue(bean, ZMW03301SFConst.APLY_PRD_END_DAY, ZMW03301SFConst.DSP_APLY_PRD_END_DAY);
		JZMWebCommon.shiftBeanValue(bean, ZMW03301SFConst.APLY_PRD_END_MON, ZMW03301SFConst.DSP_APLY_PRD_END_MON);
		JZMWebCommon.shiftBeanValue(bean, ZMW03301SFConst.APLY_PRD_END_YEAR, ZMW03301SFConst.DSP_APLY_PRD_END_YEAR);
		JZMWebCommon.shiftBeanValue(bean, ZMW03301SFConst.APLY_PRD_STA_DAY, ZMW03301SFConst.DSP_APLY_PRD_STA_DAY);
		JZMWebCommon.shiftBeanValue(bean, ZMW03301SFConst.APLY_PRD_STA_MON, ZMW03301SFConst.DSP_APLY_PRD_STA_MON);
		JZMWebCommon.shiftBeanValue(bean, ZMW03301SFConst.APLY_PRD_STA_YEAR, ZMW03301SFConst.DSP_APLY_PRD_STA_YEAR);

		// 適用開始年月日の設定
		String  ymd = JPCUtilCommon.concatYmd(bean.sendMessageString(ZMW03301SFConst.APLY_PRD_STA_YEAR, X31CWebConst.DATABEAN_GET_VALUE),
				bean.sendMessageString(ZMW03301SFConst.APLY_PRD_STA_MON, X31CWebConst.DATABEAN_GET_VALUE),
				bean.sendMessageString(ZMW03301SFConst.APLY_PRD_STA_DAY, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(ZMW03301SFConst.APLY_PRD_STA , X31CWebConst.DATABEAN_SET_VALUE , JZMWebCommon.nullToBlank(ymd));

		// 適用終了年月日の設定
		ymd = JPCUtilCommon.concatYmd(bean.sendMessageString(ZMW03301SFConst.APLY_PRD_END_YEAR, X31CWebConst.DATABEAN_GET_VALUE),
				bean.sendMessageString(ZMW03301SFConst.APLY_PRD_END_MON, X31CWebConst.DATABEAN_GET_VALUE),
				bean.sendMessageString(ZMW03301SFConst.APLY_PRD_END_DAY, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(ZMW03301SFConst.APLY_PRD_END , X31CWebConst.DATABEAN_SET_VALUE , JZMWebCommon.nullToBlank(ymd));

		// 選択ロールコードの設定
		JZMWebCommon.setSendMessageString(bean, ZMW03301SFConst.CHOICE_ROLE_CD, null);

		// 選択行の設定
		JZMWebCommon.setSendMessageString(bean, ZMW03301SFConst.CHOICE_ROW, JZMWebConst.ZERO);

		// 明細表示フラグの設定
		JZMWebCommon.setSendMessageBoolean(bean, ZMW03301SFConst.DTL_DSP_FLG, false);

		// 検索サービスを呼び出す
		callRoleSearchSrv(false);

		// 遷移先画面ID、名称の設定
		JZMWebCommon.setNextScreenInfo(commonBean, JZMScreenConst.SCREEN_ID_ZMW03301, JZMScreenConst.SCREEN_NAME_ZMW03301);

		return true;
	}


	/**
	 * 検索処理を行います。
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	public boolean search2()throws Exception
	{

		// 共有フォームBean
		X31SDataBeanAccess commonBean = getCommonInfoBean();

		// サービスフォームBean
		X31SDataBeanAccess bean = getServiceFormBean();

		// 遷移先画面区分の取得
		String seniScreenKbn = JZMWebCommon.getSendMessageString(bean, ZMW03301SFConst.SENI_SCREEN_KBN);
		boolean isAdd = SENI_SAKI_ADD.equals(seniScreenKbn);
		boolean isUpd = SENI_SAKI_UPD.equals(seniScreenKbn);
		boolean isDtail = SENI_SAKI_DTAIL.equals(seniScreenKbn);

		// セッションに情報を格納する
		JZMWebCommon.setScreenInfo(this, JZMScreenConst.SCREEN_ID_ZMW03301, setTransData(bean));

		// 引継情報格納HashMap
		HashMap<String, Object> paramMap = null;

		// 引継ぎ値の取得
		String choiceRoleCd = JZMWebCommon.getSendMessageString(bean, ZMW03301SFConst.CHOICE_ROLE_CD);
		String authorityCd = JZMWebCommon.getSendMessageString(bean, ZMW03301SFConst.AUTHORITY_CD);
		String authorityNm = JZMWebCommon.getSendMessageString(bean, ZMW03301SFConst.AUTHORITY_NM);
		String authoritySbtCd = JZMWebCommon. getPullDownSelectedValue(bean,
				ZMW03301SFConst.AUTHORITY_SBT_CD_INFO,
				ZMW03301SFConst.AUTHORITY_SBT_CD_VALUE_LIST_02,
				ZMW03301SFConst.AUTHORITY_SBT_CD_IDX_02);

		if(isAdd)
		{
			// 登録画面への遷移処理
			// 引継ぎ情報の設定
			paramMap = JZMWebCommon.getScreenInfo(this, JZMScreenConst.SCREEN_ID_ZMW03401);

			if(paramMap == null)
			{
				paramMap = new HashMap<String, Object>();
			}
			paramMap.put(ZMW03401SFConst.COPY_ADD_FLG, false);
			paramMap.put(ZMW03401SFConst.ROLE_CD, choiceRoleCd);
			paramMap.put(ZMW03401SFConst.AUTHORITY_CD, authorityCd);
			paramMap.put(ZMW03401SFConst.AUTHORITY_NM, authorityNm);
			paramMap.put(ZMW03401SFConst.AUTHORITY_SBT_CD, authoritySbtCd);

			// 引継ぎ情報の設定
			JZMWebCommon.setScreenInfo(this, JZMScreenConst.SCREEN_ID_ZMW03401, paramMap);

			// 戻り先画面IDの設定
			JZMWebCommon.setScreenId(this, JZMScreenConst.SCREEN_ID_ZMW03401, JZMScreenConst.SCREEN_ID_ZMW03301);
			JZMWebCommon.setScreenId(this, JZMScreenConst.SCREEN_ID_ZMW03403, JZMScreenConst.SCREEN_ID_ZMW03301);

			// 遷移先画面ID、名称の設定
			JZMWebCommon.setNextScreenInfo(commonBean, JZMScreenConst.SCREEN_ID_ZMW03401,
					JZMScreenConst.SCREEN_NAME_ZMW03401);
		}
		else if(isUpd)
		{

			// 更新画面への遷移処理
			// 引継ぎ情報の設定
			paramMap = JZMWebCommon.getScreenInfo(this, JZMScreenConst.SCREEN_ID_ZMW03501);

			if(paramMap == null)
			{
				paramMap = new HashMap<String, Object>();
			}

			paramMap.put(ZMW03501SFConst.ROLE_CD, choiceRoleCd);
			paramMap.put(ZMW03501SFConst.AUTHORITY_CD, authorityCd);
			paramMap.put(ZMW03501SFConst.AUTHORITY_NM, authorityNm);
			paramMap.put(ZMW03501SFConst.AUTHORITY_SBT_CD, authoritySbtCd);

			// 引継ぎ情報の設定
			JZMWebCommon.setScreenInfo(this, JZMScreenConst.SCREEN_ID_ZMW03501, paramMap);

			// 戻り先画面IDの設定
			JZMWebCommon.setScreenId(this, JZMScreenConst.SCREEN_ID_ZMW03501, JZMScreenConst.SCREEN_ID_ZMW03301);
			JZMWebCommon.setScreenId(this, JZMScreenConst.SCREEN_ID_ZMW03503, JZMScreenConst.SCREEN_ID_ZMW03301);

			// 遷移先画面ID、名称の設定
			JZMWebCommon.setNextScreenInfo(commonBean, JZMScreenConst.SCREEN_ID_ZMW03501,
					JZMScreenConst.SCREEN_NAME_ZMW03501);
		}
		else if(isDtail)
		{
			// 詳細画面への遷移処理
			paramMap = new HashMap<String, Object>();
			paramMap.put(ZMW03701SFConst.ROLE_CD, choiceRoleCd);
			paramMap.put(ZMW03701SFConst.AUTHORITY_CD, authorityCd);
			paramMap.put(ZMW03701SFConst.AUTHORITY_NM, authorityNm);
			paramMap.put(ZMW03701SFConst.AUTHORITY_SBT_CD, authoritySbtCd);

			// 引継ぎ情報の設定
			JZMWebCommon.setScreenInfo(this, JZMScreenConst.SCREEN_ID_ZMW03701, paramMap);

			// 戻り先画面IDの設定
			JZMWebCommon.setScreenId(this, JZMScreenConst.SCREEN_ID_ZMW03701, JZMScreenConst.SCREEN_ID_ZMW03301);

			// 遷移先画面ID、名称の設定
			JZMWebCommon.setNextScreenInfo(commonBean, JZMScreenConst.SCREEN_ID_ZMW03701,
					JZMScreenConst.SCREEN_NAME_ZMW03701);
		}
		else
		{
			// 遷移先画面ID、名称の設定
			JZMWebCommon.setNextScreenInfo(commonBean, JZMScreenConst.SCREEN_ID_ZMW03302,
					JZMScreenConst.SCREEN_NAME_ZMW03302);
		}

		return true;
	}


	/**
	 * ページング処理を行います。
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	public boolean paging()throws Exception
	{

		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// 表示情報を検索情報に設定
		JZMWebCommon.shiftBeanValue(bean, ZMW03301SFConst.DSP_ROLE_CD, ZMW03301SFConst.ROLE_CD);
		JZMWebCommon.shiftBeanValue(bean, ZMW03301SFConst.DSP_ROLE_NM, ZMW03301SFConst.ROLE_NM);
		JZMWebCommon.shiftBeanValue(bean, ZMW03301SFConst.DSP_APLY_PRD_END_DAY, ZMW03301SFConst.APLY_PRD_END_DAY);
		JZMWebCommon.shiftBeanValue(bean, ZMW03301SFConst.DSP_APLY_PRD_END_MON, ZMW03301SFConst.APLY_PRD_END_MON);
		JZMWebCommon.shiftBeanValue(bean, ZMW03301SFConst.DSP_APLY_PRD_END_YEAR, ZMW03301SFConst.APLY_PRD_END_YEAR);
		JZMWebCommon.shiftBeanValue(bean, ZMW03301SFConst.DSP_APLY_PRD_STA_DAY, ZMW03301SFConst.APLY_PRD_STA_DAY);
		JZMWebCommon.shiftBeanValue(bean, ZMW03301SFConst.DSP_APLY_PRD_STA_MON, ZMW03301SFConst.APLY_PRD_STA_MON);
		JZMWebCommon.shiftBeanValue(bean, ZMW03301SFConst.DSP_APLY_PRD_STA_YEAR, ZMW03301SFConst.APLY_PRD_STA_YEAR);

		// 選択行の設定
		JZMWebCommon.setSendMessageString(bean, ZMW03301SFConst.CHOICE_ROW, JZMWebConst.ZERO);

		// 明細表示フラグの設定
		JZMWebCommon.setSendMessageBoolean(bean, ZMW03301SFConst.DTL_DSP_FLG, false);

		// 選択ロールコードの設定
		JZMWebCommon.setSendMessageString(bean, ZMW03301SFConst.CHOICE_ROLE_CD, null);

		// 検索処理の呼び出し
		callRoleSearchSrv(false);

		// 遷移先画面ID、名称の設定
		JZMWebCommon.setNextScreenInfo(commoninfoBean, JZMScreenConst.SCREEN_ID_ZMW03301, JZMScreenConst.SCREEN_NAME_ZMW03301);

		return true;
	}


	/**
	 * 登録ボタン処理を行います。
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	public boolean add()throws Exception
	{

		// 共有フォームBean
		X31SDataBeanAccess commonBean = getCommonInfoBean();

		// サービスフォームBean
		X31SDataBeanAccess bean = getServiceFormBean();

		// 選択行のロールコード、ロール名の取得と設定
		String index = getChoiceRowIndex(bean);
		String choiceRoleCd = getChoiceRoleCd(bean, index);

		JZMWebCommon.setSendMessageString(bean, ZMW03301SFConst.CHOICE_ROLE_CD, choiceRoleCd);

		// 遷移先画面区分を設定する。
		JZMWebCommon.setSendMessageString(bean, ZMW03301SFConst.SENI_SCREEN_KBN, SENI_SAKI_ADD);

		// 権限種別コードリストを取得する。
		callGetAuthoritySbtCdSrv(bean);

		// 画面遷移
		JZMWebCommon.setNextScreenInfo(commonBean, JZMScreenConst.SCREEN_ID_ZMW03302, JZMScreenConst.SCREEN_NAME_ZMW03302);

		return true;
	}

	/**
	 * 複写登録ボタン処理を行います。
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	public boolean copyAdd()throws Exception
	{

		// 共有フォームBean
		X31SDataBeanAccess commonBean = getCommonInfoBean();

		// サービスフォームBean
		X31SDataBeanAccess bean = getServiceFormBean();

		// 選択行のロールコード、ロール名の取得と設定
		String index = getChoiceRowIndex(bean);
		String choiceRoleCd = getChoiceRoleCd(bean, index);

		JZMWebCommon.setSendMessageString(bean, ZMW03301SFConst.CHOICE_ROLE_CD, choiceRoleCd);

		// 情報格納用HashMap
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// セッションに情報を格納する
		JZMWebCommon.setScreenInfo(this, JZMScreenConst.SCREEN_ID_ZMW03301, setTransData(bean));

		// 情報格納用HashMap
		paramMap = new HashMap<String, Object>();

		// 遷移先画面へ情報引継ぎを行う。
		paramMap.put(ZMW03401SFConst.ROLE_CD, choiceRoleCd);
		paramMap.put(ZMW03401SFConst.COPY_ADD_FLG, true);

		JZMWebCommon.setScreenInfo(this, JZMScreenConst.SCREEN_ID_ZMW03401, paramMap);

		// 戻り先画面IDの設定
		JZMWebCommon.setScreenId(this, JZMScreenConst.SCREEN_ID_ZMW03401, JZMScreenConst.SCREEN_ID_ZMW03301);
		JZMWebCommon.setScreenId(this, JZMScreenConst.SCREEN_ID_ZMW03403, JZMScreenConst.SCREEN_ID_ZMW03301);

		// 画面遷移
		JZMWebCommon.setNextScreenInfo(commonBean, JZMScreenConst.SCREEN_ID_ZMW03401, JZMScreenConst.SCREEN_NAME_ZMW03401);

		return true;
	}


	/**
	 * 更新ボタン処理を行います。
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	public boolean upd()throws Exception
	{

		// 共有フォームBean
		X31SDataBeanAccess commonBean = getCommonInfoBean();

		// サービスフォームBean
		X31SDataBeanAccess bean = getServiceFormBean();

		// 選択行のロールコード、ロール名の取得と設定
		String index = getChoiceRowIndex(bean);
		String choiceRoleNo = getChoiceRoleCd(bean, index);

		JZMWebCommon.setSendMessageString(bean, ZMW03301SFConst.CHOICE_ROLE_CD, choiceRoleNo);
		JZMWebCommon.setSendMessageString(bean, ZMW03301SFConst.CHOICE_ROLE_NM, getChoiceRoleNm(bean, index));

		// 遷移先画面区分を設定する。
		JZMWebCommon.setSendMessageString(bean, ZMW03301SFConst.SENI_SCREEN_KBN, SENI_SAKI_UPD);

		// 権限種別コードリストを取得する。
		callGetAuthoritySbtCdSrv(bean);

		// 画面遷移
		JZMWebCommon.setNextScreenInfo(commonBean, JZMScreenConst.SCREEN_ID_ZMW03302, JZMScreenConst.SCREEN_NAME_ZMW03302);

		return true;
	}

	/**
	 * 削除ボタン処理を行います。
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	public boolean del()throws Exception
	{

		// 共有フォームBean
		X31SDataBeanAccess commonBean = getCommonInfoBean();

		// サービスフォームBean
		X31SDataBeanAccess bean = getServiceFormBean();

		// 選択行のロール情報の取得と設定
		String index = getChoiceRowIndex(bean);

		String choiceRoleCd = getChoiceRoleCd(bean, index);
		String upddtm = getChoiceRoleUpdDtm(bean, index);

		JZMWebCommon.setSendMessageString(bean, ZMW03301SFConst.CHOICE_ROLE_CD, choiceRoleCd);

		// 情報格納用HashMap
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// セッションに情報を格納する
		JZMWebCommon.setScreenInfo(this, JZMScreenConst.SCREEN_ID_ZMW03301, setTransData(bean));

		paramMap = new HashMap<String, Object>();

		paramMap.put(ZMW03601SFConst.ROLE_CD, choiceRoleCd);
		paramMap.put(ZMW03601SFConst.ROLE_UPD_DTM, upddtm);

		JZMWebCommon.setScreenInfo(this, JZMScreenConst.SCREEN_ID_ZMW03601, paramMap);

		// 戻り先画面IDの設定
		JZMWebCommon.setScreenId(this, JZMScreenConst.SCREEN_ID_ZMW03601, JZMScreenConst.SCREEN_ID_ZMW03301);
		JZMWebCommon.setScreenId(this, JZMScreenConst.SCREEN_ID_ZMW03602, JZMScreenConst.SCREEN_ID_ZMW03301);

		// 画面遷移
		JZMWebCommon.setNextScreenInfo(commonBean, JZMScreenConst.SCREEN_ID_ZMW03601, JZMScreenConst.SCREEN_NAME_ZMW03601);

		return true;
	}

	/**
	 * 明細ボタン処理を行います。
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	public boolean dtail()throws Exception
	{

		// 共有フォームBean
		X31SDataBeanAccess commonBean = getCommonInfoBean();

		// サービスフォームBean
		X31SDataBeanAccess bean = getServiceFormBean();

		String index = getChoiceRowIndex(bean);
		JZMWebCommon.setSendMessageString(bean, ZMW03301SFConst.CHOICE_ROLE_CD, getChoiceRoleCd(bean, index));
		JZMWebCommon.setSendMessageString(bean, ZMW03301SFConst.CHOICE_ROLE_NM, getChoiceRoleNm(bean, index));

		// 遷移先画面区分を設定する。
		JZMWebCommon.setSendMessageString(bean, ZMW03301SFConst.SENI_SCREEN_KBN, SENI_SAKI_DTAIL);

		// 権限種別コードリストを取得する。
		callGetAuthoritySbtCdSrv(bean);

		// 画面遷移
		JZMWebCommon.setNextScreenInfo(commonBean, JZMScreenConst.SCREEN_ID_ZMW03302, JZMScreenConst.SCREEN_NAME_ZMW03302);

		return true;
	}

	/**
	 * 戻るボタン処理を行います。
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	public boolean back()throws Exception
	{

		// 画面遷移
		JZMWebCommon.setNextScreenInfo(getCommonInfoBean(), JZMWebCommon.getScreenId(this), JZMWebConst.BLANK);

		return true;
	}

	/**
	 * 戻るボタン処理を行います。
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	public boolean back2()throws Exception
	{

		JZMWebCommon.setScreenInfo(this, JZMScreenConst.SCREEN_ID_ZMW03401, null);
		JZMWebCommon.setScreenInfo(this, JZMScreenConst.SCREEN_ID_ZMW03501, null);
		JZMWebCommon.setScreenInfo(this, JZMScreenConst.SCREEN_ID_ZMW03601, null);
		JZMWebCommon.setScreenInfo(this, JZMScreenConst.SCREEN_ID_ZMW03701, null);

		X31SDataBeanAccess bean = getServiceFormBean();
		JZMWebCommon.setSendMessageString(bean, ZMW03301SFConst.AUTHORITY_CD, null);
		JZMWebCommon.setSendMessageString(bean, ZMW03301SFConst.AUTHORITY_NM, null);

		// 明細表示フラグを0(非表示)を設定
		bean.sendMessageBoolean(ZMW03301SFConst.DTL_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, false);

		// 検索フラグを0(非表示)を設定
		bean.sendMessageBoolean(ZMW03301SFConst.SEARCH_FLG, X31CWebConst.DATABEAN_SET_VALUE, false);

		// ページリンク情報を削除する。
		// JZMWebCommon.clearPageLinkInfo(this, JZMScreenConst.SCREEN_ID_ZMW03301);

		// 検索サービスを呼び出す
		callRoleSearchSrv(true);

		// 画面遷移
		JZMWebCommon.setNextScreenInfo(getCommonInfoBean(), JZMScreenConst.SCREEN_ID_ZMW03301, JZMScreenConst.SCREEN_NAME_ZMW03301);

		return true;
	}

	/**
	 * 権限種別コード取得サービスを呼び出します。
	 * <br>
	 * @param bean サービスフォームBean
	 */
	@SuppressWarnings("unchecked")
	private void callGetAuthoritySbtCdSrv(X31SDataBeanAccess bean)
	{

		HashMap<String, Object> paramMap = null;
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess[] paramBean = {bean};

		// ユースケースID格納用マップ
		paramMap = new HashMap<String, Object>();

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// ユースケースIDの設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JZMWebConst.SV101);

		// マッピングクラスのインスタンスを生成
		ZMSV0101_ZMSV0101OPDBMapper mapper = new ZMSV0101_ZMSV0101OPDBMapper();
		mapper.setZMSV010101SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// 基準日を設定する
		if(dataMap.containsKey(JZMWebConst.SC10101))
		{
			HashMap<String, Object> inDataMap = (HashMap<String, Object>)dataMap.get(JZMWebConst.SC10101);
			inDataMap.put(JZMWebConst.KEY_STDARDYMD, JZMWebCommon.getOpeDate(this, null));
		}

		// サービスの呼び出し
		invokeService(paramMap, dataMap, outputMap);

		// 一覧の初期化
		bean.getDataBeanArray(ZMW03301SFConst.AUTHORITY_SBT_CD_INFO).clearArray();

		// マッピングクラスの呼び出し
		mapper.getZMSV010101SC(paramBean, outputMap);
	}

	/**
	 * ロール検索サービスを呼び出します。
	 * <br />
	 * @return 実行結果
	 */
	private void callRoleSearchSrv(boolean is3302)
	{
		// 共有フォームBean
		X31SDataBeanAccess commonBean = getCommonInfoBean();

		// サービスフォームBean
		X31SDataBeanAccess bean = getServiceFormBean();
		X31SDataBeanAccess[] paramBean = {bean};

		// ユースケースID格納用マップを生成。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JZMWebConst.SV99);

		// マッピングクラスのインスタンスを生成
		ZMSV0099_ZMSV0099OPDBMapper mapper = new ZMSV0099_ZMSV0099OPDBMapper();
		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		mapper.setZMSV009901CC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		if(is3302)
		{
			// ページング情報の設定
			JZMWebCommon.upmapperPageLinkInfo(this, JZMWebConst.ZERO, JZMWebConst.CC9901, dataMap, JZMScreenConst.SCREEN_ID_ZMW03301);
		}
		else
		{
			// ページング情報の設定
			JZMWebCommon.upmapperPageLinkInfo(this, JZMWebConst.CC9901, dataMap);
		}

		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// サービスの呼び出し
		invokeService(paramMap, dataMap, outputMap);

		// 一覧の初期化
		bean.getDataBeanArray(ZMW03301SFConst.EZM0031B010CBSMSG1LIST).clearArray();

		// マッピングクラスの呼び出し
		mapper.getZMSV009901CC(paramBean, outputMap);

		// 検索エラーフラグの取得
		String searchErrFlg = JZMWebCommon.getSearchErrFlg(JZMWebConst.CC9901, outputMap);

		// 検索結果が0件の場合
		if(JPCModelConstant.SEARCH_ERR_FLG_ZERO.equals(searchErrFlg))
		{
			if(!JZMWebCommon.hasMsgList(commonBean))
			{
				// 検索結果が0件の場合、エラーメッセージを表示
				JZMWebCommon.setMessageInfo(this, SEARCH_ERR_MESSAGE_ZERO);;
			}

		}

		// 検索結果が最大超過の場合
		else if(JPCModelConstant.SEARCH_ERR_FLG_OVERMAX.equals(searchErrFlg))
		{
			if(!JZMWebCommon.hasMsgList(commonBean))
			{
				String[] item = {JZMWebCommon.getSearchConst(MAX_SHOW_CNT_03301)};

				// 検索結果が最大検索件数を超える場合、エラーメッセージを表示
				JZMWebCommon.setMessageInfo(this, SEARCH_ERR_MESSAGE_OVERMAX, item);
			}

		}
		else
		{

			// 表示ページなしの場合
			if(JPCModelConstant.SEARCH_ERR_FLG_NODATA.equals(searchErrFlg))
			{
				if(!JZMWebCommon.hasMsgList(commonBean))
				{
					// 表示ページに該当するデータが存在しない場合、エラーメッセージを表示
					JZMWebCommon.setMessageInfo(this, SEARCH_ERR_MESSAGE_NODATA);
					JZMWebCommon.setSendMessageString(bean, ZMW03301SFConst.CHOICE_ROW, JZMWebConst.ZERO);
				}

			}

			// 明細表示フラグに1(表示)を設定
			JZMWebCommon.setSendMessageBoolean(bean, ZMW03301SFConst.DTL_DSP_FLG, true);

			if(is3302)
			{
				// ページング情報の設定
				JZMWebCommon.downmapperPageLinkInfo(this, JZMWebConst.ZERO, JZMWebConst.CC9901, outputMap, JZMScreenConst.SCREEN_ID_ZMW03301);

				// 検索のコマンドIDを設定
				JZMWebCommon.setSearchCommand(this, JZMWebConst.EVENT_ID_PAGING, JZMWebConst.EVENT_ID_PAGING);
			}
			else
			{
				// ページング情報の設定
				JZMWebCommon.downmapperPageLinkInfo(this, JZMWebConst.CC9901, outputMap);

				// 検索のコマンドIDを設定
				JZMWebCommon.setSearchCommand(this, JZMWebConst.EVENT_ID_PAGING);
			}
			// 選択行の設定
			JZMWebCommon.setChoiseRow(bean, 
					ZMW03301SFConst.CHOICE_ROLE_CD, 
					ZMW03301SFConst.EZM0031B010CBSMSG1LIST, 
					ZMW03301SFConst.ROLE_CD_01, 
					ZMW03301SFConst.CHOICE_ROW);


			// 行の背景色を設定
			JZMWebCommon.setRowStyleClass(bean, ZMW03301SFConst.EZM0031B010CBSMSG1LIST, ZMW03301SFConst.ROW_STYLE_CLASS_01);
		}
		// 検索フラグを1(表示)を設定
		bean.sendMessageBoolean(ZMW03301SFConst.SEARCH_FLG, X31CWebConst.DATABEAN_SET_VALUE, true);

	}

	/**
	 * セッション情報に格納するハッシュマップを作成します。
	 * @param bean サービスフォームBean
	 * @return 格納情報マップ
	 */
	private HashMap<String, Object> setTransData(X31SDataBeanAccess bean)
	{
		// 情報格納用HashMap
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// 選択行の取得
		String choiceListIndex = getChoiceRowIndex(bean);
		if(choiceListIndex == null || JZMWebConst.BLANK.equals(choiceListIndex))
		{
			choiceListIndex = JZMWebConst.ZERO;
		}

		putBeanValue(bean, paramMap, ZMW03301SFConst.ROLE_CD);
		putBeanValue(bean, paramMap, ZMW03301SFConst.ROLE_NM);
		putBeanValue(bean, paramMap, ZMW03301SFConst.APLY_PRD_STA_YEAR);
		putBeanValue(bean, paramMap, ZMW03301SFConst.APLY_PRD_STA_MON);
		putBeanValue(bean, paramMap, ZMW03301SFConst.APLY_PRD_STA_DAY);
		putBeanValue(bean, paramMap, ZMW03301SFConst.APLY_PRD_STA);
		putBeanValue(bean, paramMap, ZMW03301SFConst.APLY_PRD_END_YEAR);
		putBeanValue(bean, paramMap, ZMW03301SFConst.APLY_PRD_END_MON);
		putBeanValue(bean, paramMap, ZMW03301SFConst.APLY_PRD_END_DAY);
		putBeanValue(bean, paramMap, ZMW03301SFConst.APLY_PRD_END);

		putBeanValue(bean, paramMap, ZMW03301SFConst.DSP_ROLE_CD, ZMW03301SFConst.ROLE_CD);
		putBeanValue(bean, paramMap, ZMW03301SFConst.DSP_ROLE_NM, ZMW03301SFConst.ROLE_NM);
		putBeanValue(bean, paramMap, ZMW03301SFConst.DSP_APLY_PRD_STA_YEAR, ZMW03301SFConst.APLY_PRD_STA_YEAR);
		putBeanValue(bean, paramMap, ZMW03301SFConst.DSP_APLY_PRD_STA_MON, ZMW03301SFConst.APLY_PRD_STA_MON);
		putBeanValue(bean, paramMap, ZMW03301SFConst.DSP_APLY_PRD_STA_DAY, ZMW03301SFConst.APLY_PRD_STA_DAY);
		putBeanValue(bean, paramMap, ZMW03301SFConst.DSP_APLY_PRD_END_YEAR, ZMW03301SFConst.APLY_PRD_END_YEAR);
		putBeanValue(bean, paramMap, ZMW03301SFConst.DSP_APLY_PRD_END_MON, ZMW03301SFConst.APLY_PRD_END_MON);
		putBeanValue(bean, paramMap, ZMW03301SFConst.DSP_APLY_PRD_END_DAY, ZMW03301SFConst.APLY_PRD_END_DAY);

		putBeanValue(bean, paramMap, ZMW03301SFConst.CHOICE_ROLE_CD);
		putBeanValue(bean, paramMap, ZMW03301SFConst.CHOICE_ROLE_NM);

		putBeanValue(bean, paramMap, ZMW03301SFConst.SENI_SCREEN_KBN);

		putBeanValue(bean, paramMap, ZMW03301SFConst.AUTHORITY_CD);
		putBeanValue(bean, paramMap, ZMW03301SFConst.AUTHORITY_NM);

		String choiceComboIndex = JZMWebCommon.getPullDownIndex(bean, ZMW03301SFConst.AUTHORITY_SBT_CD_INFO, ZMW03301SFConst.AUTHORITY_SBT_CD_IDX_02);

		// プルダウンデータBeanの取得
		X31SDataBeanAccess comboBean = bean.getDataBeanArray(ZMW03301SFConst.AUTHORITY_SBT_CD_INFO).getDataBean(0);

		// プルダウンの項目数を取得
		int listCnt = JZMWebCommon.getBeanListCount(comboBean, ZMW03301SFConst.AUTHORITY_SBT_CD_NM_LIST_02);

		String[] nmArray = new String[listCnt];

		// プルダウン項目より、選択されたインデックスを取得
		for (int i = 0; i < listCnt; i++)
		{
			nmArray[i] = comboBean.sendMessageString(ZMW03301SFConst.AUTHORITY_SBT_CD_NM_LIST_02, X31CWebConst.DATABEAN_GET_VALUE, i);
		}

		listCnt = JZMWebCommon.getBeanListCount(comboBean, ZMW03301SFConst.AUTHORITY_SBT_CD_VALUE_LIST_02);

		String[] valArray = new String[listCnt];
		// プルダウン項目より、選択されたインデックスを取得
		for (int i = 0; i < listCnt; i++)
		{
			valArray[i] = comboBean.sendMessageString(ZMW03301SFConst.AUTHORITY_SBT_CD_VALUE_LIST_02, X31CWebConst.DATABEAN_GET_VALUE, i);
		}

		HashMap<String, Object> comboMap = new HashMap<String, Object>();

		comboMap.put(ZMW03301SFConst.AUTHORITY_SBT_CD_IDX_02, choiceComboIndex);
		comboMap.put(ZMW03301SFConst.AUTHORITY_SBT_CD_NM_LIST_02, nmArray);
		comboMap.put(ZMW03301SFConst.AUTHORITY_SBT_CD_VALUE_LIST_02, valArray);

		ArrayList<Object> comboList = new ArrayList<Object>();

		comboList.add(comboMap);

		paramMap.put(ZMW03301SFConst.AUTHORITY_SBT_CD_INFO, comboList);

		return paramMap;
	}

	/** bean内の指定した項目をparamMapにputします。
	 * @param	bean	DataBean
	 * @param	paramMap paramMap
	 * @param	key	ハップマップキー項目
	 * */
	private void putBeanValue(X31SDataBeanAccess bean, 
			HashMap<String, Object> paramMap,
			String key)
	{
		String value = JZMWebCommon.getSendMessageString(bean, key);
		paramMap.put(key, value);
	}

	/** bean内の指定した項目をparamMapにputします。 
	 * @param	bean	DataBean
	 * @param	paramMap paramMap
	 * @param	key	ハップマップキー項目
	 * @param valueColumnName	設定項目名
	 * */
	private void putBeanValue(X31SDataBeanAccess bean, 
			HashMap<String, Object> paramMap,
			String key,
			String valueColumnName)
	{
		String value = JZMWebCommon.getSendMessageString(bean, valueColumnName);
		paramMap.put(key, value);
	}


	/**
	 * 選択ロールコードのロールコードを取得します。
	 * @param bean サービスフォームBean
	 * @param index 選択列
	 * @return ロールコード
	 */
	private String getChoiceRoleCd(X31SDataBeanAccess bean, String index)
	{
		if(!JZMWebCommon.isNumeric(index))
		{
			return null;
		}
		return JZMWebCommon.getBeanArrayValue(bean, 
				ZMW03301SFConst.EZM0031B010CBSMSG1LIST, 
				Integer.parseInt(index), 
				ZMW03301SFConst.ROLE_CD_01);
	}

	/**
	 * 選択ロールコードのロール名を取得します。
	 * @param bean サービスフォームBean
	 * @param index 選択列
	 * @return ロール名
	 */
	private String getChoiceRoleNm(X31SDataBeanAccess bean, String index)
	{
		if(!JZMWebCommon.isNumeric(index))
		{
			return null;
		}
		return JZMWebCommon.getBeanArrayValue(bean, 
				ZMW03301SFConst.EZM0031B010CBSMSG1LIST, 
				Integer.parseInt(index), 
				ZMW03301SFConst.ROLE_NM_01);
	}

	/**
	 * 選択ロールコードの更新年月日を取得します。
	 * @param bean サービスフォームBean
	 * @param index 選択列
	 * @return 更新年月日
	 */
	private String getChoiceRoleUpdDtm(X31SDataBeanAccess bean, String index)
	{
		if(!JZMWebCommon.isNumeric(index))
		{
			return null;
		}
		return JZMWebCommon.getBeanArrayValue(bean, 
				ZMW03301SFConst.EZM0031B010CBSMSG1LIST, 
				Integer.parseInt(index), 
				ZMW03301SFConst.ROLE_UPD_DTM_01);
	}

	/**
	 * 選択行インデックスの取得処理です。
	 * @param bean サービスフォームBean
	 * @return 選択行インデックス
	 */
	private String getChoiceRowIndex(X31SDataBeanAccess bean)
	{
		return JZMWebCommon.getSendMessageString(bean, ZMW03301SFConst.CHOICE_ROW);
	}
	
}
