/*********************************************************************
* All Rights reserved, Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム共通（共通マスタ）
*   モジュール名    ：ZMW01601SFLogic
*   ソースファイル名：ZMW01601SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年05月16日
*＜機能概要＞
*   PSN一覧照会画面のビューロジッククラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00       2011/05/16   FJ）荒田    新規作成
*
**********************************************************************/

package eo.web.webview.ZMW01601SF;

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.constant.JZMStrConst;
import eo.common.util.JPCUtilCommon;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.ZMW11501SF.ZMW11501SFConst;
import eo.web.webview.common.JZMScreenConst;
import eo.web.webview.common.JZMWebCommon;
import eo.web.webview.common.JZMWebConst;
import eo.web.webview.mapping.ZMSV0016_ZMSV0016OPDBMapper;

/**
 * PSN一覧照会画面のビューロジッククラスです。
 * @author 909282
 *
 */
@SuppressWarnings("serial")
public class ZMW01601SFLogic extends JCCWebBusinessLogic
{
	
	/** 機能コード１  */
	private static final String FUNC_CD_1 = JPCModelConstant.FUNC_CD_1;
	
	/** サーチエラーフラグ "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 = 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 = "ZMW01601_MAX_SHOW_CNT";

	/**
	 * PSN一覧照会初期表示処理を行います。
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	public boolean init() throws Exception
	{
		
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();
		
		// 戻り先IDの取得
		String backScreenId = JZMWebCommon.getScreenId(this);
		
		// 戻り先IDの有無で戻るボタン表示の判定を行う。
		if (backScreenId == null)
		{
			JZMWebCommon.setSendMessageString(bean, ZMW11501SFConst.BACK_BTN_DSP_FLG, JZMStrConst.FLG_OFF);
		}
		else
		{
			JZMWebCommon.setSendMessageString(bean, ZMW11501SFConst.BACK_BTN_DSP_FLG, JZMStrConst.FLG_ON);
		}
		
		// 明細表示フラグを"0"(非表示)を設定
		bean.sendMessageString(ZMW01601SFConst.DTL_DSP_FLG,
				X31CWebConst.DATABEAN_SET_VALUE, JZMStrConst.FLG_OFF);
		
		// 遷移先画面ID、名称の設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_ID_ZMW01601);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_NAME_ZMW01601);
		
		return true;
	}
	
	/**
	 * PSN一覧照会検索処理を行います。
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	public boolean search() throws Exception
	{
		
		// 共通フォームBeanの内容を取得します。
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();
		
		// サービスフォームBeanのデータBeanアクセスクラスを取得します。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess[] paramBean = {bean};
		
		// ページング情報の初期化します。
		JZMWebCommon.clearPageLinkInfo(this, JZMScreenConst.SCREEN_ID_ZMW01601);
		
		// 画面に入力された値を検索条件に設定します。
		JZMWebCommon.shiftBeanValue(bean, ZMW01601SFConst.PSN, ZMW01601SFConst.DSP_PSN);
		JZMWebCommon.shiftBeanValue(bean, ZMW01601SFConst.PSN_APLY_PRD_STA_YEAR, ZMW01601SFConst.DSP_PSN_APLY_PRD_STA_YEAR);
		JZMWebCommon.shiftBeanValue(bean, ZMW01601SFConst.PSN_APLY_PRD_STA_MON, ZMW01601SFConst.DSP_PSN_APLY_PRD_STA_MON);
		JZMWebCommon.shiftBeanValue(bean, ZMW01601SFConst.PSN_APLY_PRD_STA_DAY, ZMW01601SFConst.DSP_PSN_APLY_PRD_STA_DAY);
		JZMWebCommon.shiftBeanValue(bean, ZMW01601SFConst.PSN_APLY_PRD_END_YEAR, ZMW01601SFConst.DSP_PSN_APLY_PRD_END_YEAR);
		JZMWebCommon.shiftBeanValue(bean, ZMW01601SFConst.PSN_APLY_PRD_END_MON, ZMW01601SFConst.DSP_PSN_APLY_PRD_END_MON);
		JZMWebCommon.shiftBeanValue(bean, ZMW01601SFConst.PSN_APLY_PRD_END_DAY, ZMW01601SFConst.DSP_PSN_APLY_PRD_END_DAY);
		
		// 適用開始年月日
		String  ymd = JPCUtilCommon.concatYmd(bean.sendMessageString(ZMW01601SFConst.PSN_APLY_PRD_STA_YEAR, X31CWebConst.DATABEAN_GET_VALUE),
				bean.sendMessageString(ZMW01601SFConst.PSN_APLY_PRD_STA_MON, X31CWebConst.DATABEAN_GET_VALUE),
				bean.sendMessageString(ZMW01601SFConst.PSN_APLY_PRD_STA_DAY, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(ZMW01601SFConst.PSN_APLY_PRD_STA , X31CWebConst.DATABEAN_SET_VALUE , JZMWebCommon.nullToBlank(ymd));
		
		// 適用終了年月日
		ymd = JPCUtilCommon.concatYmd(bean.sendMessageString(ZMW01601SFConst.PSN_APLY_PRD_END_YEAR, X31CWebConst.DATABEAN_GET_VALUE),
				bean.sendMessageString(ZMW01601SFConst.PSN_APLY_PRD_END_MON, X31CWebConst.DATABEAN_GET_VALUE),
				bean.sendMessageString(ZMW01601SFConst.PSN_APLY_PRD_END_DAY, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(ZMW01601SFConst.PSN_APLY_PRD_END , X31CWebConst.DATABEAN_SET_VALUE , JZMWebCommon.nullToBlank(ymd));
		
		// 検索サービスを呼び出す
		callSearchSrv(bean, paramBean);
		
		// 遷移先画面ID、名称の設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_ID_ZMW01601);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_NAME_ZMW01601);
		return true;
	}
	
	/**
	 * ページング処理を行います。
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	public boolean paging() throws Exception
	{
		
		// 共通フォームBeanの内容を取得します。
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();
		
		// サービスフォームBeanのデータBeanアクセスクラスを取得します。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess[] paramBean = {bean};
		
		// 画面に入力された値を検索条件に設定します。
		JZMWebCommon.shiftBeanValue(bean, ZMW01601SFConst.DSP_PSN, ZMW01601SFConst.PSN);
		JZMWebCommon.shiftBeanValue(bean, ZMW01601SFConst.DSP_PSN_APLY_PRD_STA_YEAR, ZMW01601SFConst.PSN_APLY_PRD_STA_YEAR);
		JZMWebCommon.shiftBeanValue(bean, ZMW01601SFConst.DSP_PSN_APLY_PRD_STA_MON, ZMW01601SFConst.PSN_APLY_PRD_STA_MON);
		JZMWebCommon.shiftBeanValue(bean, ZMW01601SFConst.DSP_PSN_APLY_PRD_STA_DAY, ZMW01601SFConst.PSN_APLY_PRD_STA_DAY);
		JZMWebCommon.shiftBeanValue(bean, ZMW01601SFConst.DSP_PSN_APLY_PRD_END_YEAR, ZMW01601SFConst.PSN_APLY_PRD_END_YEAR);
		JZMWebCommon.shiftBeanValue(bean, ZMW01601SFConst.DSP_PSN_APLY_PRD_END_MON, ZMW01601SFConst.PSN_APLY_PRD_END_MON);
		JZMWebCommon.shiftBeanValue(bean, ZMW01601SFConst.DSP_PSN_APLY_PRD_END_DAY, ZMW01601SFConst.PSN_APLY_PRD_END_DAY);
		
		// 検索サービスを呼び出す
		callSearchSrv(bean, paramBean);
		
		// 遷移先画面ID、名称の設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_ID_ZMW01601);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_NAME_ZMW01601);
		return true;
	}
	
	/**
	 * 戻るボタン処理を行います。
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	public boolean back() throws Exception
	{

		// 共有フォームBean
		X31SDataBeanAccess commonBean = getCommonInfoBean();

		// 画面遷移
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JZMWebCommon.getScreenId(this));
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE , JZMWebConst.BLANK);
		
		return true;
	}
	
	
	/**
	 * 検索サービスを呼び出します
	 * @param bean
	 * @param paramBean
	 */
	private void callSearchSrv(X31SDataBeanAccess bean, X31SDataBeanAccess[] paramBean)
	{
		
		// ユースケースID格納用マップを生成。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		
		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JZMWebConst.SV16);
		
