/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：物流管理システム
*   ソースファイル名：DKW00401SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年08月09日
*＜機能概要＞
 * 返品データ一覧照会画面を処理するロジッククラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/08/09   FJ          新規作成
*   v5.00.00	2013/11/11	 FJ          OM-2013-0004070 性能改善（タイムアウトエラーのハンドリング追加）
*
**********************************************************************/
package eo.web.webview.DKW00401SF;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;
import static eo.common.constant.JPCModelConstant.*;
import static eo.common.util.JDKCommonUtil.join;
import static eo.web.webview.DKW00401SF.DKW00401SFConst.*;
import static eo.web.webview.common.JDKScreenConst.*;
import static eo.web.webview.common.JDKWebCommon.*;

import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CMessageResult;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;
import com.fujitsu.futurity.web.x31.X31SRuntimeException;

import eo.common.constant.JDKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
import eo.common.util.JDKCommonUtil;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.DKW00305SF.DKW00305SFConst;
import eo.web.webview.DKW00402SF.DKW00402SFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JDKScreenConst;
import eo.web.webview.mapping.DKSV0088_DKSV0088OPDBMapper;
import eo.web.webview.mapping.DKSV0089_DKSV0089OPDBMapper;


/**
 * 返品データ一覧照会画面を処理するロジッククラスです。
 * @author 富士通
 */
public class DKW00401SFLogic extends JCCWebBusinessLogic
{
	/** シリアル番号 */
	private static final long serialVersionUID = 1L;

	// CSV関連
	/** データ行 */
	private static final String RECORD_TRAILER = "83";
	/** トレーラ行 */
	private static final String RECORD_DATA = "81";

	// 画面モード
	/** 検索機能 */
	private static final long SEARCH_MODE = 0;
	/** 一覧機能 */
	private static final long SEARCH_RESULT_MODE = 1;

	// サービス
	/** 返品データ一覧照会初期表示 */
	private static final String DKSV0088 = "DKSV0088";
	/** 返品データ一覧照会 */
	private static final String DKSV0089 = "DKSV0089";
	
	// CSVファイル名
	/** ファイル名 */
	private static final String CSV_FILE_NAME = "返品データ.csv";
	
	/** プルダウン一覧 */
	private static final String [] PULLDOWNS = new String [] {I_HMPIN_CHSHT_JOKEN,
																I_HMPIN_SBT,
																I_SEARCH_YMD_CHOICE, 
																I_UKEIRE_SK,
																I_MDL_NO,
																I_TKKIKI_SBT_CD};
	/** カレンダー一覧 */
	private static final String [] CALENDARS = new String [] {I_YMD_STA, I_YMD_END, I_SHONIN_YMD_STA, I_SHONIN_YMD_END};
	
	/** セッションに保管する文字列データのキー */
	private static final String [] SEARCH_CONDITION_STRING_KEIES = {SEARCH_SVKEI_NO
																	, SEARCH_ANKEN_NO
																	, SEARCH_SEIZO_NO
																	, SEARCH_YMD_STA_YMD
																	, SEARCH_YMD_END_YMD
																	, SEARCH_SHONIN_YMD_STA_YMD
																	, SEARCH_SHONIN_YMD_END_YMD
																	, SEARCH_GDS_STAT
																	, SEARCH_HMPIN_CHSHT_JOKEN
																	, SEARCH_UKEIRE_SK
																	, SEARCH_HMPIN_SBT
																	, SEARCH_MDL_NO
																	, SEARCH_SEARCH_YMD_CHOICE
																	, SEARCH_TKKIKI_SBT_CD
																	};

	/**
	 * 初期化処理を行います。
	 * @return 処理実行結果
	 */
	@SuppressWarnings("unchecked")
	public boolean init() 
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		setNextScreen(SCREEN_ID_DKW00401, SCREEN_NAME_DKW00401);
		
		X31SDataBeanAccess[] paramBean = {bean};
		
