/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：ZMSV0027_ZMSV0027OPDBMapper
*	ソースファイル名：ZMSV0027_ZMSV0027OPDBMapper.java
*	作成者			：FJ
*	日付			：2011年06月28日
*＜機能概要＞
*	BP（データ一括登録結果一覧取得）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/06/28	FJ) 宮前	新規作成
*   v3.00.00    2012/05/23  FJ) 宮前    【SGY-2012-000006】権限制御対応
*
**********************************************************************/
package eo.web.webview.mapping;

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.JZM0171Constant;
import eo.web.webview.ZMW10904SF.ZMW10904SFConst;
import eo.web.webview.common.JCCWebCommon;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class ZMSV0027_ZMSV0027OPDBMapper {
	
	
	/** ディレイド処理結果コード */
	private static final String KEY_DLYD_TRN_RSLT_CD_OUTPUT = "dlyd_trn_rslt_cd";

	/** 一覧 行スタイル */
	private static final String STYLE_ODD = "odd";
	
	/** 一覧 行スタイル */
	private static final String STYLE_EVEN = "even";
	
	/** エラー電子ファイル 世代登録年月日時分秒 */
	private static final String KEY_LIST_ERR_FILE_GENE_ADD_DTM = "list_err_file_gene_add_dtm";

	/** エラー電子ファイル 電子ファイル管理番号 */
	private static final String KEY_LIST_ERR_FILE_NO = "list_err_file_no";
	
	/** 日付 最大値 */
	private static final String DLYD_END_DTM = "20991231235959999";
	
	/** 日付 即時処理の場合 */
	private static final String DLYD_SOKUJI_DTM = "00000000000000000";
	
	/** ディレイド処理実施運用年月日時分秒 */
	private static final String KEY_DLYD_TRN_JSSI_UNYO_DTM = "dlyd_trn_jssi_unyo_dtm";

	/** ファイル名 */
	private static final String KEY_FILE_NM = "file_nm";

	/** 処理方式フラグ */
	private static final String KEY_TRN_HOSHIKI_FLG = "trn_hoshiki_flg";

	private static final String KEY_TRN_NM = "trn_nm";

	/** 処理依頼者オペレータアカウント */
	private static final String KEY_TRN_REQ_OPEACNT_OUTPUT = "trn_req_opeacnt";

	/** ユーザー名 */
	private static final String KEY_USER_NM = "user_nm";

	/** 処理依頼年月日時分 */
	private static final String KEY_TRN_REQ_DTM = "trn_req_dtm";

	/** データ一括登録結果一覧照会 リスト */
	private static final String KEY_EZM0251B010CBSMSG1LIST = "EZM0251B010CBSMsg1List";

	/** 表示ページ番号 */
	private static final String KEY_DISPLAY_PAGE_NUM = "display_page_num";

	/** データ一括登録結果一覧照会マップ */
	private static final String KEY_ZMSV002701SC = "ZMSV002701SC";
	
	/** 検索タイプ 1 */
	private static final String SEARCH_TYPE_1 = "1";

	/** 処理依頼者オペレータアカウント */
	private static final String KEY_TRN_REQ_OPEACNT = "key_trn_req_opeacnt";

	/** ディレイド処理結果コード */
	private static final String KEY_DLYD_TRN_RSLT_CD = "key_dlyd_trn_rslt_cd";

	/** KEY 処理管理番号 */
	private static final String KEY_TRN_KANRI_NO = "key_trn_kanri_no";

	/** ＫＥＹ＿依頼日時−終了 */
	private static final String KEY_TO_TRN_REQ_DTM = "key_to_trn_req_dtm";

	/** ＫＥＹ＿依頼日時−開始 */
	private static final String KEY_FROM_TRN_REQ_DTM = "key_from_trn_req_dtm";

	/** KEY 検索タイプ */
	private static final String KEY_SEARCH_TYPE = "search_type";

	/** 表示ページ番号 */
	private static final String KEY_DISPLAY_NUM = "display_num";

	/** 最大検索件数 */
	private static final String KEY_MAX_SEARCH_NUM = "max_search_num";

	/** KEY 機能コード */
	private static final String KEY_FUNC_CODE = "func_code";

	/** 処理結果 Null（実際にマッピングされるのは空文字） */
	private static final String DEFAULT_JOKYO_DSP = "";
	
	/** 処理結果がNullの場合表示する文言 */
	private static final String JOKYO_SYORI_DSP = "処理中";
	
	/**
	 * コンストラクタ
	 */
	public ZMSV0027_ZMSV0027OPDBMapper()
	{
	}
	

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：データ一括登録結果確認
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setEZM0251B010(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
		
		if(bean == null){
			return null;
		}
		
		if(bean.length != 1){
			return null;
		}


		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(KEY_FUNC_CODE, func_code);
		
		// 最大検索件数
		parentMap.put(KEY_MAX_SEARCH_NUM, JCCWebCommon.getSearchConst("ZMW10904_MAX_SHOW_CNT"));
		
		// 表示件数
		parentMap.put(KEY_DISPLAY_NUM, JCCWebCommon.getSearchConst("ZMW10904_ROW_PER_PAGE"));
		
		// 検索処理パターン
		parentMap.put(KEY_SEARCH_TYPE, SEARCH_TYPE_1);

		// 依頼日時−開始 → データ一括登録管理一覧照会.ＫＥＹ＿依頼日時−開始
		parentMap.put(KEY_FROM_TRN_REQ_DTM, bean[0].sendMessageString("依頼日時−開始", X31CWebConst.DATABEAN_GET_VALUE));
		
		// 依頼日時−終了 → データ一括登録管理一覧照会.ＫＥＹ＿依頼日時−終了
		parentMap.put(KEY_TO_TRN_REQ_DTM, bean[0].sendMessageString("依頼日時−終了", X31CWebConst.DATABEAN_GET_VALUE));
		
		// 処理管理番号 → データ一括登録管理一覧照会.ＫＥＹ＿処理管理番号
		parentMap.put(KEY_TRN_KANRI_NO, bean[0].sendMessageString("処理管理番号", X31CWebConst.DATABEAN_GET_VALUE));
		
		// ディレイド処理結果コード → データ一括登録管理一覧照会.ＫＥＹ＿ディレイド処理結果コード
		String dlydRstCode = bean[0].sendMessageString("ディレイド処理結果コード", X31CWebConst.DATABEAN_GET_VALUE);
		if( !("0".equals(dlydRstCode)) )
		{
			parentMap.put(KEY_DLYD_TRN_RSLT_CD, dlydRstCode);
		}
		// 処理依頼者オペレータアカウント → データ一括登録管理一覧照会.ＫＥＹ＿処理依頼者オペレータアカウント
		parentMap.put(KEY_TRN_REQ_OPEACNT, bean[0].sendMessageString("処理依頼者オペレータアカウント", X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put(KEY_ZMSV002701SC, parentMap);
						
		return outputMap;
	}


	/**
	 * 下りマッピング
	 * @param bean　[0]：データ一括登録結果確認
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getEZM0251B010(X31SDataBeanAccess[] bean, HashMap outputMap)
	{

		HashMap parentMap = null;
		if(outputMap.containsKey(KEY_ZMSV002701SC))
		{
			parentMap = (HashMap)outputMap.get(KEY_ZMSV002701SC);
		}

		ArrayList childList = null;
		
		// 追加 No. 用表示件数取得 (ページ数-1)×表示件数
		int disp_count = ( Integer.parseInt((String)parentMap.get(KEY_DISPLAY_PAGE_NUM)) - 1 ) * 
							Integer.parseInt((String)parentMap.get(KEY_DISPLAY_NUM));
		
		X31SDataBeanAccessArray listEZM0251B010_dataikttrk_rslt_list_EZM0251B010CBSMsg1List 
												= bean[0].getDataBeanArray(ZMW10904SFConst.DATAIKTTRK_RSLT_LIST);
		childList = null;
		if(listEZM0251B010_dataikttrk_rslt_list_EZM0251B010CBSMsg1List != null && parentMap != null && parentMap.containsKey(KEY_EZM0251B010CBSMSG1LIST))
		{
			childList = (ArrayList)parentMap.get(KEY_EZM0251B010CBSMSG1LIST);

			for(int i = 0; i < childList.size(); i++){
				X31SDataBeanAccess subbean = null;
				if(listEZM0251B010_dataikttrk_rslt_list_EZM0251B010CBSMsg1List.getCount() -1 >= i)
				{
					subbean = listEZM0251B010_dataikttrk_rslt_list_EZM0251B010CBSMsg1List.getDataBean(i);
				}
				else
				{
					subbean = listEZM0251B010_dataikttrk_rslt_list_EZM0251B010CBSMsg1List.addDataBean();
				}
				HashMap childMap = (HashMap)childList.get(i);
				if (subbean == null) {
					continue;
				}
			
				// データ一括登録結果一覧.処理依頼日時 ← データ一括登録管理一覧照会.データ一括登録結果一覧.処理依頼年月日時分
				if(childMap != null)
				{
					subbean.sendMessageString(ZMW10904SFConst.LIST_TRN_REQ_DTM_03, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get(KEY_TRN_REQ_DTM));
				}
				else
				{
					subbean.sendMessageString(ZMW10904SFConst.LIST_TRN_REQ_DTM_03, X31CWebConst.DATABEAN_SET_VALUE, "");
				}
				
				// データ一括登録結果一覧.依頼者 ← データ一括登録管理一覧照会.データ一括登録結果一覧.処理依頼者
				String userId_Nm = "";
				if(childMap != null)
				{
					userId_Nm = (String)childMap.get(KEY_USER_NM);
				}
				if(childMap != null)
				{
					String userID = (String)childMap.get(KEY_TRN_REQ_OPEACNT_OUTPUT);
					if(userID != null && !"".equals(userID))
					{
						userID = " (" + userID + ")";
						userId_Nm = userId_Nm + userID;
					}
				}
				subbean.sendMessageString(ZMW10904SFConst.LIST_IRAISHA_03, X31CWebConst.DATABEAN_SET_VALUE, userId_Nm);
				
				// データ一括登録結果一覧.処理名 ← データ一括登録管理一覧照会.データ一括登録結果一覧.処理名
				if(childMap != null)
				{
					subbean.sendMessageString(ZMW10904SFConst.LIST_TRN_NM_03, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get(KEY_TRN_NM));
				}
				else
				{
					subbean.sendMessageString(ZMW10904SFConst.LIST_TRN_NM_03, X31CWebConst.DATABEAN_SET_VALUE, "");
				}
				
				// データ一括登録結果一覧.処理方式 ← データ一括登録管理一覧照会.データ一括登録結果一覧.処理方式フラグ
				if(childMap != null)
				{
					subbean.sendMessageString(ZMW10904SFConst.LIST_TRN_HOSHIKI_03, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get(KEY_TRN_HOSHIKI_FLG));
				}
				else
				{
					subbean.sendMessageString(ZMW10904SFConst.LIST_TRN_HOSHIKI_03, X31CWebConst.DATABEAN_SET_VALUE, "");
				}
				
				// データ一括登録結果一覧.ファイル名 ← データ一括登録管理一覧照会.データ一括登録結果一覧.ファイル名
				if (childMap != null)
				{
					subbean.sendMessageString(ZMW10904SFConst.LIST_FILE_NM_03, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get(KEY_FILE_NM));
				}
				else
				{
					subbean.sendMessageString(ZMW10904SFConst.LIST_FILE_NM_03, X31CWebConst.DATABEAN_SET_VALUE, "");
				}
				
				// データ一括登録結果一覧.処理状況 ← データ一括登録管理一覧照会.データ一括登録結果一覧.ディレイド処理結果コード
				String rsltCd;
				if(childMap != null)
				{
					rsltCd = (String)childMap.get(KEY_DLYD_TRN_RSLT_CD_OUTPUT);
				}
				else
				{
					rsltCd = "";
				}
				
				subbean.sendMessageString(ZMW10904SFConst.LIST_TRN_JOKYO_03, X31CWebConst.DATABEAN_SET_VALUE, getStatusNm(rsltCd, bean[0]));
				
				// データ一括登録結果一覧.処理日時 ← データ一括登録管理一覧照会.データ一括登録結果一覧.ディレイド処理実施運用年月日時分秒
				if(childMap != null)
				{
					String dlyd_trn_jssi_unyo_dtm = (String)childMap.get(KEY_DLYD_TRN_JSSI_UNYO_DTM);
					if(DLYD_SOKUJI_DTM.equals(dlyd_trn_jssi_unyo_dtm) || DLYD_END_DTM.equals(dlyd_trn_jssi_unyo_dtm))
					{
						dlyd_trn_jssi_unyo_dtm = "";
					}
					subbean.sendMessageString(ZMW10904SFConst.LIST_TRN_DTM_03, X31CWebConst.DATABEAN_SET_VALUE, dlyd_trn_jssi_unyo_dtm);
				}
				else
				{
					subbean.sendMessageString(ZMW10904SFConst.LIST_TRN_DTM_03, X31CWebConst.DATABEAN_SET_VALUE, "");
				}
				
				// データ一括登録結果一覧.エラー電子ファイル管理番号 ← データ一括登録管理一覧照会.データ一括登録結果一覧.エラー電子ファイル管理番号
				if(childMap != null)
				{
					subbean.sendMessageString(ZMW10904SFConst.LIST_ERR_FILE_NO_03, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get(KEY_LIST_ERR_FILE_NO));
				}
				else
				{
					subbean.sendMessageString(ZMW10904SFConst.LIST_ERR_FILE_NO_03, X31CWebConst.DATABEAN_SET_VALUE, "");
				}
				
				// データ一括登録結果一覧.エラー電子ファイル世代登録年月日時分秒 
				//           ← データ一括登録管理一覧照会.データ一括登録結果一覧.エラー電子ファイル世代登録年月日時分秒
				if(childMap != null) 
				{
					subbean.sendMessageString(ZMW10904SFConst.LIST_ERR_FILE_GENE_ADD_DTM_03, X31CWebConst.DATABEAN_SET_VALUE, 
							(String)childMap.get(KEY_LIST_ERR_FILE_GENE_ADD_DTM));
				}
				else
				{
					subbean.sendMessageString(ZMW10904SFConst.LIST_ERR_FILE_GENE_ADD_DTM_03, X31CWebConst.DATABEAN_SET_VALUE, "");
				}
				
				// データダウンロードリンクフラグ
				subbean.sendMessageBoolean(ZMW10904SFConst.LIST_DL_LINK_03, X31CWebConst.DATABEAN_SET_VALUE, getStatusLink(rsltCd));
				
				// 追加 行番号、行スタイル
				// 行番号
				subbean.sendMessageString(ZMW10904SFConst.LIST_NO_03, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(disp_count + i + 1));
				
				// 行スタイル
				if((i + 1) % 2 == 0)
				{
					
					// 偶数行の場合
					subbean.sendMessageString(ZMW10904SFConst.DISP_CTRL_03, X31CWebConst.DATABEAN_SET_VALUE, STYLE_EVEN);
				}
				else
				{
					
					// 奇数行の場合
					subbean.sendMessageString(ZMW10904SFConst.DISP_CTRL_03, X31CWebConst.DATABEAN_SET_VALUE, STYLE_ODD);
				}
			}
		}


		return bean;
	}

	/**
	 * 処理依頼ステータスと処理結果コードから表示する処理結果の名称を取得する。
	 * @param rslt_cd 処理結果コード
	 * @param bean サービスフォームBean
	 * @return 表示する処理状態の文字列
	 */
	private String getStatusNm(String rslt_cd, X31SDataBeanAccess bean)
	{
		String retValue = DEFAULT_JOKYO_DSP;
		
		// 処理結果 コード一覧
		X31SDataBeanAccessArray jokyo_beans = bean.getDataBeanArray(ZMW10904SFConst.TRN_JOKYO_LIST);
		
		X31SDataBeanAccess subBean = jokyo_beans.getDataBean(0);
		
		int iCntMax = (Integer) subBean.sendMessage(ZMW10904SFConst.TRN_JOKYO_CD_02, X31CWebConst.DATABEAN_GET_COUNT);
		
		for(int iCnt = 0; iCnt < iCntMax; iCnt++)
		{
			String cd = subBean.sendMessageString(ZMW10904SFConst.TRN_JOKYO_CD_02, X31CWebConst.DATABEAN_GET_VALUE, iCnt);
			if(cd.equals(rslt_cd))
			{
				String work = subBean.sendMessageString(ZMW10904SFConst.TRN_JOKYO_DISP_02, X31CWebConst.DATABEAN_GET_VALUE, iCnt);
				String[] workArray = work.split("\\.");
				if(workArray.length > 1)
				{
					retValue = workArray[1];
				}
				break;
			}
		}
		
		if(DEFAULT_JOKYO_DSP.equals(retValue))
		{
			retValue = JOKYO_SYORI_DSP;
		}
		
		return retValue;
		
	}
	
	/**
	 * 処理結果コードからリンクを表示するか判定する。
	 * @param rslt_cd 処理結果コード
	 * @return true:Link表示 false:Link非表示
	 */
	private boolean getStatusLink(String rslt_cd)
	{
		boolean retValue = false;
		if(!"".equals(rslt_cd))
		{
			retValue = true;
		}
		
		return retValue;
	}
}