/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：DKW04702SFLogic
*   ソースファイル名：DKW04702SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年05月10日
*＜機能概要＞
*   入荷詳細画面のビューロジックです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/05/10   FJ）植木    新規作成
*
**********************************************************************/
package eo.web.webview.DKW04702SF;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

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.JDKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCMessageCache;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JDKScreenConst;
import eo.web.webview.common.JDKWebCommon;
import eo.web.webview.mapping.DKSV0092_DKSV0092OPDBMapper;
import eo.web.webview.mapping.DKSV0094_DKSV0094OPDBMapper;

/**
 * DKW04702のビューロジック
 * <BR>
 * @author 富士通
 */
public class DKW04702SFLogic extends JCCWebBusinessLogic
{

	/** シリアルバージョン */
	private static final long serialVersionUID = -5232254354622332360L;
	/** 行カラー（奇数行） */
	private static final String ODD = "odd";
	/** 行カラー（偶数行） */
	private static final String EVEN = "even";

	/** ページング関連（表示ページ番号） */
	private static final String DISPLAY_PAGE_NUM = "display_page_num";
	/** 検索件数取得キー（表示件数） */
	private static final String DKW04702_ROW_PER_PAGE = "DKW04702_ROW_PER_PAGE";
	/** VARB */
	private static final String L_PAG_DTL = "L_PAG_DTL";

	/** サービスID（初期表示） */
	private static final String DKSV0092 = "DKSV0092";
	/** サービスID（CSV出力、ページング） */
	private static final String DKSV0094 = "DKSV0094";

	/** SCタイトル（初期表示） */
	private static final String DKSV009202SC = "DKSV009202SC";
	/** SCタイトル（CSV出力、ページング） */
	private static final String DKSV009401SC = "DKSV009401SC";

	/** 表番号（fromの番号） */
	private static final String TABLEINDEX_0 = "0";

	/** ファイルレイアウト（タイトル行） */
	private static final String[] FILELAYOUT_TITLE = {
		"メーカー名"
		, "発注番号"
		, "型番号"
		, "商品名"
		, "製造番号"
		, "数量"
		, "MACアドレス"
		, "MAC認証ID"
		, "STBID"
	};

	/** 入荷明細ファイル名 */
	private static final String FILENM_NYUKA_DTL = "nyuka_dtl.csv";

	/** 数量の値 */
	private static final String CNT_VALUE = "1";

	/** 活性制御（活性） */
	private static final String ENABLE_CTRL_ENABLE = "false";
	/** 活性制御（非活性） */
	private static final String ENABLE_CTRL_DISABLE = "true";

	/**
	 * 初期表示を処理します。
	 * @author 富士通
	 * @return 成否
	 * @throws Exception 例外
	 */
	@SuppressWarnings("unchecked")
	public boolean init() throws Exception
	{
		JCCWebCommon.getScreenInfo(this);

		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// 運用日付を設定
		JDKWebCommon.setData(serviceFormBean, JCCWebCommon.getOpeDate(this, null), DKW04702SFConst.UNYO_YMD);

		// ページング情報クリア
		JCCWebCommon.clearPageLinkInfo(this, JDKScreenConst.SCREEN_ID_DKW04702);

		X31SDataBeanAccess[] paramBean = {serviceFormBean};
		
		// ユースケースID格納用マップを生成。
		HashMap paramMap = new HashMap();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, DKSV0092);

		// マッピングクラスのインスタンスを生成
		DKSV0092_DKSV0092OPDBMapper mapper = new DKSV0092_DKSV0092OPDBMapper();
		HashMap dataMap = new HashMap();

		mapper.setDKSV009201SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setDKSV009202SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// ページング情報の設定
		JCCWebCommon.upmapperPageLinkInfo(this, TABLEINDEX_0, DKSV009202SC, dataMap);

		// 検索結果格納用マップ
		HashMap outputMap = new HashMap();

		// 検索処理呼出
		invokeService(paramMap, dataMap, outputMap);

