/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：物流管理システム
*   ソースファイル名：DKW00201SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年05月18日
*＜機能概要＞
*   返品受入登録を処理するロジッククラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/05/18   FJ          新規作成
*
**********************************************************************/
package eo.web.webview.DKW00201SF;

import java.util.HashMap;
import java.util.Map;

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 eo.common.constant.JDKStrConst;
import static eo.common.constant.JPCOnlineMessageConstant.*;
import static eo.common.constant.JPCModelConstant.*;
import eo.common.util.JDKCommonUtil;
import eo.common.util.JPCDateUtil;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JDKWebCommon;
import static eo.web.webview.common.JDKWebCommon.*;
import static eo.web.webview.common.JDKScreenConst.*;
import static eo.web.webview.DKW00201SF.DKW00201SFConst.*;
import eo.web.webview.mapping.DKSV0016_DKSV0016OPDBMapper;
import eo.web.webview.mapping.DKSV0017_DKSV0017OPDBMapper;
import eo.web.webview.mapping.DKSV0019_DKSV0019OPDBMapper;
import eo.web.webview.mapping.DKSV0090_DKSV0090OPDBMapper;
import eo.web.webview.mapping.DKSV0104_DKSV0104OPDBMapper;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

/**
 * 返品受入登録画面を処理するロジッククラスです。
 * @author 富士通
 */
public class DKW00201SFLogic extends JCCWebBusinessLogic
{
	// ページング関連
	private static final String TOTAL_PAGE_NUM = "total_page_num";
	private static final String SEARCH_ERR_FLG = "search_err_flg";
	private static final String TOTAL_SEARCH_NUM = "total_search_num";
	private static final String DISPLAY_NUM = "display_num";
	private static final String MAX_SEARCH_NUM = "max_search_num";
	private static final String SEARCH_TYPE = "search_type";
	private static final String DISPLAY_PAGE_NUM = "display_page_num";
	private static final String PAGING_SEARCH_TYPE = "1";
	private static final int MAX_OF_DATACOUNT_IN_PAGE = 25;
	private static final int MAX_OF_DATACOUNT = 1000;

	// 画面表示文字
	private static final String ODD = "odd";
	private static final String EVEN = "even";
	
	// CSV関連
	private static final String RECORD_TRAILER = "83";
	private static final String RECORD_DATA = "81";

	// メッセージ
	private static final String MSG_UKREIRESAKI_SOKO = "受入先の倉庫";
	private static final String MSG_HMPIN_UKEIRE_TOROKU = "返品受入登録";
	
	// VARB
	private static final String L_PAG_COMPLETE = "L_PAG_COMPLETE";
	private static final String L_PAG_FIX = "L_PAG_FIX";
	private static final String L_PAG_CREATE = "L_PAG_CREATE";

	// サービス
	private static final String DKSV0016 = "DKSV0016";
	private static final String DKSV0017 = "DKSV0017";
	private static final String DKSV0019 = "DKSV0019";
	private static final String DKSV0090 = "DKSV0090";
	private static final String DKSV0104 = "DKSV0104";


	/** シリアルバージョン */
	private static final long serialVersionUID = 1L;
	
	/**  */
	private static final String PAGING_TEMPLATE_ID = SCREEN_ID_DKW00101;
	
	
	/**
	 * 初期表示を処理します。
	 * @author 富士通
	 * @return 成否
	 * @throws Exception 例外
	 */
	@SuppressWarnings("unchecked")
	public boolean init() throws Exception
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		setNextScreen(SCREEN_ID_DKW00201, SCREEN_NAME_DKW00201);
		
		X31SDataBeanAccess[] paramBean = {bean};
		