		// マッピングクラスのインスタンスを生成
		ZMSV0016_ZMSV0016OPDBMapper mapper = new ZMSV0016_ZMSV0016OPDBMapper();
		mapper.setZMSV001601CC(paramBean, dataMap, FUNC_CD_1);
		
		// ページング情報の設定
		JZMWebCommon.upmapperPageLinkInfo(this, JZMWebConst.CC1601, dataMap);
		
		//  サービスの呼び出し
		invokeService(paramMap, dataMap, outputMap);

		// 一覧の初期化
		bean.getDataBeanArray(ZMW01601SFConst.EZM0141B010CBSMSG1LIST).clearArray();
		
		// 明細表示フラグを"0"(非表示)を設定
		bean.sendMessageString(ZMW01601SFConst.DTL_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, JZMStrConst.FLG_OFF);
		
		// 検索エラーフラグの取得
		String searchErrFlg = JZMWebCommon.getSearchErrFlg(JZMWebConst.CC1601, outputMap);
		
		if (SEARCH_ERR_FLG_ZERO.equals(searchErrFlg))
		{
			
			// 検索結果が0件の場合、エラーメッセージを表示
			JZMWebCommon.setMessageInfo(this, SEARCH_ERR_MESSAGE_ZERO);
			return;
		}
		else if (SEARCH_ERR_FLG_OVERMAX.equals(searchErrFlg))
		{
			
			// 検索結果が最大検索件数を超える場合、エラーメッセージを表示
			String[] item = {JZMWebCommon.getSearchConst(MAX_SHOW_CNT)};
			JZMWebCommon.setMessageInfo(this, SEARCH_ERR_MESSAGE_OVERMAX, item);
			return;
		}
		else if (SEARCH_ERR_FLG_NODATA.equals(searchErrFlg))
		{
			
			// 表示ページに該当するデータが存在しない場合、エラーメッセージを表示
			JZMWebCommon.setMessageInfo(this, SEARCH_ERR_MESSAGE_NODATA);
		}
		
		// マッピングクラスの呼び出し
		mapper.getZMSV001601CC(paramBean, outputMap);
		
		// ページング情報の設定
		JZMWebCommon.downmapperPageLinkInfo(this, JZMWebConst.CC1601, outputMap);
		
		// 明細表示フラグに"1"(表示)を設定
		bean.sendMessageString(ZMW01601SFConst.DTL_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, JZMStrConst.FLG_ON);
		
		// 背景色のスタイルクラスを設定
		JZMWebCommon.setRowStyleClass(bean, ZMW01601SFConst.EZM0141B010CBSMSG1LIST, ZMW01601SFConst.ROW_STYLE_CLASS_01);
		
		// 検索のコマンドIDを設定する。
		JZMWebCommon.setSearchCommand(this, JZMWebConst.EVENT_ID_PAGING);
	}
}