		HashMap paramMap = new HashMap();
		HashMap inputMap = new HashMap();
		HashMap outputMap = new HashMap();

		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, DKSV0088);
		DKSV0088_DKSV0088OPDBMapper mapper = new DKSV0088_DKSV0088OPDBMapper();
		mapper.setDKSV0088SC(paramBean, inputMap, FUNC_CD_1);

		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}

		mapper.getDKSV008801SC(paramBean, outputMap);
		mapper.getDKSV008802SC(paramBean, outputMap);
		mapper.getDKSV008803SC(paramBean, outputMap);
		mapper.getDKSV008804SC(paramBean, outputMap);
		mapper.getDKSV008805SC(paramBean, outputMap);
		mapper.getDKSV008806SC(paramBean, outputMap);
		
		pushEmptyToTopOfPulldown(I_HMPIN_CHSHT_JOKEN, I_CD_CD_LIST_01, I_CD_NM_LIST_01, "");
		pushEmptyToTopOfPulldown(I_UKEIRE_SK, I_CD_CD_LIST_01, I_CD_NM_LIST_01, "");
		pushEmptyToTopOfPulldown(I_HMPIN_SBT, I_CD_CD_LIST_01, I_CD_NM_LIST_01, "");
		pushEmptyToTopOfPulldown(I_SEARCH_YMD_CHOICE, I_CD_CD_LIST_01, I_CD_NM_LIST_01, "検索日付選択");
		pushEmptyToTopOfPulldown(I_MDL_NO, I_CD_CD_LIST_01, I_CD_NM_LIST_01, "");
		pushEmptyToTopOfPulldown(I_TKKIKI_SBT_CD, I_CD_CD_LIST_01, I_CD_NM_LIST_01, "");

		setScreenMode(0);
		if (!restoreConditionFromSession())
		{
			return true;
		}
		
		restoreSearchCondition();
		if (!innerSearch(FUNC_CD_1, SEARCH_RSLT_LIST, true))
		{
			return true;
		}

		setScreenMode(1);
		String selectedNo = getData(this, SELECTED_HMPIN_KIKI_NO);
		X31SDataBeanAccessArray list = getServiceFormBean().getDataBeanArray(SEARCH_RSLT_LIST);
		int length = list.getCount();
		for (int i = 0;i < length;i++)
		{
			String noOnLine = getData(list.getDataBean(i), L_HMPIN_KIKI_NO_03);
			if (noOnLine.equals(selectedNo))
			{
				setData(this, (long)i, I_CHOICE);
				break;
			}
		}
		
		return true;
	}
	

	/**
	 * 検索処理を行います。
	 * @return 処理実行結果
	 */
	public boolean search() 
	{
		storeSearchCondition();
		JCCWebCommon.clearPageLinkInfo(this, SCREEN_ID_DKW00401);
		boolean errorOnSearch = innerSearch(FUNC_CD_1, SEARCH_RSLT_LIST, true);
		setScreenMode(errorOnSearch ? SEARCH_RESULT_MODE : SEARCH_MODE);
		setNextScreen(SCREEN_ID_DKW00401, SCREEN_NAME_DKW00401);
		return true;
	}
	

	/**
	 * ページング処理を行います。
	 * @return 処理実行結果
	 */
	public boolean paging() 
	{
		innerSearch(FUNC_CD_1, SEARCH_RSLT_LIST, true);
		return true;
	}
	

	/**
	 * 選択処理を行います。
	 * @return 処理実行結果
	 */
	@SuppressWarnings("unchecked")
	public boolean choice() 
	{
		HashMap goodsCondition = new HashMap();
		goodsCondition.put(I_GDS_STAT, getData(this, I_GDS_STAT));
		
		JCCWebCommon.setScreenInfo(this, JDKScreenConst.SCREEN_ID_DKW00402 + "0PJP", goodsCondition);
		JCCWebCommon.setScreenId(this, JDKScreenConst.SCREEN_ID_DKW00402 + "0PJP", getGamenId());

		HashMap myMap = new HashMap();
		String selectedHmpinKikiCd = getSelectedHmpinKikiCd();
		if (selectedHmpinKikiCd != null)
		{
			myMap.put(SELECTED_HMPIN_KIKI_NO, selectedHmpinKikiCd);
		}
		for (String key : SEARCH_CONDITION_STRING_KEIES)
		{
			myMap.put(key, getData(this, key));
		}
		
		
		JCCWebCommon.setScreenInfo(this, JDKScreenConst.SCREEN_ID_DKW00401 + "0PJP", myMap);
		JCCWebCommon.setScreenId(this, JDKScreenConst.SCREEN_ID_DKW00401 + "0PJP", getGamenId());
		
		setNextScreen(SCREEN_ID_DKW00402, SCREEN_NAME_DKW00402);
		return true;
	}
	

	/**
	 * 詳細処理を行います。
	 * @return 処理実行結果
	 */
	@SuppressWarnings("unchecked")
	public boolean detail() 
	{
		HashMap detailMap = new HashMap();
		detailMap.put(DKW00305SFConst.HMPIN_KIKI_NO, getSelectedHmpinKikiCd());
		detailMap.put(DKW00305SFConst.ID_TO_RETURN, SCREEN_ID_DKW00401);
		detailMap.put(DKW00305SFConst.NAME_TO_RETURN, SCREEN_NAME_DKW00401);
		
		JCCWebCommon.setScreenInfo(this, JDKScreenConst.SCREEN_ID_DKW00305, detailMap);
		JCCWebCommon.setScreenId(this, JDKScreenConst.SCREEN_ID_DKW00305, SCREEN_ID_DKW00401);

		HashMap myMap = new HashMap();
		for (String key : SEARCH_CONDITION_STRING_KEIES)
		{
			myMap.put(key, getData(this, key));
		}
		myMap.put(SELECTED_HMPIN_KIKI_NO, getSelectedHmpinKikiCd());
		
		JCCWebCommon.setScreenInfo(this, JDKScreenConst.SCREEN_ID_DKW00401 + "0PJP", myMap);
		
		setNextScreen(SCREEN_ID_DKW00305, SCREEN_NAME_DKW00305);
		return true;
	}
	

	/**
	 * クリア処理を行います。
	 * @return 処理実行結果
	 */
	public boolean clear() 
	{
		for (String pulldown : PULLDOWNS)
		{
			clearPullDown(this, pulldown, I_CD_INDEX_01, I_CD_CD_01, I_CD_NM_01, I_CD_CD_LIST_01, I_CD_NM_LIST_01);
		}
		for (String ymd : CALENDARS)
		{
			setData(this, "", ymd, YEAR_02);
			setData(this, "", ymd, MONTH_02);
			setData(this, "", ymd, DAY_02);
			setData(this, "", ymd, YMD_02);
		}
		
		setData(this, "", I_SVKEI_NO);
		setData(this, "", I_ANKEN_NO);
		setData(this, "", I_SEIZO_NO);
		setData(this, "", I_GDS_STAT);
		setData(this, "", I_GDS_STAT_DISP);

		getServiceFormBean().getDataBeanArray(SEARCH_RSLT_LIST).clearArray();

		storeSearchCondition();
		
		setScreenMode(SEARCH_MODE);
		setNextScreen(SCREEN_ID_DKW00401, SCREEN_NAME_DKW00401);
		
		init();
		
		return true;
	}


	/**
	 * CSV出力処理を行います。
	 * @throws Exception 例外発生時
	 * @return 処理実行結果
	 */
	public boolean outputCsv() throws Exception
	{
		innerSearch(FUNC_CD_2, SEARCH_RSLT_LIST_CSV, false);
		JCCWebCommon.setTempDownloadFile(this, buildFile().getBytes(JDKStrConst.CHAR_SET_WIN31J), CSV_FILE_NAME);
		getServiceFormBean().getDataBeanArray(SEARCH_RSLT_LIST_CSV).clearArray();
		return true;
	}

	
	/**
	 * 反映処理を行います。
	 * @return 処理実行結果
	 */
	@SuppressWarnings("unchecked")
	public boolean reflect() 
	{
		HashMap map = JCCWebCommon.getScreenInfo(this);
		String codes = map.get(DKW00402SFConst.GDS_STAT_LIST).toString();

		setData(this, codes, I_GDS_STAT);
		setData(this, JDKCommonUtil.isNull(codes) ? "" : "有", I_GDS_STAT_DISP);

		
		setNextScreen(SCREEN_ID_DKW00401, SCREEN_NAME_DKW00401);
		return true;
	}
	
	

	/**
	 * 一覧検索処理を実施します。
	 * @param functionCode 機能コード
	 * @param listName 取得データを格納する一覧のデータ名称
	 * @param withPager ページャを使用するかどうか
	 * @return エラーがあった場合:true ない場合:false
	 */
	@SuppressWarnings("unchecked")
	private boolean innerSearch(String functionCode, String listName, boolean withPager)
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		X31SDataBeanAccess[] paramBean = {bean};
		
		HashMap paramMap = new HashMap();
		HashMap inputMap = new HashMap();
		HashMap outputMap = new HashMap();

		bean.getDataBeanArray(listName).clearArray();

		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, DKSV0089);
		
		DKSV0089_DKSV0089OPDBMapper mapper = new DKSV0089_DKSV0089OPDBMapper();
		mapper.setDKSV008901CC(paramBean, inputMap, functionCode);
		if (withPager)
		{
			JCCWebCommon.upmapperPageLinkInfo(this, "DKSV008901CC", inputMap);
		}

		// 処理前の時間を取得
		long searchStartTime = System.currentTimeMillis();
		
		try {
			// 検索処理呼出
			invokeService(paramMap, inputMap, outputMap);
			
		} catch (X31SRuntimeException ex) {
			if (System.currentTimeMillis() - searchStartTime > 240000)
			{
				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKBD840__I);
				return false;
			}
			else
			{
				throw ex;
			}
		}
		
		mapper.getDKSV008901CC(paramBean, outputMap, listName);
		if (withPager)
		{
			JCCWebCommon.downmapperPageLinkInfo(this, "DKSV008901CC", outputMap);
		}
		
		String searchErrFlg = JCCWebCommon.getSearchErrFlg("DKSV008901CC", outputMap);
		if (JPCModelConstant.SEARCH_ERR_FLG_ZERO.equals(searchErrFlg))
		{
			DEBUG_LOG.debug("検索結果0件");
			JCCWebCommon.setMessageInfo(this, "EKB0330--I");
			return false;
		}
		else if (JPCModelConstant.SEARCH_ERR_FLG_OVERMAX.equals(searchErrFlg))
		{
			DEBUG_LOG.debug(String.format("検索結果%s件以上", JCCWebCommon.getSearchConst("DKW00401_MAX_SHOW_CNT")));
			JCCWebCommon.setMessageInfo(this, "EKB0340--I", new String [] {JCCWebCommon.getSearchConst("DKW00401_MAX_SHOW_CNT")});
			return false;
		}
		else if (JPCModelConstant.SEARCH_ERR_FLG_NODATA.equals(searchErrFlg))
		{
			DEBUG_LOG.debug(String.format("データが見つからない %s", getData(this, SELECTED_HMPIN_KIKI_NO)));
			if (getCommonInfoBean().getDataBeanArray(CommonInfoCFConst.MESSAGES_LIST).getCount() == 0)
			{
				JCCWebCommon.setMessageInfo(this, "EKB0350--I");
			}
		}
		
		if (withPager)
		{
			JCCWebCommon.setSearchCommand(this, "L_PAG");
		}
		editList();
		setData(this, 0l, I_CHOICE);
		
		return true;
	}

	

	/**
	 * 一覧データを編集します。
	 */
	private void editList()
	{
		X31SDataBeanAccessArray list = getServiceFormBean().getDataBeanArray(SEARCH_RSLT_LIST);
		int size = list.getCount();
		for (int i = 0 ; i < size ; i++) 
		{
			X31SDataBeanAccess data = list.getDataBean(i);

			setData(data, (i + 1L), L_NO_03);
			setData(data, ((i + 1) % 2 == 0) ? "even" : "odd", L_COLOR_03);
			setData(data, (substr(getData(data, L_UKEIRE_SK_NM_03), 0, 8)), L_UKEIRE_SK_NM_DISP_03);
			setData(data, (substr(getData(data, L_GDS_STAT_NM_03), 0, 6)), L_GDS_STAT_NM_DISP_03);
		}
	}

	
	/**
	 * プルダウンの０番目の項目に空白を挿入します。
	 * @param pulldown プルダウンを指す項目ID
	 * @param cdList プルダウン中でコード一覧をさす項目ID
	 * @param nmList プルダウン中で名称一覧をさす項目ID
	 * @param pushString 追加する文字列
	 */
	private void pushEmptyToTopOfPulldown(String pulldown, String cdList, String nmList, String pushString)
	{
		X31SDataBeanAccess pulldownBean = super.getServiceFormBean().getDataBeanArray(pulldown).getDataBean(0);

		appendPrefix(getBean(this, pulldown), nmList);
		
		slideArrayOnDatabean(pulldownBean, cdList, "");
		slideArrayOnDatabean(pulldownBean, nmList, pushString);
	}

	
	/**
	 * データビーンの配列要素をインデックスが増加する方向に１つずらす
	 * @param bean データビーン
	 * @param listName 対象項目ID
	 * @param pushString 追加する文字列
	 */
	private void slideArrayOnDatabean(X31SDataBeanAccess bean, String listName, String pushString)
	{
		int size = (Integer)(bean.sendMessage(listName, X31CWebConst.DATABEAN_GET_COUNT));
		
		bean.sendMessageString(listName, X31CWebConst.DATABEAN_ADD_VALUE, "");
		
		for (int i = size ; i > 0 ; i--)
		{
			String target = bean.sendMessageString(listName, X31CWebConst.DATABEAN_GET_VALUE, i - 1);
			bean.sendMessageString(listName, X31CWebConst.DATABEAN_SET_VALUE, i, target);
		}
		
		bean.sendMessageString(listName, X31CWebConst.DATABEAN_SET_VALUE, 0, pushString);
	}
	

	/**
	 * 返品データファイルを生成します。
	 * @return 返品データファイル
	 */
	private String buildFile()
	{
		X31SDataBeanAccessArray datas = getServiceFormBean().getDataBeanArray(SEARCH_RSLT_LIST_CSV);
		
		StringBuffer bodyRecords = new StringBuffer();
		int size = datas.getCount();
		for (int i = 0 ; i < size ; i++)
		{
			if (bodyRecords.length() > 0)
			{
				bodyRecords.append(JDKStrConst.LINE_SEPARATOR);
			}
			bodyRecords.append(buildDataRecord(datas.getDataBean(i), i + 1));
		}
		
		String file = join(JDKStrConst.LINE_SEPARATOR,
							buildHeaderRecord(),
							bodyRecords.toString(),
							buildTrailerRecord());

		DEBUG_LOG.debug(String.format("ファイル内容：%s", file));
		
		return file;
	}
	

	/**
	 * 返品データ.csvのヘッダ行を生成します。
	 * @return ヘッダ文字列
	 */
	private String buildHeaderRecord()
	{
		return join(",",
					dqot("レコード種別"),
					dqot("レコード通番"),
					dqot("返品種別"),
					dqot("返品日付"),
					dqot("型番号"),
					dqot("製造番号"),
					dqot("出荷ロット番号"),
					dqot("お客さまID"),
					dqot("案件番号"),
					dqot("返品理由"),
					dqot("返品詳細"),
					dqot("商品状態"),
					dqot("送付者郵便番号"),
					dqot("送付者住所（都道府県）"),
					dqot("送付者住所（市区町村）"),
					dqot("送付者住所（大字通称名）"),
					dqot("送付者住所（字丁目）"),
					dqot("送付者住所（番地・号）"),
					dqot("送付者住所（建物名）"),
					dqot("送付者住所（部屋番号）"),
					dqot("送付者電話番号"),
					dqot("送付者氏名"),
					dqot("レンタル解約申込書"),
					dqot("返品番号"));
	}
	
	/**
	 * 返品データファイルのデータレコードを生成します。
	 * @param data 行データ
	 * @param index 行番号
	 * @return 返品データファイルのデータレコード
	 */
	private String buildDataRecord(X31SDataBeanAccess data, int index) 
	{
		return join(",",
					dqot(RECORD_DATA),
					dqot(getData(data, L_RECORD_NO_03)),
					dqot(getData(data, L_HMPIN_SBT_03)),
					dqot(getData(data, L_HMPIN_YMD_03)),
					dqot(getData(data, L_MDL_NO_03)),
					dqot(getData(data, L_SEIZO_NO_03)),
					dqot(getData(data, L_SHUKKA_LOT_NO_03)),
					dqot(getData(data, L_SVKEI_NO_03)),
					dqot(getData(data, L_ANKEN_NO_03)),
					dqot(getData(data, L_HMPIN_RSN_03)),
					dqot(getData(data, L_HMPIN_DTL_03)),
					dqot(getData(data, L_GDS_STAT_03)),
					dqot(getData(data, L_HMPINSHA_PCD_03)),
					dqot(getData(data, L_HMPINSHA_STATE_NM_03)),
					dqot(getData(data, L_HMPINSHA_CITY_NM_03)),
					dqot(getData(data, L_HMPINSHA_OAZTSU_NM_03)),
					dqot(getData(data, L_HMPINSHA_AZCHO_NM_03)),
					dqot(getData(data, L_HMPINSHA_BNCHIGO_03)),
					dqot(getData(data, L_HMPINSHA_ADRTTM_03)),
					dqot(getData(data, L_HMPINSHA_ADRRM_03)),
					dqot(getData(data, L_HMPINSHA_TELNO_03)),
					dqot(getData(data, L_HMPINSHA_NM_03)),
					dqot(getData(data, L_RENT_DSL_03)),
					dqot(getData(data, L_HMPIN_NO_03)));
	}
	
	
	/**
	 * 入力情報から返品情報受信データファイルのトレーラーレコードを生成します。
	 * @return 返品情報受信データファイルのトレーラーレコード
	 */
	private String buildTrailerRecord() 
	{
		return String.format("\"%s\",\"%d\"", RECORD_TRAILER, getServiceFormBean().getDataBeanArray(SEARCH_RSLT_LIST_CSV).getCount());
	}
	
	
	/**
	 * 文字列をダブルクォーテッドする
	 * @param src 囲まれる文字列
	 * @return \"囲まれる文字列\"
	 */
	private String dqot(String src)
	{
		return String.format("\"%s\"", src);
	}
	

	/**
	 * プルダウンなどの選択項目から選択値を求める
	 */
	private void adjustInputs()
	{
		for (String pulldown : PULLDOWNS)
		{
			storePullDown(this, pulldown, I_CD_INDEX_01, I_CD_CD_01, I_CD_NM_01, I_CD_CD_LIST_01, I_CD_NM_LIST_01);
		}
		
		for (String calendar : CALENDARS)
		{
			String ymd = getData(this, calendar, YEAR_02) + getData(this, calendar, MONTH_02) + getData(this, calendar, DAY_02);
			setData(this, ymd, calendar, YMD_02);
		}
	}
	

	/**
	 * 前回検索時の検索条件を保存します。
	 */
	private void storeSearchCondition()
	{
		adjustInputs();
		
		setData(this, getData(this, I_HMPIN_CHSHT_JOKEN, I_CD_CD_01), SEARCH_HMPIN_CHSHT_JOKEN);
		setData(this, getData(this, I_UKEIRE_SK, I_CD_CD_01), SEARCH_UKEIRE_SK);
		setData(this, getData(this, I_HMPIN_SBT, I_CD_CD_01), SEARCH_HMPIN_SBT);
		setData(this, getData(this, I_SVKEI_NO), SEARCH_SVKEI_NO);
		setData(this, getData(this, I_ANKEN_NO), SEARCH_ANKEN_NO);
		setData(this, getData(this, I_MDL_NO, I_CD_CD_01), SEARCH_MDL_NO);
		setData(this, getData(this, I_TKKIKI_SBT_CD, I_CD_CD_01), SEARCH_TKKIKI_SBT_CD);
		setData(this, getData(this, I_SEIZO_NO), SEARCH_SEIZO_NO);
		setData(this, getData(this, I_SEARCH_YMD_CHOICE, I_CD_CD_01), SEARCH_SEARCH_YMD_CHOICE);
		setData(this, getData(this, I_GDS_STAT), SEARCH_GDS_STAT);

		setData(this, getData(this, I_YMD_STA, YMD_02), SEARCH_YMD_STA_YMD);
		setData(this, getData(this, I_YMD_END, YMD_02), SEARCH_YMD_END_YMD);
		setData(this, getData(this, I_SHONIN_YMD_STA, YMD_02), SEARCH_SHONIN_YMD_STA_YMD);
		setData(this, getData(this, I_SHONIN_YMD_END, YMD_02), SEARCH_SHONIN_YMD_END_YMD);
	}

	
	/**
	 * 前回検索時の検索条件を復元します。
	 */
	private void restoreSearchCondition()
	{
		
		setData(this, getData(this, SEARCH_SVKEI_NO), I_SVKEI_NO);
		setData(this, getData(this, SEARCH_ANKEN_NO), I_ANKEN_NO);
		setData(this, getData(this, SEARCH_SEIZO_NO), I_SEIZO_NO);
		setData(this, getData(this, SEARCH_GDS_STAT), I_GDS_STAT);

		initPulldownIndexByCode(I_HMPIN_CHSHT_JOKEN, getData(this, SEARCH_HMPIN_CHSHT_JOKEN));
		initPulldownIndexByCode(I_HMPIN_SBT, getData(this, SEARCH_HMPIN_SBT));
		initPulldownIndexByCode(I_SEARCH_YMD_CHOICE, getData(this, SEARCH_SEARCH_YMD_CHOICE));
		initPulldownIndexByCode(I_UKEIRE_SK, getData(this, SEARCH_UKEIRE_SK));
		initPulldownIndexByCode(I_MDL_NO, getData(this, SEARCH_MDL_NO));
		initPulldownIndexByCode(I_TKKIKI_SBT_CD, getData(this, SEARCH_TKKIKI_SBT_CD));

		setData(this, JDKCommonUtil.isNull(getData(this, I_GDS_STAT)) ? "" : "有", I_GDS_STAT_DISP);

		setData(this, getData(this, SEARCH_YMD_STA_YMD), I_YMD_STA, YMD_02);
		setData(this, getData(this, SEARCH_YMD_END_YMD), I_YMD_END, YMD_02);
		setData(this, getData(this, SEARCH_SHONIN_YMD_STA_YMD), I_SHONIN_YMD_STA, YMD_02);
		setData(this, getData(this, SEARCH_SHONIN_YMD_END_YMD), I_SHONIN_YMD_END, YMD_02);

		for (String ymdLabel : CALENDARS)
		{
			String fromYmd = getData(this, ymdLabel, YMD_02);
			if (!JDKCommonUtil.isNull(fromYmd))
			{
				setData(this, substr(fromYmd, 0, 4), ymdLabel, YEAR_02);
				setData(this, substr(fromYmd, 4, 6), ymdLabel, MONTH_02);
				setData(this, substr(fromYmd, 6, 8), ymdLabel, DAY_02);
			}
			else
			{
				setData(this, "", ymdLabel, YEAR_02);
				setData(this, "", ymdLabel, MONTH_02);
				setData(this, "", ymdLabel, DAY_02);
			}
		}
	}

	
	
	/**
	 * 検索条件からプルダウンの初期値を設定します。
	 */
	private void initPulldownIndexByCode(String pulldownLabel, String code)
	{
		if (JDKCommonUtil.isNull(code))
		{
			return;
		}
		
		X31SDataBeanAccess pulldown = getServiceFormBean().getDataBeanArray(pulldownLabel).getDataBean(0);
		int length = (Integer)pulldown.sendMessage(I_CD_CD_LIST_01, X31CWebConst.DATABEAN_GET_COUNT);
		for (int i = 0; i < length; i++)
		{
			String test = pulldown.sendMessageString(I_CD_CD_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, i);
			if (test.equals(code))
			{
				setData(this, (long)i, pulldownLabel, I_CD_INDEX_01);
				return;
			}
		}
	}
	

	/**
	 * セッションに格納した検索条件を復元します。
	 * @return 成否
	 */
	@SuppressWarnings("unchecked")
	private boolean restoreConditionFromSession()
	{
		HashMap map = JCCWebCommon.getScreenInfo(this);
		if (map == null)
		{
			return false;
		}

		for (String key : SEARCH_CONDITION_STRING_KEIES)
		{
			setData(this, (String)map.get(key), key);
		}
		
		return true;
	}
	

	/**
	 * 選択レコードの返品機器番号を取得します。
	 * @return 選択された返品機器コード
	 */
	private String getSelectedHmpinKikiCd()
	{
		X31SDataBeanAccessArray list = getServiceFormBean().getDataBeanArray(SEARCH_RSLT_LIST);
		if (list.getCount() == 0)
		{
			return null;
		}
		return getData(list.getDataBean(getDataL(this, I_CHOICE).intValue()), L_HMPIN_KIKI_NO_03);
	}
	

	/**
	 * 画面遷移先を設定します。
	 * @author 富士通
	 * @param nextScreenId 遷移先画面ＩＤ
	 * @param nextScreenName 遷移先画面名
	 */
	private void setNextScreen(String nextScreenId, String nextScreenName)
	{
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();
	
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, nextScreenId);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, nextScreenName);

		DEBUG_LOG.debug(String.format("遷移先 CD：%s NM：%s", nextScreenId, nextScreenName));
	}

	
	/**
	 * スクリーンモードを設定します。
	 * @param mode スクリーンモード
	 */
	private void setScreenMode(long mode)
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		bean.sendMessageLong(SCREEN_MODE, X31CWebConst.DATABEAN_SET_VALUE, mode);
		
		DEBUG_LOG.debug(String.format("画面モードを %d に設定します", mode));
	}
}