		HashMap paramMap = new HashMap();
		HashMap inputMap = new HashMap();
		HashMap outputMap = new HashMap();

		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, DKSV0016);
		
		DKSV0016_DKSV0016OPDBMapper mapper = new DKSV0016_DKSV0016OPDBMapper();
		mapper.setDKSV001601SC(paramBean, inputMap, FUNC_CD_2);

		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
		
		mapper.getDKSV001601SC(paramBean, outputMap) ;
		
		appendPrefix(getBean(this, I_UKEIRE_SK_CD), I_UKEIRE_SK_NM_LIST_01);
		
		return true;
	}
	

	/**
	 * 返品受入登録確認画面の確認ボタンを処理します。
	 * @author 富士通
	 * @return 成否
	 * @throws Exception 例外
	 */
	public boolean confirmCreate() throws Exception
	{
		initializePageInformation(getAllDataCount(), SCREEN_ID_DKW00202, L_PAG_FIX);
		pickFromLines(getDisplayPageNumber(SCREEN_ID_DKW00202, L_PAG_FIX));
		
		JCCWebCommon.setMessageInfo(this, EKB0370__I, new String [] { MSG_HMPIN_UKEIRE_TOROKU});
		setNextScreen(SCREEN_ID_DKW00202, SCREEN_NAME_DKW00202);
		
		return true;
	}


	/**
	 * 返品受入登録確認画面の反映を処理します。
	 * @author 富士通
	 * @return 成否
	 * @throws Exception 例外
	 */
	@SuppressWarnings("unchecked")
	public boolean reflect() throws Exception
	{
		HashMap map = JCCWebCommon.getScreenInfo(this);
		String str = map.get(EFILE).toString();

		initLines(str);
		pickFromLines(0);
		
		initializePageInformation(getAllDataCount(), SCREEN_ID_DKW00201, L_PAG_CREATE);
		
		setScrrenMode(2);
		setNextScreen(SCREEN_ID_DKW00201, SCREEN_NAME_DKW00201);
		
		return true;
	}

	/**
	 * 返品受入登録画面のページングを処理します。
	 * @author 富士通
	 * @return 成否
	 * @throws Exception 例外
	 */
	public boolean paging() throws Exception
	{
		pickFromLines(getDisplayPageNumber(SCREEN_ID_DKW00201, L_PAG_CREATE));
		
		setNextScreen(SCREEN_ID_DKW00201, SCREEN_NAME_DKW00201);
		return true;
	}
	

	/**
	 * 返品受入登録画面のクリアボタンを処理します。
	 * @author 富士通
	 * @return 成否
	 * @throws Exception 例外
	 */
	public boolean clear() throws Exception
	{
		cleareServiceFormbean();
		init();
		
		setNextScreen(SCREEN_ID_DKW00201, SCREEN_NAME_DKW00201);
		
		return true;
	}
	
	/**
	 * 返品受入登録画面のデータ読込ボタンを処理します。
	 * @author 富士通
	 * @return 成否
	 * @throws Exception 例外
	 */
	@SuppressWarnings("unchecked")
	public boolean showDataLoad() throws Exception
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// 受入先の取得
		// I_UKEIRE_SK_CD.I_UKEIRE_SK_CD_01にインデックスが入ってるので、それを利用して
		// I_UKEIRE_SK_CD.I_UKEIRE_SK_CD_LIST_01から選択値を取得する
		X31SDataBeanAccess ukeireInfo = getBean(this, I_UKEIRE_SK_CD);
		String selectedSokoCodeIndex = getData(ukeireInfo, I_UKEIRE_SK_CD_01);
		String selectedSokoCode = ukeireInfo.sendMessageString(I_UKEIRE_SK_CD_LIST_01,
																X31CWebConst.DATABEAN_GET_VALUE,
																Integer.parseInt(selectedSokoCodeIndex));

		Boolean haiki = getDataB(bean ,I_ABDMNT_ADD);
		
		// 受入先、廃棄棚コードをパラメータに設定
		setData(bean, selectedSokoCode, SOKO_CD);
		setData(bean, haiki ? JDKStrConst.HAIKI_TANA : JDKStrConst.HENPIN_TANA, SHELF_CD);

		setData(bean, "", SOKODANA, SOKO_NM_03);
		
		X31SDataBeanAccess[] paramBean = {bean};
		HashMap paramMap = new HashMap();
		HashMap inputMap = new HashMap();
		HashMap outputMap = new HashMap();

		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, DKSV0017);

		DKSV0017_DKSV0017OPDBMapper mapper = new DKSV0017_DKSV0017OPDBMapper();
		mapper.setDKSV001701SC(paramBean, inputMap, FUNC_CD_2);
		
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);

		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return false;
		}
		mapper.getDKSV001701SC(paramBean, outputMap) ;
		
		String sokoName = getData(this, SOKODANA, SOKO_NM_03);

		// 倉庫名が取得できない＝指定の棚が存在しないであるためエラーとする
		if ((sokoName == null) || (sokoName.length() == 0))
		{
			DEBUG_LOG.debug("倉庫棚の存在チェック NG");
			DEBUG_LOG.debug("廃棄登録選択値：" + getData(this, SHELF_CD));
			setScrrenMode(0);

			String tana = getShelfName(getData(this, SHELF_CD));
			JCCWebCommon.setMessageInfo(this, EKB0720_KW, new String [] {MSG_UKREIRESAKI_SOKO, tana});
			return false;
		}
		DEBUG_LOG.debug("倉庫棚の存在チェック OK");
		DEBUG_LOG.debug("廃棄登録選択値：" + getData(this, SHELF_CD));
		
		setScrrenMode(1);
		setData(bean, substr(sokoName, 0, 45), I_UKEIRE_SK_NM);

		setNextScreen(SCREEN_ID_DKW00201, SCREEN_NAME_DKW00201);
		
		return true;
	}
	
	/**
	 * 返品受入登録確認画面の確認ボタンを処理します。
	 * @author 富士通
	 * @return 成否
	 * @throws Exception 例外
	 */
	@SuppressWarnings("unchecked")
	public boolean fix() throws Exception
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		X31SDataBeanAccess[] paramBean = {bean};
		HashMap paramMap = new HashMap();
		HashMap inputMap = new HashMap();
		HashMap outputMap = new HashMap();
		HashMap attachMap = new HashMap();

		setData(this, buildFile(), EFILE);
		String today = JCCWebCommon.getOpeDate(this, null);
		String deleteExpectDate = JPCDateUtil.addDay(today, 90);
		setData(this, deleteExpectDate, FILE_DEL_YMD);
		
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, DKSV0019);
		JDKWebCommon.setByteArrayMapping(attachMap, EFILE, this);
		
		DKSV0019_DKSV0019OPDBMapper mapper = new DKSV0019_DKSV0019OPDBMapper();
		mapper.setDKSV001901SC(paramBean, inputMap, FUNC_CD_1);
		mapper.setDKSV001902SC(paramBean, inputMap, FUNC_CD_1);
		mapper.setDKSV001903SC(paramBean, inputMap, FUNC_CD_1);
		
		// 検索結果格納用マップを生成。
		// サービス呼出 
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap, attachMap);
		
		JCCWebCommon.deleteCache(this);
		
		// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return false;
		}

		initializePageInformation(getAllDataCount(), SCREEN_ID_DKW00203, L_PAG_COMPLETE);
		pickFromLines(getDisplayPageNumber(SCREEN_ID_DKW00203, L_PAG_COMPLETE));
		
		JCCWebCommon.setMessageInfo(this, EKB0380__I, new String [] {MSG_HMPIN_UKEIRE_TOROKU});
		setNextScreen(SCREEN_ID_DKW00203, SCREEN_NAME_DKW00203);
		
		return true;
	}

	/**
	 * 返品受入登録確認画面の戻るボタンを処理します。
	 * @author 富士通
	 * @return 成否
	 * @throws Exception 例外
	 */
	public boolean returnCreate() throws Exception
	{
		setNextScreen(SCREEN_ID_DKW00201, SCREEN_NAME_DKW00201);
		return true;
	}

	/**
	 * 返品受入登録確認画面のページングを処理します。
	 * @author 富士通
	 * @return 成否
	 * @throws Exception 例外
	 */
	public boolean pagingFix() throws Exception
	{
		pickFromLines(getDisplayPageNumber(SCREEN_ID_DKW00202, L_PAG_FIX));
		
		setNextScreen(SCREEN_ID_DKW00202, SCREEN_NAME_DKW00202);
		JCCWebCommon.setMessageInfo(this, EKB0370__I, new String [] { MSG_HMPIN_UKEIRE_TOROKU});
		return true;
	}

	/**
	 * 返品受入登録完了画面のページングを処理します。
	 * @author 富士通
	 * @return 成否
	 * @throws Exception 例外
	 */
	public boolean pagingComplete() throws Exception
	{
		pickFromLines(getDisplayPageNumber(SCREEN_ID_DKW00203, L_PAG_COMPLETE));
		
		setNextScreen(SCREEN_ID_DKW00203, SCREEN_NAME_DKW00203);
		JCCWebCommon.setMessageInfo(this, EKB0380__I, new String [] {MSG_HMPIN_UKEIRE_TOROKU});
		return true;
	}

	/**
	 * 返品受入登録完了画面の完了ボタンを処理します。
	 * @author 富士通
	 * @return 成否
	 * @throws Exception 例外
	 */
	public boolean complete() throws Exception
	{
		cleareServiceFormbean();
		init();

		setNextScreen(SCREEN_ID_DKW00201, SCREEN_NAME_DKW00201);
		
		return true;
	}
	
	/**
	 * 返品受入登録完了画面の完了ボタンを処理します。
	 * @author 富士通
	 * @return 成否
	 * @throws Exception 例外
	 */
	@SuppressWarnings("unchecked")
	public boolean showChild() throws Exception
	{
		HashMap paramMap = new HashMap();
		JCCWebCommon.setScreenInfo(this, SCREEN_ID_DKW00204, paramMap);
		JCCWebCommon.setScreenId(this, SCREEN_ID_DKW00204 + "0PJP", SCREEN_ID_DKW00201 + "0PJP");
		
		setNextScreen(SCREEN_ID_DKW00204, SCREEN_NAME_DKW00204);
		
		return true;
	}
	
	
	/**
	 * 返品情報受信データを全返品受入情報一覧リストへ格納します。
	 * @author 富士通
	 * @param linesStr アップロードされた返品情報受信
	 */
	private void initLines(String linesStr)
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess allData = bean.getDataBeanArray(ALL_HMPIN_UKEIRE_LIST).getDataBean(0);
		if (allData == null)
		{
			allData = bean.getDataBeanArray(ALL_HMPIN_UKEIRE_LIST).addDataBean();
		}
		allData.sendMessage(L_LINE_04, X31CWebConst.DATABEAN_CLEAR);
		
		int dataCounts = 0;
		String [] lines = linesStr.split(JDKStrConst.LINE_SEPARATOR);
		for (String line : lines) {
			line = line.replaceAll("\"", "");
			String [] columns = JDKCommonUtil.splitAnycase(line, ',');
			// ８１はデータレコード
			if (RECORD_DATA.equals(columns[0]))
			{
				allData.sendMessageString(L_LINE_04, X31CWebConst.DATABEAN_ADD_VALUE, line);
			}
			// ８３はトレーラーレコード
			else if (RECORD_TRAILER.equals(columns[0]))
			{
				DEBUG_LOG.debug(String.format("トレーラーを読み込みました。"));
				allData.sendMessageString(TRAILER_04, X31CWebConst.DATABEAN_SET_VALUE, line);
				break;
			}
			else
			{
				// それ以外は無視
			}
		}
		
		DEBUG_LOG.debug(String.format("データレコードを%d件読み込みました。", dataCounts));
	}
	
	/**
	 * 画面で保持している全返品受入情報の件数を取得します。
	 * @author 富士通
	 * @return 全返品受入情報の件数
	 */
	private int getAllDataCount()
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();

		X31SDataBeanAccess allList = bean.getDataBeanArray(ALL_HMPIN_UKEIRE_LIST).getDataBean(0);
		return (Integer)allList.sendMessage(L_LINE_04, X31CWebConst.DATABEAN_GET_COUNT);
	}
	
	
	/**
	 * 前返品受入情報一覧リストから指定のページデータを切り出します。
	 * @author 富士通
	 * @param page ページ
	 */
	private void pickFromLines(int page) throws Exception
	{
		DEBUG_LOG.debug(String.format("%dページ目のデータを準備します。", page + 1));
		
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccessArray list = bean.getDataBeanArray(HMPIN_UKEIRE_LIST);
		list.clearArray();
		
		X31SDataBeanAccess allList = getBean(this, ALL_HMPIN_UKEIRE_LIST);
		int dataCount = (Integer)allList.sendMessage(L_LINE_04, X31CWebConst.DATABEAN_GET_COUNT);
		int start = page * MAX_OF_DATACOUNT_IN_PAGE;
		int end = (page + 1) * MAX_OF_DATACOUNT_IN_PAGE;
		if (dataCount < end)
		{
			end = dataCount;
		}
		
		Map<String, Map<String, String>> codeDictionary = getCodeDictionaries();

		int lineIndex = 1;
		DEBUG_LOG.debug(String.format("出力データ：全%d件中 %d〜%d", dataCount, start + 1, end));
		for (int i = start ; i < end ; i++)
		{
			String line = allList.sendMessageString(L_LINE_04, X31CWebConst.DATABEAN_GET_VALUE, i);
			String [] columns = JDKCommonUtil.splitAnycase(line, ',');

			X31SDataBeanAccess subbean = list.addDataBean();
			setData(subbean, Integer.toString(lineIndex), L_NO_02);
			setData(subbean, (lineIndex % 2 == 0) ? EVEN : ODD, L_COLOR_02);
			setData(subbean, columns[10], L_SVKEI_NO_02);
			setData(subbean, columns[11], L_ANKEN_NO_02);
			setData(subbean, columns[7], L_MDL_NO_02);
			setData(subbean, columns[9], L_SHKA_LOT_NO_02);
			setData(subbean, columns[8], L_SEIZO_NO_02);
			setData(subbean, columns[5], L_HMPIN_SBT_CD_02);
			setData(subbean, columns[12], L_HMPIN_RSN_CD_02);
			setData(subbean, columns[14], L_GDS_STAT_CD_02);
			setData(subbean, columns[26], L_RENT_DSL_CD_02);
			setData(subbean, columns[6], L_HMPIN_YMD_02);

			setData(subbean, codeDictionary.get(HMPIN_KIND).get(columns[5]), L_HMPIN_SBT_02);
			setData(subbean, codeDictionary.get(HMPIN_REASON).get(columns[12]), L_HMPIN_RSN_02);
			setData(subbean, codeDictionary.get(ITEM_CONDITION).get(columns[14]), L_GDS_STAT_02);
			setData(subbean, codeDictionary.get(EXISTS_OR_NOT).get(columns[26]), L_RENT_DSL_02);
			
			setData(subbean, substr(getData(subbean, L_HMPIN_RSN_02), 0, 15), L_HMPIN_RSN_DISP_02);
			setData(subbean, substr(getData(subbean, L_GDS_STAT_02), 0, 6), L_GDS_STAT_DISP_02);

			
			lineIndex++;
		}
	}
	
	
	/**
	 * サービスフォームビーンの内容をクリアします。
	 * @author 富士通
	 */
	private void cleareServiceFormbean()
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		bean.sendMessage(I_UKEIRE_SK_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(I_ABDMNT_ADD, X31CWebConst.DATABEAN_CLEAR);
		setScrrenMode(0);
		
		bean.getDataBeanArray(I_UKEIRE_SK_CD).clearArray();
		bean.getDataBeanArray(HMPIN_UKEIRE_LIST).clearArray();
		bean.getDataBeanArray(ALL_HMPIN_UKEIRE_LIST).clearArray();
	}
	
	
	/**
	 * スクリーンモードを設定します。
	 * @param mode スクリーンモード
	 */
	private void setScrrenMode(long mode)
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		bean.sendMessageLong(SCREEN_MODE, X31CWebConst.DATABEAN_SET_VALUE, mode);
		DEBUG_LOG.debug("画面モード：" + getDataL(this, SCREEN_MODE));
	}
	
	/**
	 * 現在表示すべきページ番号を返します。
	 * @author 富士通
	 * @param screenId 画面ＩＤ
	 * @param command ページングにレンダリングするコマンド名
	 * @return ページ番号
	 * @throws Exception 例外発生時
	 */
	/**
	 * @param screenId
	 * @param command
	 * @return
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private int getDisplayPageNumber(String screenId, String command) throws Exception
	{
		HashMap pageMap = initializePageInformation(getAllDataCount(), screenId, command);
		
		String displayPageNum = (String)((HashMap)pageMap.get(PAGING_TEMPLATE_ID)).get(DISPLAY_PAGE_NUM);
		return Integer.parseInt(displayPageNum) - 1;
	}
	
	
	/**
	 * 返品情報受信データファイルを完成させます。
	 * @return 倉庫コード、棚コードの入った返品情報受信データファイル
	 */
	private String buildFile()
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		StringBuffer sb = new StringBuffer();

		String sokoCode = getData(bean, SOKO_CD);
		String tanaCode = getData(bean, SHELF_CD);
		
		X31SDataBeanAccess allList = getBean(bean, ALL_HMPIN_UKEIRE_LIST);
		int size = (Integer)(allList.sendMessage(L_LINE_04, X31CWebConst.DATABEAN_GET_COUNT));
		for (int i = 0; i < size; i++)
		{
			String line = allList.sendMessageString(L_LINE_04, X31CWebConst.DATABEAN_GET_VALUE, i);
			String [] datas = JDKCommonUtil.splitAnycase(line, ',');
			datas[3] = sokoCode;
			datas[4] = tanaCode;
			
			sb.append(join(",", datas));
			sb.append(JDKStrConst.LINE_SEPARATOR);
		}
		
		String trailer = getData(allList, TRAILER_04);
		if (trailer.indexOf(",") != trailer.lastIndexOf(","))
		{
			trailer = JDKWebCommon.substr(trailer, 0, trailer.indexOf(',', trailer.indexOf(',') + 1));
		}
		sb.append(join(",", JDKCommonUtil.splitAnycase(trailer, ',')));
		
		return sb.toString();
	}
	
	/**
	 * strsをseparatorで連結します。
	 * @param separator 連結文字列
	 * @param strs 連結した文字列配列
	 * @return 連結された文字列
	 */
	private String join(String separator, String...strs) 
	{
		if (strs == null || strs.length == 0)
		{
			return null;
		}
		if (strs.length == 1)
		{
			return strs[0];
		}
		
		boolean isFirst = true;
		StringBuffer sb = new StringBuffer();
		for (String str : strs)
		{
			if (!isFirst)
			{
				sb.append(separator);
			}
			sb.append(String.format("\"%s\"", str));
			isFirst = false;
		}
		
		return sb.toString();
	}
	
	

	@SuppressWarnings("unchecked")
	private Map<String, Map<String, String>> getCodeDictionaries()
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		X31SDataBeanAccess[] paramBean = {bean};
		
		HashMap paramMap = new HashMap();
		HashMap inputMap = new HashMap();
		HashMap outputMap = new HashMap();

		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, DKSV0104);
		
		DKSV0104_DKSV0104OPDBMapper mapper = new DKSV0104_DKSV0104OPDBMapper();
		mapper.setDKSV010401SC(paramBean, inputMap, FUNC_CD_1);

		invokeService(paramMap, inputMap, outputMap);

		mapper.getDKSV010401SC(paramBean, outputMap) ;
		mapper.getDKSV010402SC(paramBean, outputMap) ;
		mapper.getDKSV010403SC(paramBean, outputMap) ;
		mapper.getDKSV010404SC(paramBean, outputMap) ;
		
		Map<String, Map<String, String>> dictionaries = new HashMap<String, Map<String,String>>();
		
		for (String desc : new String [] {HMPIN_KIND, HMPIN_REASON, ITEM_CONDITION, EXISTS_OR_NOT})
		{
			dictionaries.put(desc, getCodeDictionary(desc));
		}
		
		return dictionaries;
	}
	
	private Map<String, String> getCodeDictionary(String codeDescription)
	{
		X31SDataBeanAccess list = getServiceFormBean().getDataBeanArray(codeDescription).getDataBean(0);
		
		Map<String, String> dic = new HashMap<String, String>();
		int length = (Integer)list.sendMessage(CD_05, X31CWebConst.DATABEAN_GET_COUNT);
		for (int i = 0;i < length;i++)
		{
			dic.put(list.sendMessageString(CD_05, X31CWebConst.DATABEAN_GET_VALUE, i),
					list.sendMessageString(NM_05, X31CWebConst.DATABEAN_GET_VALUE, i));
		}
		return dic;
	}
	
	
	/**
	 * ページング情報を初期化します。
	 * @author 富士通
	 * @param allDataCount 総件数
	 * @param screenId 画面ＩＤ
	 * @param command ページングにレンダリングするコマンド名
	 * @return 初期化されたページング情報
	 * @throws Exception 例外発生時
	 */
	@SuppressWarnings("unchecked")
	private HashMap initializePageInformation(int allDataCount, String screenId, String command) throws Exception
	{
		HashMap pageMap = new HashMap();
		HashMap pageInfo = new HashMap();
		pageMap.put(PAGING_TEMPLATE_ID, pageInfo);
		
		pageInfo.put(SEARCH_TYPE, PAGING_SEARCH_TYPE);
		pageInfo.put(MAX_SEARCH_NUM, Integer.toString(MAX_OF_DATACOUNT));
		pageInfo.put(DISPLAY_NUM, Integer.toString(MAX_OF_DATACOUNT_IN_PAGE));

		JCCWebCommon.upmapperPageLinkInfo(this, PAGING_TEMPLATE_ID, pageMap, screenId);
		
		pageInfo.put(TOTAL_SEARCH_NUM, Integer.toString(allDataCount));
		pageInfo.put(TOTAL_PAGE_NUM, Integer.toString(allDataCount / MAX_OF_DATACOUNT_IN_PAGE + (allDataCount % MAX_OF_DATACOUNT_IN_PAGE == 0 ? 0 : 1)));
		pageInfo.put(SEARCH_ERR_FLG, "");
		
		JCCWebCommon.downmapperPageLinkInfo(this, PAGING_TEMPLATE_ID, pageMap, screenId);
		JCCWebCommon.setSearchCommand(this, command, screenId);
		
		return pageMap;
	}
	
	
	/**
	 * 棚コードに対応する棚コードを取得します。
	 * @param shelfCode 棚コード
	 * @return 棚名称
	 */
	@SuppressWarnings("unchecked")
	private String getShelfName(String shelfCode)
	{
		X31SDataBeanAccess[] paramBean = new X31SDataBeanAccess[] {getServiceFormBean()};
		HashMap paramMap = new HashMap();
		HashMap inputMap = new HashMap();
		HashMap outputMap = new HashMap();

		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, DKSV0090);

		DKSV0090_DKSV0090OPDBMapper mapper = new DKSV0090_DKSV0090OPDBMapper();
		mapper.setDKSV0090SC(new X31SDataBeanAccess[] {getServiceFormBean()}, inputMap, JDKStrConst.SHELF_CD, FUNC_CD_1);

		invokeService(paramMap, inputMap, outputMap);
		mapper.getDKSV009001SC(paramBean, outputMap, SHELF_NAMES) ;
		
		X31SDataBeanAccessArray shelfNames = getServiceFormBean().getDataBeanArray(SHELF_NAMES);
		for (int i = 0;i < shelfNames.getCount();i++)
		{
			X31SDataBeanAccess data = shelfNames.getDataBean(i);
			if (shelfCode.equals(getData(data, CD_06)))
			{
				return getData(data, NAME_06);
			}
		}
		
		return "";
	}
	
	
	/**
	 * 画面遷移先を設定します。
	 * @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));
	}
}
