/*********************************************************************
* All Rights reserved, Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：ZMW11001SFLogic
*   ソースファイル名：ZMW11001SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年08月03日
*＜機能概要＞
*   住所補正対象一覧照会のビューロジッククラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00       2011/08/03   FJ）荒田    新規作成
*   v2.00       2011/11/09   FJ) 日野    【SGY-2011-0000007】
*
**********************************************************************/

package eo.web.webview.ZMW11001SF;

import java.util.ArrayList;
import java.util.HashMap;

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.constant.JZMStrConst;
import eo.common.util.JPCUtilCommon;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.ZMW11101SF.ZMW11101SFConst;
import eo.web.webview.common.JZMScreenConst;
import eo.web.webview.common.JZMWebCommon;
import eo.web.webview.common.JZMWebConst;
import eo.web.webview.mapping.ZMSV0042_ZMSV0042OPDBMapper;

/**
 * 住所補正対象一覧照会のビューロジッククラスです。
 * @author 909282
 *
 */
@SuppressWarnings("serial")
public class ZMW11001SFLogic 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;
	
	/** メッセージ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;

	/** 最大検索数 */
	private static final String MAX_SHOW_CNT = "ZMW11001_MAX_SHOW_CNT";

	/** 表示件数用文字列 */
	private static final String CNT_STR = "件";

	/**
	 * 住所補正対象一覧照会初期表示処理を行います。
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	public boolean init() throws Exception
	{
		
		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();
		
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();
		
		// 戻り先IDの取得
		String backScreenId = JZMWebCommon.getScreenId(this);
		
		// 戻り先IDの有無で戻るボタン表示の判定を行う。
		if (backScreenId == null)
		{
			JZMWebCommon.setSendMessageString(bean, ZMW11001SFConst.BACK_BTN_DSP_FLG, JZMStrConst.FLG_OFF);
		}
		else
		{
			JZMWebCommon.setSendMessageString(bean, ZMW11001SFConst.BACK_BTN_DSP_FLG, JZMStrConst.FLG_ON);
		}
		
		// セッション情報取得
		HashMap<String, Object> searchInfo = JZMWebCommon.getScreenInfo(this);
		
		// 明細表示フラグに"0"をセット
		bean.sendMessageString(ZMW11001SFConst.DTL_DSP_FLG,
				X31CWebConst.DATABEAN_SET_VALUE, JZMStrConst.FLG_OFF);
		
		if (searchInfo != null) 
		{
			
			// マッピングクラスを使用する為、配列化
			X31SDataBeanAccess[] paramBean = {bean};
			
			// 検索サービスを呼び出す
			callSearchSrv(bean, paramBean);
		}
		
		// 遷移先画面ID、名称の設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_ID_ZMW11001);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_NAME_ZMW11001);
		return true;
	}
	
	
	/**
	 * 住所補正対象一覧照会検索処理を行います。
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	public boolean search() throws Exception
	{
		
		// 共有フォームBean
		X31SDataBeanAccess commonBean = getCommonInfoBean();
		
		// サービスフォームBean
		X31SDataBeanAccess bean = getServiceFormBean();
		X31SDataBeanAccess[] paramBean = {bean};
		
		// DataBeanの値を編集
		JZMWebCommon.shiftBeanValue(bean, ZMW11001SFConst.AD_CD_KAMI5, ZMW11001SFConst.DSP_AD_CD_KAMI5);
		JZMWebCommon.shiftBeanValue(bean, ZMW11001SFConst.AD_CD_SHIMO6, ZMW11001SFConst.DSP_AD_CD_SHIMO6);
		JZMWebCommon.shiftBeanValue(bean, ZMW11001SFConst.NEW_AD_CD_KAMI5, ZMW11001SFConst.DSP_NEW_AD_CD_KAMI5);
		if(bean.sendMessageBoolean(ZMW11001SFConst.DSP_MIADD_FLG, X31CWebConst.DATABEAN_GET_VALUE))
		{
			JZMWebCommon.setSendMessageString(bean, ZMW11001SFConst.MIADD_FLG, JZMWebConst.ONE);
		}
		else
		{
			JZMWebCommon.setSendMessageString(bean, ZMW11001SFConst.MIADD_FLG, JZMWebConst.ZERO);
		}
		JZMWebCommon.shiftBeanValue(bean, ZMW11001SFConst.HOSEI_TG_YMD_YEAR, ZMW11001SFConst.DSP_HOSEI_TG_YMD_YEAR);
		JZMWebCommon.shiftBeanValue(bean, ZMW11001SFConst.HOSEI_TG_YMD_MON, ZMW11001SFConst.DSP_HOSEI_TG_YMD_MON);
		JZMWebCommon.shiftBeanValue(bean, ZMW11001SFConst.HOSEI_TG_YMD_DAY, ZMW11001SFConst.DSP_HOSEI_TG_YMD_DAY);
		
		// 適用開始年月日
		String  ymd = JPCUtilCommon.concatYmd(bean.sendMessageString(ZMW11001SFConst.HOSEI_TG_YMD_YEAR, X31CWebConst.DATABEAN_GET_VALUE),
				bean.sendMessageString(ZMW11001SFConst.HOSEI_TG_YMD_MON, X31CWebConst.DATABEAN_GET_VALUE),
				bean.sendMessageString(ZMW11001SFConst.HOSEI_TG_YMD_DAY, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(ZMW11001SFConst.HOSEI_TG_YMD, X31CWebConst.DATABEAN_SET_VALUE , JZMWebCommon.nullToBlank(ymd));

		// 明細表示フラグに"0"をセット
		JZMWebCommon.setSendMessageString(bean, ZMW11001SFConst.DTL_DSP_FLG, JZMStrConst.FLG_OFF);
		
		// 検索サービスを呼び出す
		callSearchSrv(bean, paramBean);

		// 遷移先画面ID、名称の設定
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_ID_ZMW11001);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_NAME_ZMW11001);
		
		return true;
	}
	
	/**
	 * 更新ボタン処理を行います。
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	public boolean upd() throws Exception
	{
		
		// 共有フォームBean
		X31SDataBeanAccess commonBean = getCommonInfoBean();
		
		// サービスフォームBean
		X31SDataBeanAccess bean = getServiceFormBean();
		
		// セッションに情報を格納する
		setTransData(bean);
		
		// 戻り先画面IDを設定する
		JZMWebCommon.setScreenId(this, JZMScreenConst.SCREEN_ID_ZMW11101, JZMScreenConst.SCREEN_ID_ZMW11001);
		JZMWebCommon.setScreenId(this, JZMScreenConst.SCREEN_ID_ZMW11103, JZMScreenConst.SCREEN_ID_ZMW11001);
		
		// 画面遷移
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_ID_ZMW11101);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_NAME_ZMW11101);
		
		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>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JZMWebConst.SV42);
		
		// マッピングクラスのインスタンスを生成
		ZMSV0042_ZMSV0042OPDBMapper mapper = new ZMSV0042_ZMSV0042OPDBMapper();
		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		mapper.setZMSV004201SC(paramBean, dataMap, FUNC_CD_1);
		
		// 検索結果格納用マップを生成
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// サービスの呼び出し
		invokeService(paramMap, dataMap, outputMap);
		
		// 一覧の初期化
		bean.getDataBeanArray(ZMW11001SFConst.EZM0221B010CBSMSG1LIST).clearArray();
		
		// マッピングクラスの呼び出し
		mapper.getZMSV004201SC(paramBean, outputMap);
		
		// 検索エラーフラグの取得
		String searchErrFlg = JZMWebCommon.getSearchErrFlg(JZMWebConst.SC4201, outputMap);
		
		if (SEARCH_ERR_FLG_ZERO.equals(searchErrFlg))
		{
			
			// 検索結果が0件の場合、エラーメッセージを表示
			JZMWebCommon.setMessageInfo(this, SEARCH_ERR_MESSAGE_ZERO);
		}
		else if (SEARCH_ERR_FLG_OVERMAX.equals(searchErrFlg))
		{
			
			// 検索結果が最大検索件数を超える場合、エラーメッセージを表示
			String[] item = { JZMWebCommon.getSearchConst(MAX_SHOW_CNT) };
			JZMWebCommon.setMessageInfo(this, SEARCH_ERR_MESSAGE_OVERMAX, item);
		}
		else
		{
			
			// 明細表示フラグに"1"をセット
			JZMWebCommon.setSendMessageString(bean, ZMW11001SFConst.DTL_DSP_FLG, JZMStrConst.FLG_ON);
			
			StringBuffer ttlCnt = new StringBuffer();
			ttlCnt.append(JZMWebCommon.getSendMessageString(bean, ZMW11001SFConst.TTL_CNT)).append(CNT_STR);
			JZMWebCommon.setSendMessageString(bean, ZMW11001SFConst.TTL_CNT, ttlCnt.toString());
			
			X31SDataBeanAccessArray choiseAdCdList = bean.getDataBeanArray(ZMW11001SFConst.CHOISE_AD_CD_INFO);
			
			// 更新画面から遷移時に選択チェックを復元する。
			if (choiseAdCdList.getCount() != 0 &&
					JZMWebCommon.getScreenInfo(this, JZMScreenConst.SCREEN_ID_ZMW11103) == null)
			{
				X31SDataBeanAccessArray dtlDataList = bean.getDataBeanArray(ZMW11001SFConst.EZM0221B010CBSMSG1LIST);
				
				for (int i = 0; i < dtlDataList.getCount(); i++)
				{
					X31SDataBeanAccess msgBean = dtlDataList.getDataBean(i);
					
					StringBuffer adCdBuffer = new StringBuffer();
					adCdBuffer.append(JZMWebCommon.getSendMessageString(msgBean, ZMW11001SFConst.AD_CD_KAMI5_01))
							.append(JZMWebCommon.getSendMessageString(msgBean, ZMW11001SFConst.AD_CD_SHIMO6_01));
					
					String adCd = adCdBuffer.toString();
					
					for (int j = 0; j < choiseAdCdList.getCount(); j++)
					{
						X31SDataBeanAccess adCdData = choiseAdCdList.getDataBean(j);
						
						if(adCd.equals(JZMWebCommon.getSendMessageString(adCdData, ZMW11001SFConst.AD_CD_02)))
						{
							JZMWebCommon.setSendMessageBoolean(msgBean, ZMW11001SFConst.CHOISE_01, true);
						}
					}
				}
				
				choiseAdCdList.clearArray();
			}
			else
			{
				
				JZMWebCommon.setScreenInfo(this, JZMScreenConst.SCREEN_ID_ZMW11103, null);
			}
			
			// 背景色のスタイルクラスを設定
			JZMWebCommon.setRowStyleClass(bean,
					ZMW11001SFConst.EZM0221B010CBSMSG1LIST,
					ZMW11001SFConst.ROW_STYLE_CLASS_01);
		}
	}
	
	
	/**
	 * 一覧検索条件、選択された明細情報のハッシュマップを作成し、セッション情報に格納する
	 * @param bean
	 * @param paramMap
	 */
	private void setTransData(X31SDataBeanAccess bean)
	{
		
		// 情報格納用HashMap
		HashMap<String, Object> searchParamMap = new HashMap<String, Object>();
		HashMap<String, Object> updParamMap = new HashMap<String, Object>();
		
		// 明細データを取得
		X31SDataBeanAccessArray dtlDataList = bean.getDataBeanArray(ZMW11001SFConst.EZM0221B010CBSMSG1LIST);
		
		ArrayList<HashMap<String, Object>> choiseDataList = new ArrayList<HashMap<String, Object>>();
		ArrayList<HashMap<String, Object>> choiseAdCdList = new ArrayList<HashMap<String, Object>>();

		int dtlCount = 0;
		
		for (int i = 0; i < dtlDataList.getCount(); i++)
		{
			X31SDataBeanAccess msgBean = dtlDataList.getDataBean(i);
			Boolean choiseCheck = msgBean.sendMessageBoolean(ZMW11001SFConst.CHOISE_01, X31CWebConst.DATABEAN_GET_VALUE);

			if (choiseCheck)
			{
				
				// 選択がチェックされたデータのHashMapを作成
				HashMap<String, Object> choiseData = new HashMap<String, Object>();
				HashMap<String, Object> choiseAdCd = new HashMap<String, Object>();
				
				choiseData.put(ZMW11101SFConst.AD_CD_KAMI5_01,
						JZMWebCommon.getSendMessageString(msgBean, ZMW11001SFConst.AD_CD_KAMI5_01));
				choiseData.put(ZMW11101SFConst.AD_CD_SHIMO6_01,
						JZMWebCommon.getSendMessageString(msgBean, ZMW11001SFConst.AD_CD_SHIMO6_01));
				choiseData.put(ZMW11101SFConst.AD_01,
						JZMWebCommon.getSendMessageString(msgBean, ZMW11001SFConst.AD_01));
				choiseData.put(ZMW11101SFConst.NEW_AD_CD_KAMI5_01,
						JZMWebCommon.getSendMessageString(msgBean, ZMW11001SFConst.NEW_AD_CD_KAMI5_01));
				choiseData.put(ZMW11101SFConst.HOSEI_TG_YMD_01,
						JZMWebCommon.getSendMessageString(msgBean, ZMW11001SFConst.HOSEI_TG_YMD_01));
				choiseData.put(ZMW11101SFConst.LAST_UPD_DTM_BF_01,
						JZMWebCommon.getSendMessageString(msgBean, ZMW11001SFConst.LAST_UPD_DTM_BF_01));
				choiseData.put(ZMW11101SFConst.TRN_YM_01,
						JZMWebCommon.getSendMessageString(msgBean, ZMW11001SFConst.TRN_YM_01));
				
				StringBuffer adCd = new StringBuffer();
				adCd.append(JZMWebCommon.getSendMessageString(msgBean, ZMW11001SFConst.AD_CD_KAMI5_01))
						.append(JZMWebCommon.getSendMessageString(msgBean, ZMW11001SFConst.AD_CD_SHIMO6_01));
				choiseAdCd.put(ZMW11001SFConst.AD_CD_02, adCd.toString());
				
				// 作成したHashMapをリストに追加
				choiseDataList.add(choiseData);
				choiseAdCdList.add(choiseAdCd);
				
				dtlCount++;
			}
		}
		
		// ハッシュマップの作成
		putBeanValue(bean, searchParamMap, ZMW11001SFConst.AD_CD_KAMI5);
		putBeanValue(bean, searchParamMap, ZMW11001SFConst.AD_CD_SHIMO6);
		putBeanValue(bean, searchParamMap, ZMW11001SFConst.NEW_AD_CD_KAMI5);
		putBeanValue(bean, searchParamMap, ZMW11001SFConst.MIADD_FLG);
		putBeanValue(bean, searchParamMap, ZMW11001SFConst.HOSEI_TG_YMD_YEAR);
		putBeanValue(bean, searchParamMap, ZMW11001SFConst.HOSEI_TG_YMD_MON);
		putBeanValue(bean, searchParamMap, ZMW11001SFConst.HOSEI_TG_YMD_DAY);
		putBeanValue(bean, searchParamMap, ZMW11001SFConst.HOSEI_TG_YMD);
		putBeanValue(bean, searchParamMap, ZMW11001SFConst.DSP_AD_CD_KAMI5, ZMW11001SFConst.AD_CD_KAMI5);
		putBeanValue(bean, searchParamMap, ZMW11001SFConst.DSP_AD_CD_SHIMO6, ZMW11001SFConst.AD_CD_SHIMO6);
		putBeanValue(bean, searchParamMap, ZMW11001SFConst.DSP_NEW_AD_CD_KAMI5, ZMW11001SFConst.NEW_AD_CD_KAMI5);
		if(JZMWebConst.ONE.equals(JZMWebCommon.getSendMessageString(bean, ZMW11001SFConst.MIADD_FLG)))
		{
			searchParamMap.put(ZMW11001SFConst.DSP_MIADD_FLG, true);
		}
		else
		{
			searchParamMap.put(ZMW11001SFConst.DSP_MIADD_FLG, false);
		}
		putBeanValue(bean, searchParamMap, ZMW11001SFConst.DSP_HOSEI_TG_YMD_YEAR, ZMW11001SFConst.HOSEI_TG_YMD_YEAR);
		putBeanValue(bean, searchParamMap, ZMW11001SFConst.DSP_HOSEI_TG_YMD_MON, ZMW11001SFConst.HOSEI_TG_YMD_MON);
		putBeanValue(bean, searchParamMap, ZMW11001SFConst.DSP_HOSEI_TG_YMD_DAY, ZMW11001SFConst.HOSEI_TG_YMD_DAY);
		searchParamMap.put(ZMW11001SFConst.CHOISE_AD_CD_INFO, choiseAdCdList);
		updParamMap.put(ZMW11101SFConst.CHOISE_AD_APLY_HOSEI, choiseDataList);
		updParamMap.put(ZMW11101SFConst.TTL_CNT, String.valueOf(dtlCount) + CNT_STR);
		
		// セッションにHashMapを格納
		JZMWebCommon.setScreenInfo(this, JZMScreenConst.SCREEN_ID_ZMW11001, searchParamMap);
		JZMWebCommon.setScreenInfo(this, JZMScreenConst.SCREEN_ID_ZMW11101, updParamMap);
	}
	
	
	/**
	 * bean内の指定した項目をparamMapにputします。
	 * @param bean	DataBean
	 * @param 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
	 * @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);
	}
}
