/*********************************************************************
* All Rights reserved, Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム共通（共通マスタ）
*   モジュール名    ：ZMW03501SFLogic
*   ソースファイル名：ZMW03501SFLogic.java
*   作成者          ：富士通
*   日付            ：2012年04月03日
*＜機能概要＞
*   ロール情報更新のビューロジックです
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v3.00       2012/06/11   FJ）北島    新規作成
*   v4.00       2012/12/20   FJ）日野    【TAI-2012-0000140】
*
**********************************************************************/

package eo.web.webview.ZMW03501SF;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CVector;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
import eo.common.util.JPCUtilCommon;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JZMScreenConst;
import eo.web.webview.common.JZMWebCommon;
import eo.web.webview.common.JZMWebConst;
import eo.web.webview.mapping.ZMSV0100_ZMSV0100OPDBMapper_ZMSV010002CC;
import eo.web.webview.mapping.ZMSV0120_ZMSV0120OPDBMapper;
import eo.web.webview.mapping.ZMSV0123_ZMSV0123OPDBMapper;
import eo.web.webview.mapping.ZMSV0125_ZMSV0125OPDBMapper;

/**
 * ロール情報更新のビューロジックです
 * @author 909397
 *
 */
@SuppressWarnings("serial")
public class ZMW03501SFLogic extends JCCWebBusinessLogic
{
	/** 機能コード１  */
	private static final String FUNC_CD_1 = JPCModelConstant.FUNC_CD_1;

	/** 機能コード２  */
	private static final String FUNC_CD_2 = JPCModelConstant.FUNC_CD_2;
	
	/** サーチエラーフラグ 1  */
	private static final String SEARCH_ERR_FLG_ZERO = JPCModelConstant.SEARCH_ERR_FLG_ZERO;

	/** サーチエラーフラグ 2  */
	private static final String SEARCH_ERR_FLG_OVERMAX = JPCModelConstant.SEARCH_ERR_FLG_OVERMAX;

	/** サーチエラーフラグ 3  */
	private static final String SEARCH_ERR_FLG_NODATA = JPCModelConstant.SEARCH_ERR_FLG_NODATA;
	
	/** メッセージID EKB0330--I  */
	private static final String SEARCH_ERR_MESSAGE_ZERO_ROLE = JPCOnlineMessageConstant.EKB0300_KW;
	
	/** メッセージ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 ZMW03501_MAX_SHOW_CNT = "ZMW03501_MAX_SHOW_CNT";
	
	/** 最大表示数 */
	private static final String ZMW03501_ROW_PER_PAGE = "ZMW03501_ROW_PER_PAGE";

	/** 確認メッセージ置換文字*/
	private static final String[] MSG_REP_INIT = {"ロール情報更新依頼"};
	
	/** 完了メッセージ置換文字*/
	private static final String[] MSG_REP_FIN = {"ロール情報更新依頼"};
	
	/** ロールコードが存在しない場合のエラーメッセージ */
	private static final String[] NO_ROLE_MSG_ITEM  = {"ロール", "情報"};
	
