/*******************************************************************************
* All Rights reserved,Copyright (c) K-Opticom
********************************************************************************
*＜プログラム内容＞
* システム名        ：eo顧客基幹システム
* モジュール名      ：CRW00501SFLogic
* ソースファイル名  ：CRW00501SFLogic.java
* 作成者            ：富士通
* 日付              ：2011年08月06日
*＜機能概要＞
* 問合せ情報登録ビューロジック
*＜修正履歴＞
* バージョン    修正日      修正者      修正内容
* ｖ1.00.00
*
********************************************************************************/

package eo.web.webview.CRW00501SF;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.EventObject;
import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CID;
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.x33.X33SException;

import eo.common.util.JCRSortComparator;
import eo.common.util.JCRSortListComparator;
import eo.common.util.JCRUtilCommon;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCScreenConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JCRScreenConst;
import eo.web.webview.common.JCRWebCommon;

	/**
	 * 添付ファイル登録ビューロジック.<p>
	 * <BR>
	 * @author 富士通
	 */
	@SuppressWarnings("serial")
	public class CRW00501SFLogic extends JCCWebBusinessLogic
	{

		/**
		 * 親クラスX31BWebBusinessLogicのreceiveMessageWebを
		 * オーバーライドして自動生成されたメソッドです。
		 * @param arg0 (I) イベント情報
		 * @param arg1 (I) WebFWでは使用しません
		 * @param arg2 (I) WebFWでは使用しません
		 * @return 処理結果（true:正常終了、false:エラー）
		 * @throws X33SException X33SException
		 */
		@Override
		protected boolean receiveMessageWeb(X31CID arg0, Object arg1,
				EventObject arg2) throws X33SException
		{
			return false;
		}

		/**
		 * 初期表示処理.<br>
		 * 初期表示を行う。
		 * 
		 * @return boolean
		 * @throws Exception Exception
		 */
		public boolean init() throws Exception
		{
			// サービスフォームBeanの内容の取得
			X31SDataBeanAccess bean = getServiceFormBean();

			// 共通フォームBeanの内容を取得
			X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

			// (1) 引継情報の取得
			// なし

			// (2) サービスフォームBeanの設定
			setPflrrjh(bean, 1);
			
			// なし

			// (3) サービス呼出処理
			// なし

			// (4) サービス処理結果の設定
			// なし

			// (5) 引継情報の設定
			// なし

			// (6) 共有フォームBeanの設定
			// 遷移先画面ID、名称の設定
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID
					, X31CWebConst.DATABEAN_SET_VALUE, JCRScreenConst.SCREEN_ID_CRW00501);
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME
					, X31CWebConst.DATABEAN_SET_VALUE, JCRScreenConst.SCREEN_NAME_CRW00501);

			return true;
		}

		/**
		 * 添付実行ボタン押下.<br>
		 * 添付実行ボタン押下時の処理を行う。
		 * 
		 * @return boolean
		 * @throws Exception Exception
		 */
		public boolean executeTnpUpload() throws Exception
		{
			// サービスフォームBeanの内容の取得
			X31SDataBeanAccess bean = getServiceFormBean();

			// 共通フォームBeanの内容を取得
			X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

			// 返却用マップ
			HashMap<String, Object> retMap = new HashMap<String, Object>();

			// (1)　引継情報の取得
			// なし

			// (2)　サービスフォームBeanの設定
			// なし

			// (3)　サービス呼出処理
			// なし

			// (4)サービス処理結果の設定

			// (5)　引継情報の設定
			String screenId = JCRWebCommon.getScreenId(this);

			ArrayList<HashMap<String, Object>> fileInfoArray = JCCWebCommon.getFileInfoArray(this);

			String cnt = bean.sendMessageString(CRW00501SFConst.CNT, X31CWebConst.DATABEAN_GET_VALUE);

			for (int i = 0; i < fileInfoArray.size(); i++) 
			{
				String errCode = null;
				String[] replaceValue = null;

				HashMap<String, Object> fileInfoMap = fileInfoArray.get(i);
				
				String resultCode = (String)fileInfoMap.get("resultCode");
				
				// ファイルが存在しない場合
				if ("FILE_NOT_EXIST".equals(resultCode))
				{
					// %1%が存在しません。
					errCode = "EKB0740-KW";
					replaceValue = new String[] {(String)fileInfoMap.get("fileName")};
				}
				// ファイルサイズが0の場合
				else if ("FILE_SIZE_ZERO".equals(resultCode))
				{
					// 指定されたファイルにデータが存在しません。
					errCode = "EKB0750-KW";
					replaceValue = new String[] {""};
				}
				// ファイルサイズがオーバーしている場合
				else if ("FILE_SIZE_NG".equals(resultCode))
				{
					// 添付しようとしたファイルのサイズが大き過ぎます。添付ファイルの上限設定は%1%までです。
					errCode = "EKB2120-KW";
					replaceValue = new String[] {"10MB"};
				}
				// ファイル情報が読み込めない場合
				else if ("FILE_INFO_READ_ERROR".equals(resultCode))
				{
					// ファイルを読込む事ができませんでした。ファイル内容を確認してください。
					errCode = "EKB0680-KW";
					replaceValue = new String[] {""};
				}
				// 拡張子エラーが発生した場合
				else if ("FILE_EXTENSION_ERROR".equals(resultCode))
				{
					// %1%が%2%の為、%3%できません。
					errCode = "EKB1040-JW";
					replaceValue = new String[] {"指定されたファイル", "禁止の拡張子", "アップロード"};
				}
				// プロパティファイルの読込で異常が発生した場合
				else if ("PROPERTY_READ_ERROR".equals(resultCode))
				{
					// %1%が%2%の為、%3%できません。
					errCode = "EKB1040-JW";
					replaceValue = new String[] {"プロパティファイル", "未設定", "アップロード"};
				}

				// エラーが発生した場合
				if (!"FILE_INFO_OK".equals(resultCode))
				{
					JCCWebCommon.setMessageInfo(this, errCode, replaceValue);
					setPflrrjh(bean, Integer.parseInt(cnt, 10));
					return true;
				}
			}

			HashMap<String, Object>[] fileInfoList = fileInfoArray.toArray(new HashMap[fileInfoArray.size()]);

			// 発生年月日で降順ソート
			Arrays.sort(fileInfoList, new JCRSortListComparator(
					"nameValue", JCRSortComparator.SORT_TYPE_ASC));

			ArrayList<HashMap<String, Object>> fileInfoArray2 = new ArrayList<HashMap<String, Object>>();

			for (int i = 0; i < fileInfoList.length; i++)
			{
				fileInfoArray2.add(fileInfoList[i]);
			}
			retMap.put("fileInfoArray", fileInfoArray2);

			JCRWebCommon.setScreenInfo(this, screenId, retMap);

			// (6)　共有フォームBeanの設定
			// 遷移先画面ID、名称の設定
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID
					, X31CWebConst.DATABEAN_SET_VALUE, JCCScreenConst.SCREEN_ID_CCW00105);
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME
					, X31CWebConst.DATABEAN_SET_VALUE, JCCScreenConst.SCREEN_NAME_CCW00105);

			return true;
		}

		/**
		 * 添付ファイル連絡情報設定処理.<br>
		 * 添付ファイル連絡情報の設定を行う。
		 * 
		 * @param bean サービスフォームBean
		 * @param cnt データ件数
		 */
		private void setPflrrjh(X31SDataBeanAccess bean, int cnt)
		{
			// データ件数の設定
			bean.sendMessageString(CRW00501SFConst.CNT, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(cnt));
			
			// 添付ファイル連絡情報リスト
			X31SDataBeanAccessArray pflrpjhArray = bean.getDataBeanArray(CRW00501SFConst.PFLRRJH);
			pflrpjhArray.clearArray();
			
			// データ件数分、添付ファイルリストの情報を設定する
			for (int i = 0; i < cnt; i++)
			{
				String lineStyleId = "tr" + String.valueOf(i + 1);
				X31SDataBeanAccess pflrpjhBean = pflrpjhArray.addDataBean();
				pflrpjhBean.sendMessageString(CRW00501SFConst.L0_LINE_STYLE_ID1_01, X31CWebConst.DATABEAN_SET_VALUE, lineStyleId);
				pflrpjhBean.sendMessageString(CRW00501SFConst.L0_LINE_STYLE_ID2_01, X31CWebConst.DATABEAN_SET_VALUE, lineStyleId);
				pflrpjhBean.sendMessageString(CRW00501SFConst.L0_FILE_NAME_01, X31CWebConst.DATABEAN_SET_VALUE, "upfile" + JCRUtilCommon.fillZero(String.valueOf(i + 1), 3, false));
			}
		}
	}