		JCCMessageCache.setMessageCache();

		mapper.getDKSV009201SC(paramBean, outputMap);
		mapper.getDKSV009202SC(paramBean, outputMap);

		// ページング情報の設定
		JCCWebCommon.downmapperPageLinkInfo(this, TABLEINDEX_0, DKSV009202SC, outputMap);

		// 検索のコマンドIDを設定する。
		JCCWebCommon.setSearchCommand(this, L_PAG_DTL);

		X31SDataBeanAccessArray nyukaDtlList = serviceFormBean.getDataBeanArray(DKW04702SFConst.NYUKA_DTL_LIST);
		int cnt = nyukaDtlList.getCount();
		if (cnt == 0)
		{
			JDKWebCommon.setData(this, ENABLE_CTRL_DISABLE, DKW04702SFConst.CSV_OUTPUT_ENABLE_CTRL);
		}
		else
		{
			JDKWebCommon.setData(this, ENABLE_CTRL_ENABLE, DKW04702SFConst.CSV_OUTPUT_ENABLE_CTRL);

			for (int i = 0; i < cnt; i++)
			{
				X31SDataBeanAccess subbean = nyukaDtlList.getDataBean(i);

				// 項番
				JDKWebCommon.setData(subbean, i + 1L, DKW04702SFConst.NO_02);

				// 行カラー
				JDKWebCommon.setData(subbean, ((i + 1) % 2 == 0) ? EVEN : ODD, DKW04702SFConst.LINE_COLOR_02);
			}
		}

		JDKWebCommon.setData(this, String.valueOf(cnt), DKW04702SFConst.ICRN_DSP_CNT);

		// 画面遷移処理
		setNextScreen(JDKScreenConst.SCREEN_ID_DKW04702, JDKScreenConst.SCREEN_NAME_DKW04702);