	/**
	 * ロール更新初期表示処理を行います
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	public boolean init() throws Exception
	{
		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		X31SDataBeanAccess[] paramBean = {bean};
		
		if(JZMWebCommon.getScreenInfo(this) == null)
		{
			String screenId = JZMWebCommon.getScreenId(this);
			
			// 遷移先画面ID、名称の設定
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
					X31CWebConst.DATABEAN_SET_VALUE, screenId);
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
					X31CWebConst.DATABEAN_SET_VALUE, JZMWebConst.BLANK);
			setTransferPageId(screenId + JZMWebConst.PJP);
			
			return true;
		}
		
		// ページリンク情報の消去
		JZMWebCommon.clearPageLinkInfo(this, this.getGamenId());
		
		// ユースケースID格納用マップを生成
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		// ユースケースIDを指定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JZMWebConst.SV120);
		
		// サービス実行入力データ用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		
		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// マッピングクラスのインスタンスを生成
		ZMSV0120_ZMSV0120OPDBMapper mapper1 = new ZMSV0120_ZMSV0120OPDBMapper();
		
		// 検索エラーフラグの取得
		String searchErrFlg = null;
		String roleSearchErrFlg = null;
		
		// 上りマッピング
		mapper1.setZMSV012001SC(paramBean, dataMap, FUNC_CD_1);
		mapper1.setZMSV012002SC(paramBean, dataMap, FUNC_CD_1);
		mapper1.setZMSV012003CC(paramBean, dataMap, FUNC_CD_1, JZMWebConst.ZERO);
		mapper1.setZMSV012004CC(paramBean, dataMap, FUNC_CD_1, JZMWebConst.ONE);
		
		// ページング情報の設定
		JZMWebCommon.upmapperPageLinkInfo(this, JZMWebConst.CC12003, dataMap);
		JZMWebCommon.upmapperPageLinkInfo(this, JZMWebConst.CC12004, dataMap);
		
		// サービスの呼び出し
		super.invokeService(paramMap, dataMap, outputMap);
		
		// マッピングクラスの呼び出し
		mapper1.getZMSV012001SC(paramBean, outputMap);
		mapper1.getZMSV012002SC(paramBean, outputMap);
		mapper1.getZMSV012003CC(paramBean, outputMap);
		mapper1.getZMSV012004CC(paramBean, outputMap);
		
		// 検索エラーフラグの取得
		roleSearchErrFlg = JZMWebCommon.getSearchErrFlg(JZMWebConst.SC12001, outputMap);
		searchErrFlg = JZMWebCommon.getSearchErrFlg(JZMWebConst.CC12003, outputMap);
		
		// 検索結果0件の場合
		if(JPCModelConstant.SEARCH_ERR_FLG_ZERO.equals(roleSearchErrFlg))
		{
			String screenId = null;
			
			// 検索結果が0件の場合、エラーメッセージを表示
			JZMWebCommon.setMessageInfo(this, SEARCH_ERR_MESSAGE_ZERO_ROLE, NO_ROLE_MSG_ITEM);
			
			// 遷移先画面を設定する。
			screenId = JZMWebCommon.getScreenId(this);
			JZMWebCommon.setNextScreenInfo(commonBean, screenId, JZMWebConst.BLANK);
			setTransferPageId(screenId + JZMWebConst.PJP);
			
			return true;
		}
		
		// 権限検索エラーの場合
		if(searchErrFlg != null && !JZMWebConst.BLANK.equals(searchErrFlg))
		{
			// 権限検索エラーに対応するエラーメッセージを設定する
			setAuthorityErrMsg(searchErrFlg);

			// 戻り先画面を設定する。
			JZMWebCommon.setNextScreenInfo(commonBean, JZMScreenConst.SCREEN_ID_ZMW03302, JZMWebConst.BLANK);
			setTransferPageId(JZMScreenConst.SCREEN_ID_ZMW03302 + JZMWebConst.PJP);

			return true;
		}
		
		// ページング情報の設定
		JZMWebCommon.downmapperPageLinkInfo(this, JZMWebConst.CC12003, outputMap);
		
		
		if(!JZMWebCommon.hasSplitedYmd(bean, ZMW03501SFConst.TSTAYMD_YEAR, ZMW03501SFConst.TSTAYMD_MON, ZMW03501SFConst.TSTAYMD_DAY))
		{
			// 年月日を分割設定する
			JZMWebCommon.setSplitYmd(bean,
							ZMW03501SFConst.TSTAYMD,
							ZMW03501SFConst.TSTAYMD_YEAR,
							ZMW03501SFConst.TSTAYMD_MON,
							ZMW03501SFConst.TSTAYMD_DAY);
		}
		
		if(!JZMWebCommon.hasSplitedYmd(bean, ZMW03501SFConst.TENDYMD_YEAR, ZMW03501SFConst.TENDYMD_MON, ZMW03501SFConst.TENDYMD_DAY))
		{
			JZMWebCommon.setSplitYmd(bean,
							ZMW03501SFConst.TENDYMD,
							ZMW03501SFConst.TENDYMD_YEAR,
							ZMW03501SFConst.TENDYMD_MON,
							ZMW03501SFConst.TENDYMD_DAY);
		}
		
		// 検索のコマンドIDを設定
		JZMWebCommon.setSearchCommand(this, JZMWebConst.EVENT_ID_PAGING);
		
		// 背景色のスタイルクラスを設定
		JZMWebCommon.setRowStyleClass(bean, ZMW03501SFConst.EZM0011B011CBSMSG1LIST, ZMW03501SFConst.ROW_STYLE_CLASS_01);
		
		// 行選択フラグを設定
		setRowChoiceFlg(false);
		
		// 遷移先画面を設定
		JZMWebCommon.setNextScreenInfo(commonBean, JZMScreenConst.SCREEN_ID_ZMW03501, JZMScreenConst.SCREEN_NAME_ZMW03501);
		
		return true;
	}
	
	/**
	 * ページング処理を行います(更新画面)
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	public boolean paging() throws Exception
	{
		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();
		
		if(!pagingBase(false))
		{
			return true;
		}
		
		JZMWebCommon.setNextScreenInfo(commoninfoBean, JZMScreenConst.SCREEN_ID_ZMW03501, JZMScreenConst.SCREEN_NAME_ZMW03501);
		return true;
	}
	
	/**
	 * ページング処理を行います(確認画面)
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	public boolean paging2() throws Exception
	{
		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();
		
		if(!pagingBase(false))
		{
			return true;
		}
		
		// メッセージの設定の設定
		JZMWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0370__I , MSG_REP_INIT);
		
		// メッセージエリアの背景色を強調する
		JZMWebCommon.setMessageAreaBackColor(this, JZMWebConst.ONE);
		
		JZMWebCommon.setNextScreenInfo(commoninfoBean, JZMScreenConst.SCREEN_ID_ZMW03502, JZMScreenConst.SCREEN_NAME_ZMW03502);
		return true;
	}
	
	/**
	 * ページング処理を行います
	 * @param gotoKoshinGamen 更新画面への遷移
	 * @return 処理結果
	 */
	private boolean pagingBase(boolean gotoKoshinGamen)
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 選択・選択解除した権限をリストに追加します
		addChoiceAuthorityCd(bean);
		