		return true;
	}

	/**
	 * CSV出力ボタン押下処理を行います。
	 * @author 富士通
	 * @return 処理の成否
	 * @throws Exception 例外
	 */
	public boolean outputCsv() throws Exception
	{
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();
		StringBuffer nyukaDtlFile = new StringBuffer();

		// 検索実行
		this.getNyukaDtlMap(serviceFormBean, JPCModelConstant.SAERCH_TYPE_IKT);

		X31SDataBeanAccessArray workNyukaDtlList = serviceFormBean.getDataBeanArray(DKW04702SFConst.WORK_NYUKA_DTL_LIST);
		for (int i = 0; i < workNyukaDtlList.getCount(); i++)
		{
			if (i == 0)
			{
				// タイトル行を出力
				for (int j = 0; j < FILELAYOUT_TITLE.length; j++)
				{
					if (j > 0)
					{
						nyukaDtlFile.append(JDKStrConst.COMMA);
					}
					nyukaDtlFile.append(JDKStrConst.DOUBLE_QUAT).append(FILELAYOUT_TITLE[j]).append(JDKStrConst.DOUBLE_QUAT);
				}
				nyukaDtlFile.append(JDKStrConst.LINE_SEPARATOR);
			}

			X31SDataBeanAccess subbean = workNyukaDtlList.getDataBean(i);
			nyukaDtlFile.append(JDKStrConst.DOUBLE_QUAT)
					.append(JDKWebCommon.getData(serviceFormBean, DKW04702SFConst.MAKER_NM))
					.append(JDKStrConst.DOUBLE_QUAT)
					.append(JDKStrConst.COMMA)
					.append(JDKStrConst.DOUBLE_QUAT)
					.append(JDKWebCommon.getData(serviceFormBean, DKW04702SFConst.HATTCHU_LOT_NO))
					.append(JDKStrConst.DOUBLE_QUAT)
					.append(JDKStrConst.COMMA)
					.append(JDKStrConst.DOUBLE_QUAT)
					.append(JDKWebCommon.getData(serviceFormBean, DKW04702SFConst.MODEL_NO))
					.append(JDKStrConst.DOUBLE_QUAT)
					.append(JDKStrConst.COMMA)
					.append(JDKStrConst.DOUBLE_QUAT)
					.append(JDKWebCommon.getData(serviceFormBean, DKW04702SFConst.GOODS_NM))
					.append(JDKStrConst.DOUBLE_QUAT)
					.append(JDKStrConst.COMMA)
					.append(JDKStrConst.DOUBLE_QUAT)
					.append(JDKWebCommon.getData(subbean, DKW04702SFConst.KIKI_SEIZO_NO_02))
					.append(JDKStrConst.DOUBLE_QUAT)
					.append(JDKStrConst.COMMA)
					.append(JDKStrConst.DOUBLE_QUAT)
					.append(CNT_VALUE)
					.append(JDKStrConst.DOUBLE_QUAT)
					.append(JDKStrConst.COMMA)
					.append(JDKStrConst.DOUBLE_QUAT)
					.append(JDKWebCommon.getData(subbean, DKW04702SFConst.MACAD_02))
					.append(JDKStrConst.DOUBLE_QUAT)
					.append(JDKStrConst.COMMA)
					.append(JDKStrConst.DOUBLE_QUAT)
					.append(JDKWebCommon.getData(subbean, DKW04702SFConst.MAC_NINSHO_ID_02))
					.append(JDKStrConst.DOUBLE_QUAT)
					.append(JDKStrConst.COMMA)
					.append(JDKStrConst.DOUBLE_QUAT)
					.append(JDKWebCommon.getData(subbean, DKW04702SFConst.STB_ID_02))
					.append(JDKStrConst.DOUBLE_QUAT);
			nyukaDtlFile.append(JDKStrConst.LINE_SEPARATOR);
		}

		byte[] byteNyukaDtl = nyukaDtlFile.toString().getBytes(JDKStrConst.CHAR_SET_WIN31J);

		workNyukaDtlList.clearArray();

		JCCWebCommon.setTempDownloadFile(this, byteNyukaDtl, FILENM_NYUKA_DTL);

		return true;
	}

	/**
	 * ページングを処理します。
	 * @author 富士通
	 * @return 成否
	 * @throws Exception 例外
	 */
	@SuppressWarnings("unchecked")
	public boolean paging() throws Exception
	{
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// 検索実行
		HashMap nyukaDtlMap = this.getNyukaDtlMap(serviceFormBean, JPCModelConstant.SAERCH_TYPE_BBN);

		// 表示ページ番号
		String displayPageNum = (String)((HashMap)nyukaDtlMap.get(DKSV009401SC)).get(DISPLAY_PAGE_NUM);
		int iDispPageNum = Integer.parseInt(displayPageNum, 10);
		// 表示件数
		String rowPerPage = JCCWebCommon.getSearchConst(DKW04702_ROW_PER_PAGE);
		int iRowPerPage = Integer.parseInt(rowPerPage, 10);
		// 開始行
		int start = (iDispPageNum - 1) * iRowPerPage;

		X31SDataBeanAccessArray nyukaDtlList = serviceFormBean.getDataBeanArray(DKW04702SFConst.NYUKA_DTL_LIST);
		nyukaDtlList.clearArray();

		X31SDataBeanAccessArray workNyukaDtlList = serviceFormBean.getDataBeanArray(DKW04702SFConst.WORK_NYUKA_DTL_LIST);
		for (int i = 0; i < workNyukaDtlList.getCount(); i++)
		{
			X31SDataBeanAccess workbean = workNyukaDtlList.getDataBean(i);
			X31SDataBeanAccess subbean = nyukaDtlList.addDataBean();

			// 項番
			JDKWebCommon.setData(subbean, (start + i) + 1L, DKW04702SFConst.NO_02);

			// 行カラー
			JDKWebCommon.setData(subbean, ((i + 1) % 2 == 0) ? EVEN : ODD, DKW04702SFConst.LINE_COLOR_02);
			
			// 製造番号
			JDKWebCommon.setData(subbean, JDKWebCommon.getData(workbean, DKW04702SFConst.KIKI_SEIZO_NO_02), DKW04702SFConst.KIKI_SEIZO_NO_02);
			// MACアドレス
			JDKWebCommon.setData(subbean, JDKWebCommon.getData(workbean, DKW04702SFConst.MACAD_02), DKW04702SFConst.MACAD_02);
			// MAC認証ID
			JDKWebCommon.setData(subbean, JDKWebCommon.getData(workbean, DKW04702SFConst.MAC_NINSHO_ID_02), DKW04702SFConst.MAC_NINSHO_ID_02);
			// STBID
			JDKWebCommon.setData(subbean, JDKWebCommon.getData(workbean, DKW04702SFConst.STB_ID_02), DKW04702SFConst.STB_ID_02);
		}

		// 画面遷移処理
		setNextScreen(JDKScreenConst.SCREEN_ID_DKW04702, JDKScreenConst.SCREEN_NAME_DKW04702);

		return true;
	}

	/**
	 * 戻るボタン押下処理を行います。
	 * @author 富士通
	 * @return 成否
	 * @throws Exception 例外
	 */
	public boolean returnSearch() throws Exception
	{
		JCCWebCommon.setScreenId(this, JDKScreenConst.SCREEN_ID_DKW04701, JDKScreenConst.SCREEN_ID_DKW04702);
		setNextScreen(JDKScreenConst.SCREEN_ID_DKW04701, JDKScreenConst.SCREEN_NAME_DKW04701);

		return true;
	}

	/**
	 * 検索処理を実行し、結果のMAPを返す。
	 * @param bean サービスフォームビーン
	 * @param searchType 検索処理パターン（部分取得、一括取得）
	 * @return 検索結果のMAP
	 * @throws Exception 例外
	 */
	@SuppressWarnings("unchecked")
	private HashMap getNyukaDtlMap(X31SDataBeanAccess bean, String searchType) throws Exception
	{
		bean.getDataBeanArray(DKW04702SFConst.WORK_NYUKA_DTL_LIST).clearArray();

		// 検索パターン
		JDKWebCommon.setData(bean, searchType, DKW04702SFConst.SEARCH_PATTERN);

		X31SDataBeanAccess[] paramBean = {bean};
		
		// ユースケースID格納用マップを生成。
		HashMap paramMap = new HashMap();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, DKSV0094);

		// マッピングクラスのインスタンスを生成
		DKSV0094_DKSV0094OPDBMapper mapper = new DKSV0094_DKSV0094OPDBMapper();
		HashMap dataMap = new HashMap();

		mapper.setDKSV009401SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// ページング情報の設定
		JCCWebCommon.upmapperPageLinkInfo(this, TABLEINDEX_0, DKSV009401SC, dataMap);

		// 検索結果格納用マップ
		HashMap outputMap = new HashMap();

		// 検索処理呼出
		invokeService(paramMap, dataMap, outputMap);

		JCCMessageCache.setMessageCache();

		mapper.getDKSV009401SC(paramBean, outputMap);

		// ページング情報の設定
		JCCWebCommon.downmapperPageLinkInfo(this, TABLEINDEX_0, DKSV009401SC, outputMap);

		// 検索のコマンドIDを設定する。
		JCCWebCommon.setSearchCommand(this, L_PAG_DTL);

		X31SDataBeanAccessArray workNyukaDtlList = bean.getDataBeanArray(DKW04702SFConst.WORK_NYUKA_DTL_LIST);
		JDKWebCommon.setData(bean, String.valueOf(workNyukaDtlList.getCount()), DKW04702SFConst.ICRN_DSP_CNT);

		return outputMap;
	}

	/**
	 * 画面遷移先を設定します。
	 * @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("%s(%s)へ遷移します", nextScreenName, nextScreenId));
	}

}