		// 検索処理の呼び出し
		String searchErrFlg = callAuthoritySearchSrv(gotoKoshinGamen);
		
		// 明細表示フラグを設定する
		if(SEARCH_ERR_FLG_OVERMAX.equals(searchErrFlg))
		{
			JZMWebCommon.setSendMessageBoolean(bean, ZMW03501SFConst.DTL_DSP_FLG, false);
		}
		
		// 権限検索エラーフラグが出た場合は引継ぎ情報を格納する
		if(searchErrFlg != null && !JZMWebConst.BLANK.equals(searchErrFlg))
		{
			
			// ロール設定権限選択画面に遷移する
			seniTo3302(bean);
			return false;
		}

		// 行選択フラグを設定する
		setRowChoiceFlg(true);
		
		return true;
	}
	
	/**
	 * 更新確認ボタン処理を行います
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	public boolean updCfm() throws Exception
	{
		// 共有フォームBean
		X31SDataBeanAccess commonBean = getCommonInfoBean();

		// サービスフォームBean
		X31SDataBeanAccess bean = getServiceFormBean();
		
		// 権限コードを選択権限コードリスト、削除権限コードリストに追加する
		addChoiceAuthorityCd(bean);
		
		// 適用開始年月日の取得と設定
		String  ymd = JPCUtilCommon.concatYmd(
				bean.sendMessageString(ZMW03501SFConst.TSTAYMD_YEAR, X31CWebConst.DATABEAN_GET_VALUE), 
				bean.sendMessageString(ZMW03501SFConst.TSTAYMD_MON, X31CWebConst.DATABEAN_GET_VALUE), 
				bean.sendMessageString(ZMW03501SFConst.TSTAYMD_DAY, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(ZMW03501SFConst.TSTAYMD, X31CWebConst.DATABEAN_SET_VALUE, JZMWebCommon.nullToBlank(ymd));
		
		// 適用終了年月日の取得と設定
		ymd = JPCUtilCommon.concatYmd(
				bean.sendMessageString(ZMW03501SFConst.TENDYMD_YEAR, X31CWebConst.DATABEAN_GET_VALUE),
				bean.sendMessageString(ZMW03501SFConst.TENDYMD_MON, X31CWebConst.DATABEAN_GET_VALUE), 
				bean.sendMessageString(ZMW03501SFConst.TENDYMD_DAY, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(ZMW03501SFConst.TENDYMD, X31CWebConst.DATABEAN_SET_VALUE, JZMWebCommon.nullToBlank(ymd));
		
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess[] paramBean = {bean};

		// ユースケースID格納用マップ
		HashMap<String, Object> 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.SV123);
		
		// マッピングクラスのインスタンスを生成
		ZMSV0123_ZMSV0123OPDBMapper mapper = new ZMSV0123_ZMSV0123OPDBMapper();
		
		mapper.setZMSV012301CC(paramBean, dataMap, FUNC_CD_1);
		mapper.setZMSV012302SC(paramBean, dataMap, FUNC_CD_2);
		mapper.setZMSV012303CC(paramBean, dataMap, FUNC_CD_1);
		
		// ページング情報の設定
		JZMWebCommon.upmapperPageLinkInfo(this, JZMWebConst.ZERO, JZMWebConst.CC12303, dataMap, JZMScreenConst.SCREEN_ID_ZMW03502);
		
		// サービスの呼び出し
		invokeService(paramMap, dataMap, outputMap);
		
		String authoritySearchErrFlg = null;
		authoritySearchErrFlg = JZMWebCommon.getSearchErrFlg(JZMWebConst.CC12303, outputMap);

		// 明細表示フラグを設定する
		if(SEARCH_ERR_FLG_OVERMAX.equals(authoritySearchErrFlg))
		{
			JZMWebCommon.setSendMessageBoolean(bean, ZMW03501SFConst.DTL_DSP_FLG, false);
		}
		
		// 権限検索のエラー処理
		if(!JZMWebCommon.isNullOrBlank(authoritySearchErrFlg))
		{
			// 権限検索エラーに対応するエラーメッセージを設定する
			setAuthorityErrMsg(authoritySearchErrFlg);

			// ロール設定権限選択画面に遷移する
			seniTo3302(bean);
			return true;
		}
		
		// 一覧の初期化
		bean.getDataBeanArray(ZMW03501SFConst.EZM0011B011CBSMSG1LIST).clearArray();
		
		// マッピングクラスの呼び出し
		mapper.getZMSV012303CC(paramBean, outputMap);
		
		// ページング情報の設定
		JZMWebCommon.downmapperPageLinkInfo(this, JZMWebConst.ZERO, JZMWebConst.CC12303, outputMap, JZMScreenConst.SCREEN_ID_ZMW03502);

		// 検索のコマンドIDを設定する
		JZMWebCommon.setSearchCommand(this, JZMWebConst.EVENT_ID_PAGING, JZMScreenConst.SCREEN_ID_ZMW03502);
		
		// 背景色のスタイルクラスを設定
		JZMWebCommon.setRowStyleClass(bean, ZMW03501SFConst.EZM0011B011CBSMSG1LIST, ZMW03501SFConst.ROW_STYLE_CLASS_01);

		// メッセージの設定
		JZMWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0370__I, MSG_REP_INIT);
		
		// メッセージエリアの背景色を強調する
		JZMWebCommon.setMessageAreaBackColor(this, JZMWebConst.ONE);

		// 行選択フラグを設定する
		setRowChoiceFlg(true);
		
		// 画面遷移
		JZMWebCommon.setNextScreenInfo(commonBean, JZMScreenConst.SCREEN_ID_ZMW03502, JZMScreenConst.SCREEN_NAME_ZMW03502);
		
		return true;
	}

	/**
	 * 確定ボタン処理を行います
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	@SuppressWarnings("unchecked")
	public boolean fix() throws Exception
	{
		// 共有フォームBean
		X31SDataBeanAccess commonBean = getCommonInfoBean();

		// サービスフォームBean
		X31SDataBeanAccess bean = getServiceFormBean();
		
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess[] paramBean = {bean};

		// ユースケースID格納用マップ
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		String roleCd = JZMWebCommon.getSendMessageString(bean, ZMW03501SFConst.ROLE_CD);
		String roleNm = JZMWebCommon.getSendMessageString(bean, ZMW03501SFConst.ROLE_NM);
		String tstaymd = JZMWebCommon.getSendMessageString(bean, ZMW03501SFConst.TSTAYMD);
		String tendymd = JZMWebCommon.getSendMessageString(bean, ZMW03501SFConst.TENDYMD);
		String roleUpdDtm = JZMWebCommon.getSendMessageString(bean, ZMW03501SFConst.UPD_DTM);
		
		// 選択権限コードリスト
		ArrayList<String> choiceCdList = new ArrayList<String>();

		// 選択権限更新年月日時分秒リスト
		ArrayList<String> choiceDtmList = new ArrayList<String>();
		
		for(int i = 0; i < bean.getDataBeanArray(ZMW03501SFConst.CHOICE_AUTHORITY_CD_LIST).getCount(); i++)
		{
			X31SDataBeanAccess comboBean = bean.getDataBeanArray(ZMW03501SFConst.CHOICE_AUTHORITY_CD_LIST).getDataBean(i);
			choiceCdList.add(JZMWebCommon.getSendMessageString(comboBean, ZMW03501SFConst.CHOICE_AUTHORITY_CD_02));
			choiceDtmList.add(JZMWebCommon.getSendMessageString(comboBean, ZMW03501SFConst.CHOICE_AUTHORITY_UPD_DTM_02));
		}

		// 削除権限コードリスト
		ArrayList<String> delCdList = new ArrayList<String>();

		// 削除権限更新年月日時分秒リスト
		ArrayList<String> delDtmList = new ArrayList<String>();
		
		for(int i = 0; i < bean.getDataBeanArray(ZMW03501SFConst.DEL_AUTHORITY_CD_LIST).getCount(); i++)
		{
			X31SDataBeanAccess comboBean = bean.getDataBeanArray(ZMW03501SFConst.DEL_AUTHORITY_CD_LIST).getDataBean(i);
			delCdList.add(JZMWebCommon.getSendMessageString(comboBean, ZMW03501SFConst.DEL_AUTHORITY_CD_03));
			delDtmList.add(JZMWebCommon.getSendMessageString(comboBean, ZMW03501SFConst.DEL_AUTHORITY_UPD_DTM_03));
		}

		// ユースケースIDの設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JZMWebConst.SV125);

		// マッピングクラスのインスタンスを生成
		ZMSV0125_ZMSV0125OPDBMapper mapper = new ZMSV0125_ZMSV0125OPDBMapper();
		
		// バイナリ用Map
		HashMap<String, Object> attachMap = null;
		
		// attachMapを作成
		attachMap = JZMWebCommon.getRoleAttachMap(JZMWebConst.ROLE_SHORI_KBN_UPD, roleCd, roleNm, tstaymd, tendymd,
				roleUpdDtm, choiceCdList, choiceDtmList, delCdList, delDtmList);
		
		mapper.setZMSV012501CC(paramBean, dataMap, FUNC_CD_1);
		mapper.setZMSV012502SC(paramBean, dataMap, FUNC_CD_2);
		mapper.setZMSV012503SC(paramBean, dataMap, FUNC_CD_1);
		mapper.setZMSV012504SC(paramBean, dataMap, FUNC_CD_1);
		
		// マッピング
		HashMap<String, Object> inDataMap = (HashMap<String, Object>)dataMap.get(JZMWebConst.SC12503);
		inDataMap.put(JZMWebConst.ECC0111D010_DLYD_TRN_JSSI_UNYO_DTM, JZMWebCommon.getOpeDateTimeStamp(this, null));

		inDataMap = (HashMap<String, Object>)dataMap.get(JZMWebConst.SC12504);
		inDataMap.put(JZMWebConst.EZM0251D010_TRN_REQ_DTM, JZMWebCommon.getOpeDateTime(this, null).substring(0, 12));
		inDataMap.put(JZMWebConst.EZM0251D010_TRN_IRAISHA_OPEACNT, JZMWebCommon.getSendMessageString(commonBean, CommonInfoCFConst.USER_ID));
		
		// サービスの呼び出し
		invokeService(paramMap, dataMap, outputMap, attachMap);

		// メッセージの設定の設定
		JZMWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB4390__I, MSG_REP_FIN);
		
		// 画面遷移
		JZMWebCommon.setNextScreenInfo(commonBean, JZMScreenConst.SCREEN_ID_ZMW03503, JZMScreenConst.SCREEN_NAME_ZMW03503);
		
		return true;
	}
	
	/**
	 * 修正ボタン処理を行います
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	public boolean shusei() throws Exception
	{
		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		JZMWebCommon.clearPageLinkInfo(this, JZMScreenConst.SCREEN_ID_ZMW03501);
		JZMWebCommon.clearPageLinkInfo(this, JZMScreenConst.SCREEN_ID_ZMW03502);
		
		if(!pagingBase(true))
		{
			return true;
		}
		
		JZMWebCommon.setNextScreenInfo(commoninfoBean, JZMScreenConst.SCREEN_ID_ZMW03501, JZMScreenConst.SCREEN_NAME_ZMW03501);
		
		return true;
	}
	
	/**
	 * 戻るボタン処理を行います
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	public boolean back() throws Exception
	{
		// 共有フォームBean
		X31SDataBeanAccess commonBean = getCommonInfoBean();

		// 画面遷移
		JZMWebCommon.setNextScreenInfo(commonBean, JZMWebCommon.getScreenId(this), JZMWebConst.BLANK);
		
		return true;
	}

	/**
	 * 完了ボタン処理を行います
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	public boolean fin() throws Exception
	{
		// 共有フォームBean
		X31SDataBeanAccess commonBean = getCommonInfoBean();

		// 画面遷移
		JZMWebCommon.setNextScreenInfo(commonBean, JZMWebCommon.getScreenId(this), JZMWebConst.BLANK);
		
		return true;
	}

	/**
	 * 権限検索サービスを呼び出します
	 * @param gotoKoshinGamen 更新画面への遷移
	 * @return 検索エラーフラグ
	 */
	@SuppressWarnings("unchecked")
	private String callAuthoritySearchSrv(boolean gotoKoshinGamen)
	{
		X31SDataBeanAccess bean = getServiceFormBean();
		
		X31SDataBeanAccess[] paramBean = {bean};
		
		// ユースケースID格納用マップを生成
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JZMWebConst.SV100);

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// 検索エラーフラグの取得
		String searchErrFlg = null;
		String maxShowCnt = JZMWebCommon.getSearchConst(ZMW03501_MAX_SHOW_CNT);
		String rowPerPage = JZMWebCommon.getSearchConst(ZMW03501_ROW_PER_PAGE);

		// 一覧の初期化
		bean.getDataBeanArray(ZMW03501SFConst.EZM0011B011CBSMSG1LIST).clearArray();

		// マッピングクラスのインスタンスを生成
		ZMSV0100_ZMSV0100OPDBMapper_ZMSV010002CC mapper = new ZMSV0100_ZMSV0100OPDBMapper_ZMSV010002CC();
		HashMap<String, Object> dataMap = getCC10002DataMap(paramBean, mapper, maxShowCnt, rowPerPage);
		
		// ページング情報の設定（上り）
		if(gotoKoshinGamen)
		{
			JZMWebCommon.upmapperPageLinkInfo(this, JZMWebConst.ZERO, JZMWebConst.CC10002, dataMap, JZMScreenConst.SCREEN_ID_ZMW03501);
		}
		else
		{
			JZMWebCommon.upmapperPageLinkInfo(this, JZMWebConst.CC10002, dataMap);
		}
		
		// サービスの呼び出し
		invokeService(paramMap, dataMap, outputMap);
		
		// マッピングクラスの呼び出し
		mapper.getZMSV010002CC(paramBean, outputMap);
		
		// ページング情報の設定（下り）
		if(gotoKoshinGamen)
		{
			JZMWebCommon.downmapperPageLinkInfo(this, JZMWebConst.ZERO, JZMWebConst.CC10002, outputMap, JZMScreenConst.SCREEN_ID_ZMW03501);
		}
		else
		{
			JZMWebCommon.downmapperPageLinkInfo(this, JZMWebConst.CC10002, outputMap);
		}
		
		// 検索エラーフラグの取得
		searchErrFlg = JZMWebCommon.getSearchErrFlg(JZMWebConst.CC10002, outputMap);

		if(!JZMWebCommon.isNullOrBlank(searchErrFlg))
		{
			// 権限検索エラーに対応するエラーメッセージを設定する
			setAuthorityErrMsg(searchErrFlg);
		}
		
		// 行の背景色を設定
		JZMWebCommon.setRowStyleClass(bean, ZMW03501SFConst.EZM0011B011CBSMSG1LIST, ZMW03501SFConst.ROW_STYLE_CLASS_01);
	
		return searchErrFlg;
	}
	
	/**
	 * ロール設定権限情報選択画面に遷移する
	 * @param bean サービスフォームBean
	 */
	private void seniTo3302(X31SDataBeanAccess bean)
	{
		
		JZMWebCommon.clearPageLinkInfo(this, JZMScreenConst.SCREEN_ID_ZMW03501);
		JZMWebCommon.clearPageLinkInfo(this, JZMScreenConst.SCREEN_ID_ZMW03502);
		
		// ロール設定権限情報選択画面に遷移する
		JZMWebCommon.setNextScreenInfo(getCommonInfoBean(), JZMScreenConst.SCREEN_ID_ZMW03302, JZMScreenConst.SCREEN_NAME_ZMW03302);
	}
	
	/**
	 * paramMapに項目名称と同一のキーでサービスフォームBeanの値を設定します
	 * @param bean サービスフォームBean
	 * @param paramMap 情報格納用マップ
	 * @param clmNm 項目名称
	 */
	private void putParamMap(X31SDataBeanAccess bean, HashMap<String, Object> paramMap, String clmNm)
	{
		paramMap.put(clmNm, JZMWebCommon.getSendMessageString(bean, clmNm));
	}

	/**
	 * CC10002のDataMapを取得する
	 * @param paramBean paramBean
	 * @param mapper mapper
	 * @param maxShowCnt 最大検索件数
	 * @param rowPerPage 最大表示件数
	 * @return DataMap
	 */
	@SuppressWarnings("unchecked")
	private HashMap getCC10002DataMap(X31SDataBeanAccess[] paramBean,
			ZMSV0100_ZMSV0100OPDBMapper_ZMSV010002CC mapper, String maxShowCnt, String rowPerPage)
	{
		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		
		mapper.setBeanListNm(ZMW03501SFConst.EZM0011B011CBSMSG1LIST);
		mapper.setKeyClmNmRoleCd(ZMW03501SFConst.ROLE_CD);
		mapper.setKeyClmNmAuthorityCd(ZMW03501SFConst.AUTHORITY_CD);
		mapper.setKeyClmNmAuthorityNm(ZMW03501SFConst.AUTHORITY_NM);
		mapper.setKeyClmNmAuthoritySbtCd(ZMW03501SFConst.AUTHORITY_SBT_CD);
		mapper.setListClmNmRoleCd(ZMW03501SFConst.ROLE_CD_01);
		mapper.setListClmNmAuthorityCd(ZMW03501SFConst.AUTHORITY_CD_01);
		mapper.setListClmNmAuthorityNm(ZMW03501SFConst.AUTHORITY_NM_01);
		mapper.setListClmNmAuthoritySbtCdNm(ZMW03501SFConst.AUTHORITY_SBT_CD_NM_01);
		mapper.setListClmNmAuthorityTendymd(ZMW03501SFConst.AUTHORITY_TENDYMD_01);
		mapper.setListClmNmAuthorityTstaymd(ZMW03501SFConst.AUTHORITY_TSTAYMD_01);
		mapper.setListClmNmAuthorityUpdDtm(ZMW03501SFConst.AUTHORITY_UPD_DTM_01);
		mapper.setListClmNmRoleChoiceFlg(ZMW03501SFConst.ROW_CHOICE_FLG_01);
		
		mapper.setZMSV010002CC(paramBean, dataMap, FUNC_CD_1, maxShowCnt, rowPerPage);
		
		HashMap<String, Object> inDataMap = (HashMap<String, Object>)dataMap.get(JZMWebConst.CC10002);
		
		inDataMap.put(JZMWebConst.EZM0031_KEY_SEARCH_DIV, JZMWebConst.ZERO);
		
		return dataMap;
	}
	
	/**
	 * 行選択フラグにチェックを入れる
	 * @param authFlg 選択/解除権限コードフラグ
	 */
	private void setRowChoiceFlg(boolean authFlg)
	{
		X31SDataBeanAccess bean = getServiceFormBean();
		
		// 権限一覧を取得する
		X31SDataBeanAccessArray msgList = bean.getDataBeanArray(ZMW03501SFConst.EZM0011B011CBSMSG1LIST);
		
		// すでに選択されている権限にチェックを行う
		for(int i = 0; i < msgList.getCount(); i++)
		{
			X31SDataBeanAccess subBean = msgList.getDataBean(i);
			String roleCd = JZMWebCommon.getSendMessageString(subBean, ZMW03501SFConst.ROLE_CD_01);
			
			// ロールコードが設定されている場合は行選択フラグにチェックを入れる
			if(!JZMWebCommon.isNullOrBlank(roleCd))
			{
				JZMWebCommon.setSendMessageBoolean(subBean, ZMW03501SFConst.ROW_CHOICE_FLG_01, true);
			}
			
			if(authFlg)
			{
				String dtlAuthCd = JZMWebCommon.getSendMessageString(subBean, ZMW03501SFConst.AUTHORITY_CD_01);

				// 削除権限リストに存在する場合、行選択フラグのチェックをはずす
				if(!(getSameAuthorityCdIndex(bean, ZMW03501SFConst.DEL_AUTHORITY_CD_LIST, ZMW03501SFConst.DEL_AUTHORITY_CD_03, dtlAuthCd) == -1))
				{
					JZMWebCommon.setSendMessageBoolean(subBean, ZMW03501SFConst.ROW_CHOICE_FLG_01, false);
				}
				
				// 選択権限リストに存在する場合、行選択フラグにチェックを入れる
				if(getSameAuthorityCdIndex(bean, ZMW03501SFConst.CHOICE_AUTHORITY_CD_LIST, ZMW03501SFConst.CHOICE_AUTHORITY_CD_02, dtlAuthCd) >= 0)
				{
					JZMWebCommon.setSendMessageBoolean(subBean, ZMW03501SFConst.ROW_CHOICE_FLG_01, true);
				}
			}
		}
	}
	
	/**
	 * 選択された権限コードをリストに追加します
	 * @param bean サービスフォームBean
	 */
	private void addChoiceAuthorityCd(X31SDataBeanAccess bean)
	{
		// 権限一覧を取得する
		X31SDataBeanAccessArray dspList = bean.getDataBeanArray(ZMW03501SFConst.EZM0011B011CBSMSG1LIST);
		
		// 選択権限コードリストを取得する
		X31CVector<String> choiceAuthorityList = new X31CVector<String>();
		bean.sendMessageStringArray(ZMW03501SFConst.CHOICE_AUTHORITY_CD_LIST, X31CWebConst.DATABEAN_GET_VALUE, choiceAuthorityList);

		// 削除権限コードリストを取得する
		X31CVector<String> delAuthorityList = new X31CVector<String>();
		bean.sendMessageStringArray(ZMW03501SFConst.DEL_AUTHORITY_CD_LIST, X31CWebConst.DATABEAN_GET_VALUE, delAuthorityList);

		for(int i = 0; i < dspList.getCount(); i++)
		{
			X31SDataBeanAccess subBean = dspList.getDataBean(i);
			String dtlRoleCd = JZMWebCommon.getSendMessageString(subBean, ZMW03501SFConst.ROLE_CD_01);
			String dtlAuthCd = JZMWebCommon.getSendMessageString(subBean, ZMW03501SFConst.AUTHORITY_CD_01);
			String dtlUpdDtm = JZMWebCommon.getSendMessageString(subBean, ZMW03501SFConst.AUTHORITY_UPD_DTM_01);

			int choiceSameAuthorityCdIndex = getSameAuthorityCdIndex(bean,
					ZMW03501SFConst.CHOICE_AUTHORITY_CD_LIST, ZMW03501SFConst.CHOICE_AUTHORITY_CD_02, dtlAuthCd);
			int delSameAuthorityCdIndex = getSameAuthorityCdIndex(bean,
					ZMW03501SFConst.DEL_AUTHORITY_CD_LIST, ZMW03501SFConst.DEL_AUTHORITY_CD_03, dtlAuthCd);
			
			// 権限一覧が選択されている場合
			if(JZMWebCommon.getSendMessageBoolean(subBean, ZMW03501SFConst.ROW_CHOICE_FLG_01))
			{
				// ロールコードが設定されている場合
				if(!JZMWebCommon.isNullOrBlank(dtlRoleCd))
				{
					if(delSameAuthorityCdIndex >= 0)
					{
						// 削除権限コードリストから削除
						bean.getDataBeanArray(ZMW03501SFConst.DEL_AUTHORITY_CD_LIST).removeDataBean(delSameAuthorityCdIndex);
					}
				}
				else
				{
					if(choiceSameAuthorityCdIndex == -1)
					{
						// 選択権限コードリストに追加
						X31SDataBeanAccess comboBean = bean.getDataBeanArray(ZMW03501SFConst.CHOICE_AUTHORITY_CD_LIST).addDataBean();
						JZMWebCommon.setSendMessageString(comboBean, ZMW03501SFConst.CHOICE_AUTHORITY_CD_02, dtlAuthCd);
						JZMWebCommon.setSendMessageString(comboBean, ZMW03501SFConst.CHOICE_AUTHORITY_UPD_DTM_02, dtlUpdDtm);
					}
				}
			}
			// 選択されていない場合
			else
			{
				// ロールコードが設定されている場合
				if(!JZMWebCommon.isNullOrBlank(dtlRoleCd))
				{
					if(delSameAuthorityCdIndex == -1)
					{
						// 削除権限コードリストに追加
						X31SDataBeanAccess comboBean = bean.getDataBeanArray(ZMW03501SFConst.DEL_AUTHORITY_CD_LIST).addDataBean();
						JZMWebCommon.setSendMessageString(comboBean, ZMW03501SFConst.DEL_AUTHORITY_CD_03, dtlAuthCd);
						JZMWebCommon.setSendMessageString(comboBean, ZMW03501SFConst.DEL_AUTHORITY_UPD_DTM_03, dtlUpdDtm);
					}
				}
				else
				{
					if(choiceSameAuthorityCdIndex >= 0)
					{
						// 選択権限コードリストから削除
						bean.getDataBeanArray(ZMW03501SFConst.CHOICE_AUTHORITY_CD_LIST).removeDataBean(choiceSameAuthorityCdIndex);
					}
				}
			}
		}
		bean.sendMessageStringArray(ZMW03501SFConst.CHOICE_AUTHORITY_CD_LIST, X31CWebConst.DATABEAN_SET_VALUE, choiceAuthorityList); 
		bean.sendMessageStringArray(ZMW03501SFConst.DEL_AUTHORITY_CD_LIST, X31CWebConst.DATABEAN_SET_VALUE, delAuthorityList); 
	}
	
	/** 
	 * Beanリストから同一の権限コードが含まれているindexを返します
	 * @param bean サービスフォームBean
	 * @param authCdList 権限コードリスト
	 * @param authCd 選択権限コード/削除権限コード
	 * @param dtlAuthCd 明細権限コード
	 * @return index(見つからない場合は -1)
	 */
	private int getSameAuthorityCdIndex(X31SDataBeanAccess bean, String authCdList, String authCd, String dtlAuthCd)
	{
		return JZMWebCommon.getSameAuthorityCdIndex(bean, authCdList, authCd, dtlAuthCd);
	}

	/**
	 * 権限エラーフラグに対応するメッセージを設定する
	 * @param authoritySearchErrFlg 権限エラーフラグ
	 */
	private void setAuthorityErrMsg(String authoritySearchErrFlg)
	{
		if(SEARCH_ERR_FLG_ZERO.equals(authoritySearchErrFlg))
		{
			// 検索結果が0件の場合、エラーメッセージを表示
			JZMWebCommon.setMessageInfo(this, SEARCH_ERR_MESSAGE_ZERO);
		}
		else if(SEARCH_ERR_FLG_OVERMAX.equals(authoritySearchErrFlg))
		{
			String[] item = {JZMWebCommon.getSearchConst(ZMW03501_MAX_SHOW_CNT)};
			
			// 検索結果が最大検索件数を超える場合、エラーメッセージを表示
			JZMWebCommon.setMessageInfo(this, SEARCH_ERR_MESSAGE_OVERMAX, item);
		}
		else if(SEARCH_ERR_FLG_NODATA.equals(authoritySearchErrFlg))
		{
			// 表示ページに該当するデータが存在しない場合、エラーメッセージを表示
			JZMWebCommon.setMessageInfo(this, SEARCH_ERR_MESSAGE_NODATA);
		}
	}
}
