/*******************************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 ********************************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム構築
 *	モジュール名	：CRW08101SFLogic
 *	ソースファイル名：CRW08101SFLogic.java
 *	作成者			：富士通
 *	日付			：2011年11月25日
 *＜機能概要＞
 *	NTT電話帳アップロードビューロジック
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	ｖ1.00.00
 *
 ********************************************************************************/

package eo.web.webview.CRW08101SF;

import java.util.ArrayList;
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.constant.JCRStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JCRUtilCommon;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JCRScreenConst;
import eo.web.webview.common.JCRWebCommon;
import eo.web.webview.mapping.CRSV0142_CRSV0142OPDBMapper;
import eo.web.webview.mapping.CRSV0143_CRSV0143OPDBMapper;
import eo.web.webview.mapping.CRSV0144_CRSV0144OPDBMapper;

/**
 * NTT電話帳アップロードビューロジック.<p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class CRW08101SFLogic extends JCCWebBusinessLogic
{
	/**
	 * 付加ファイル名：NGワード
	 */
	private static final String ADD_FILE_NAME_NGWORD = "_NGword";

	/**
	 * 付加ファイル名：電話帳ファイル
	 */
	private static final String ADD_FILE_NAME_TEL = "_TEL";

	/**
	 * アップロードファイル（拡張子も含む）の最大文字数
	 */
	private static final int FILE_MAX_LENGTH = 80;

	/**
	 * ファイルオブジェクト名：NGワード
	 */
	private static final String FILE_OBJ_NAME_NGWORD = "ngword_file_nm";

	/**
	 * ファイルオブジェクト名：電話帳ファイル
	 */
	private static final String FILE_OBJ_NAME_TEL = "tel_file_nm";

	/**
	 * 親クラス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>
	 * <br>
	 * NTT電話帳アップロード（初期表示）サービスを呼び出し、
	 * NTT電話帳アップロード画面の初期表示を行います。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean init() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// サービスフォームBeanの内容をクリアする
		clearBean();

		// 権限制御定義ファイルより、全ワークグループ抽出権限の有無をチェック
		bean.sendMessageBoolean(CRW08101SFConst.ALL_WKGRP_SELECT_FLG, X31CWebConst.DATABEAN_SET_VALUE,
				JCRWebCommon.checkAuthority(this, this.getGamenId() + ";" + JCRStrConst.AUTHORITY_KEY_ALL_WKGRP_SELECT_FLG));

		// ファイルアップロード処理準備
		bean.sendMessageString(CRW08101SFConst.NGWORD_FILE_NM, X31CWebConst.DATABEAN_SET_VALUE, "ngword_file_nm");
		bean.sendMessageString(CRW08101SFConst.TEL_FILE_NM, X31CWebConst.DATABEAN_SET_VALUE, "tel_file_nm");

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// ユースケースID格納用Map
		HashMap<Object, String> paramMap = new HashMap<Object, String>();

		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CRSV0142");

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean, commoninfoBean};

		// マッピングクラス
		CRSV0142_CRSV0142OPDBMapper mapper = new CRSV0142_CRSV0142OPDBMapper();

		// マッピング処理（上り）
		mapper.setGETBUNSHOCTL1RCC(paramBean, dataMap, JPCModelConstant.FUNC_CD_2);
		mapper.setGETBUNSHOCTL1R2CC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// サービス実行
		invokeService(paramMap, dataMap, outputMap);

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// マッピング処理（下り）
		mapper.getGETBUNSHOCTL1RCC(paramBean, outputMap);
		mapper.getGETBUNSHOCTL1R2CC(paramBean, outputMap);

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_ID_CRW08101);

		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_NAME_CRW08101);

		return true;
	}

	/**
	 * 適用中のNGファイルリンククリック処理。
	 * <br>
	 * 適用中のNGファイルリンククリック時の処理を行う。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean clickLinkNgwordFileDownload() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// なし

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// なし

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// なし

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_ID_CRW08101);

		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_NAME_CRW08101);

		// -------------------------------------------------- //
		// (7)ファイルダウンロード
		// -------------------------------------------------- //
		JCRWebCommon.setDownloadFile(this, bean.sendMessageString(CRW08101SFConst.RECENT_EFILE_KANRI_NO, X31CWebConst.DATABEAN_GET_VALUE)
				, bean.sendMessageString(CRW08101SFConst.RECENT_TAIORRKI_BUNSHO_FILE_NM, X31CWebConst.DATABEAN_GET_VALUE));

		return true;
	}

	/**
	 * NGワード付与処理待ちファイルリンククリック処理。
	 * <br>
	 * NGワード付与処理待ちファイルリンククリック時の処理を行う。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean clickLinkUnfinishFileDownload() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// なし

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// なし

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// なし

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_ID_CRW08101);

		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_NAME_CRW08101);

		// -------------------------------------------------- //
		// (7)ファイルダウンロード
		// -------------------------------------------------- //
		X31SDataBeanAccessArray bunshoList = bean.getDataBeanArray(CRW08101SFConst.NTT_TEL_FILE);

		int selBunshoIndex = Integer.parseInt(bean.sendMessageString(CRW08101SFConst.LINE_NO, X31CWebConst.DATABEAN_GET_VALUE));
		X31SDataBeanAccess bunshoBean = bunshoList.getDataBean(selBunshoIndex);

		JCRWebCommon.setDownloadFile(this, bunshoBean.sendMessageString(CRW08101SFConst.L0_EFILE_KANRI_NO_01, X31CWebConst.DATABEAN_GET_VALUE)
				, bunshoBean.sendMessageString(CRW08101SFConst.L0_TAIORRKI_BUNSHO_FILE_NM_01, X31CWebConst.DATABEAN_GET_VALUE));

		return true;
	}

	/**
	 * 削除ボタン押下処理。
	 * <br>
	 * 入力チェックを行い、エラーがない場合は、NTT電話帳アップロード削除確認画面に遷移する。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean delete() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// NTT電話帳ファイルリスト
		X31SDataBeanAccessArray nttTelFileList = bean.getDataBeanArray(CRW08101SFConst.NTT_TEL_FILE);

		// 削除ファイルリスト
		X31SDataBeanAccessArray deleteFileList = bean.getDataBeanArray(CRW08101SFConst.DEL_FILE);

		// 削除ファイルリストをクリア
		deleteFileList.clearArray();

		// 削除チェックファイル件数
		int delCount = 0;

		// NTT電話帳ファイルリストからチェックがついたものを取得し、削除チェックファイルリストに移送する。
		for (int i = 0; i < nttTelFileList.getCount(); i++)
		{
			X31SDataBeanAccess checkFileBean = nttTelFileList.getDataBean(i);

			boolean checked = checkFileBean.sendMessageBoolean(CRW08101SFConst.L0_SELECTED_BOOLEAN_01, X31CWebConst.DATABEAN_GET_VALUE);

			// チェックされている場合
			if (checked)
			{
				// 削除チェックファイルリストに要素を追加
				X31SDataBeanAccess deleteFileBean = deleteFileList.addDataBean();

				// 削除用対応履歴電子ファイル管理番号
				deleteFileBean.sendMessageString(CRW08101SFConst.L1_TORK_EFILE_KNRI_NO_02, X31CWebConst.DATABEAN_SET_VALUE,
						checkFileBean.sendMessageString(CRW08101SFConst.L0_TORK_EFILE_KNRI_NO_01, X31CWebConst.DATABEAN_GET_VALUE));

				// 削除用対応履歴文書ファイル名
				String fileNm = checkFileBean.sendMessageString(CRW08101SFConst.L0_TAIORRKI_BUNSHO_FILE_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
				deleteFileBean.sendMessageString(CRW08101SFConst.L1_TAIORRKI_BUNSHO_FILE_NM_02, X31CWebConst.DATABEAN_SET_VALUE, fileNm);

				// 削除用電子ファイル管理番号
				deleteFileBean.sendMessageString(CRW08101SFConst.L1_EFILE_KANRI_NO_02, X31CWebConst.DATABEAN_SET_VALUE,
						checkFileBean.sendMessageString(CRW08101SFConst.L0_EFILE_KANRI_NO_01, X31CWebConst.DATABEAN_GET_VALUE));

				// 削除用世代登録年月日時分秒
				deleteFileBean.sendMessageString(CRW08101SFConst.L1_GENE_ADD_DTM_02, X31CWebConst.DATABEAN_SET_VALUE,
						checkFileBean.sendMessageString(CRW08101SFConst.L0_GENE_ADD_DTM_01, X31CWebConst.DATABEAN_GET_VALUE));

				// 削除用更新年月日時分秒
				deleteFileBean.sendMessageString(CRW08101SFConst.L1_UPD_DTM_02, X31CWebConst.DATABEAN_SET_VALUE,
						checkFileBean.sendMessageString(CRW08101SFConst.L0_UPD_DTM_01, X31CWebConst.DATABEAN_GET_VALUE));

				// 行スタイルクラス
				deleteFileBean.sendMessageString(CRW08101SFConst.L1_LINE_STYLE_CLASS_02,
						X31CWebConst.DATABEAN_SET_VALUE, JCRWebCommon.getLineStyle(delCount + 1));
				// 行スタイルＩＤ
				deleteFileBean.sendMessageString(CRW08101SFConst.L1_LINE_STYLE_ID_02,
						X31CWebConst.DATABEAN_SET_VALUE, JCRWebCommon.getConstantValue("tr" + String.valueOf(delCount)));

				delCount++;
			}

		}

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		callDeleteService(JPCModelConstant.FUNC_CD_2);

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_ID_CRW08102);

		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_NAME_CRW08102);

		return true;
	}

	/**
	 * アップロード(NGワードファイル)ボタン押下処理。
	 * <br>
	 * 入力チェックを行い、エラーがない場合は、電子ファイル管理、対応履歴電子ファイル管理を登録する。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean uploadNgwordFl() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// (a)アップロードファイルの一時ファイルを作成
		ArrayList<HashMap<String, Object>> fileInfoArray = JCCWebCommon.getFileInfoArray(this);

		// 一時ファイルキー
		String fileKey = "";

		// (b)アップロードファイル情報編集
		editFileInfoArray(fileInfoArray, FILE_OBJ_NAME_NGWORD);

		if (fileInfoArray != null && fileInfoArray.size() > 0)
		{

			// アップロードファイル一時ファイルキーを取得
			fileKey = (String)fileInfoArray.get(0).get("fileKey");

			// (c)アップロードファイルの入力チェック
			if (!inputCheck(fileInfoArray))
			{
				// アップロードファイルの電子ファイル管理番号(一時ファイル番号)を元に、
				// アップロード一時ファイル削除部品(JCCWebCommon.deleteFile)を使用し、一時ファイルの削除を行う。
				JCRWebCommon.deleteFile(this, fileKey);

				// エラーの場合は、NTT電話帳アップロード画面に戻る
				// 遷移先画面IDを共有フォームBeanに設定
				commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
						JCRScreenConst.SCREEN_ID_CRW08101);

				// 遷移先画面名を共有フォームBeanに設定
				commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
						JCRScreenConst.SCREEN_NAME_CRW08101);
				return true;
			}

			// (d)チェック済みのファイル名と拡張子の間に"_NGword_" + ユーザーID + "_" + システム日付時分秒を追加する。
			String fileNm = fileInfoArray.get(0).get("fileName").toString();
			String loginUserId = commoninfoBean.sendMessageString(CommonInfoCFConst.USER_ID, X31CWebConst.DATABEAN_GET_VALUE);

			StringBuilder uploadFileNm = new StringBuilder();
			uploadFileNm.append(fileNm.substring(0, fileNm.length() - 4)).append(ADD_FILE_NAME_NGWORD)
				.append("_").append(loginUserId).append("_").append(JCRWebCommon.getSysDateTime()).append(".csv");

			// (e)取得した情報をBeanに格納する
			bean.sendMessageString(CRW08101SFConst.FILE_NM, X31CWebConst.DATABEAN_SET_VALUE, uploadFileNm.toString());
			bean.sendMessageString(CRW08101SFConst.BUNSHO_SBT_CD, X31CWebConst.DATABEAN_SET_VALUE, JCRStrConst.CD_DIV_BUNSHO_SBT_CD_NTT);

		}

		// (f)一時ファイル情報を元に、アップロード一時ファイル取得部品(JCCWebCommon.getFile)を使用し、一時ファイルをbyte配列で保持する。
		byte[] fileByte = JCRWebCommon.getFile(this, fileKey);

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		callUploadService(bean, commoninfoBean, fileByte, JPCModelConstant.FUNC_CD_1);

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_ID_CRW08101);

		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_NAME_CRW08101);

		// アップロードファイルの電子ファイル管理番号(一時ファイル番号)を元に、
		// アップロード一時ファイル削除部品(JCCWebCommon.deleteFile)を使用し、一時ファイルの削除を行う。
		JCRWebCommon.deleteFile(this, fileKey);

		return init();
	}

	/**
	 * アップロード(電話帳取込)ボタン押下処理。
	 * <br>
	 * 入力チェックを行い、エラーがない場合は、電子ファイル管理、対応履歴電子ファイル管理を登録する。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean uploadTelDir() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// (a)アップロードファイルの一時ファイルを作成
		ArrayList<HashMap<String, Object>> fileInfoArray = JCCWebCommon.getFileInfoArray(this);

		// 一時ファイルキー
		String fileKey = "";

		// (b)アップロードファイル情報編集
		editFileInfoArray(fileInfoArray, FILE_OBJ_NAME_TEL);

		if (fileInfoArray != null && fileInfoArray.size() > 0)
		{
			// アップロードファイル一時ファイルキーを取得
			fileKey = (String)fileInfoArray.get(0).get("fileKey");

			// (c)アップロードファイルの入力チェック
			if (!inputCheck(fileInfoArray))
			{
				// アップロードファイルの電子ファイル管理番号(一時ファイル番号)を元に、
				// アップロード一時ファイル削除部品(JCCWebCommon.deleteFile)を使用し、一時ファイルの削除を行う。
				JCRWebCommon.deleteFile(this, fileKey);

				// エラーの場合は、NTT電話帳アップロード画面に戻る
				// 遷移先画面IDを共有フォームBeanに設定
				commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
						JCRScreenConst.SCREEN_ID_CRW08101);

				// 遷移先画面名を共有フォームBeanに設定
				commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
						JCRScreenConst.SCREEN_NAME_CRW08101);
				return true;
			}

			// (d)チェック済みのファイル名と拡張子の間に"_TEL_" + ユーザーID + "_" + システム日付時分秒を追加する。
			String fileNm = fileInfoArray.get(0).get("fileName").toString();
			String loginUserId = commoninfoBean.sendMessageString(CommonInfoCFConst.USER_ID, X31CWebConst.DATABEAN_GET_VALUE);

			StringBuilder uploadFileNm = new StringBuilder();
			uploadFileNm.append(fileNm.substring(0, fileNm.length() - 4)).append(ADD_FILE_NAME_TEL)
				.append("_").append(loginUserId).append("_").append(JCRWebCommon.getSysDateTime()).append(".csv");

			// (e)取得した情報をBeanに格納する
			// beanにファイル名を設定
			bean.sendMessageString(CRW08101SFConst.FILE_NM, X31CWebConst.DATABEAN_SET_VALUE, uploadFileNm.toString());
			bean.sendMessageString(CRW08101SFConst.BUNSHO_SBT_CD, X31CWebConst.DATABEAN_SET_VALUE, JCRStrConst.CD_DIV_BUNSHO_SBT_CD_NTT_FUYOMACHI);

		}

		// (f)一時ファイル情報を元に、アップロード一時ファイル取得部品(JCCWebCommon.getFile)を使用し、一時ファイルをbyte配列で保持する。
		byte[] fileByte = JCRWebCommon.getFile(this, fileKey);

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		callUploadService(bean, commoninfoBean, fileByte, JPCModelConstant.FUNC_CD_1);

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_ID_CRW08101);

		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_NAME_CRW08101);

		// アップロードファイルの電子ファイル管理番号(一時ファイル番号)を元に、
		// アップロード一時ファイル削除部品(JCCWebCommon.deleteFile)を使用し、一時ファイルの削除を行う。
		JCRWebCommon.deleteFile(this, fileKey);

		return init();
	}

	/**
	 * 確定処理を行う。<br>
	 * <br>
	 * NTT電話帳ファイル削除処理を確定する。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean fix() throws Exception
	{

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		callDeleteService(JPCModelConstant.FUNC_CD_1);

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_ID_CRW08101);

		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_NAME_CRW08101);

		// NTT電話帳アップロード画面を初期化
		return init();
	}

	/**
	 * キャンセル処理を行う。<br>
	 * <br>
	 * NTT電話帳アップロード画面に戻る。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean cancel() throws Exception
	{
		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)遷移先画面の設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_ID_CRW08101);

		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_NAME_CRW08101);

		return true;
	}

	/**
	 * アップロードファイルチェック処理。
	 * <br>
	 * アップロードファイルのチェックを行う。
	 * 
	 * @param fileInfoArray アップロードファイル情報
	 * @return boolean
	 * @throws Exception Exception
	 */
	private boolean inputCheck(ArrayList<HashMap<String, Object>> fileInfoArray) throws Exception
	{
		// アップロードファイル情報
		HashMap<String, Object>fileInfoMap = fileInfoArray.get(0);

		// オブジェクト名
		String objName = (String)fileInfoMap.get("nameValue");

		// アップロードファイルチェック
		if (!JCRWebCommon.dispFileErrMsg(this, fileInfoArray, objName))
		{
			return false;
		}

		// ファイル名の長さチェック
		String fileNm = (String)fileInfoMap.get("fileName");
		String errCode = null;
		String[] replaceValue = null;

		if (fileNm.length() > FILE_MAX_LENGTH)
		{
			errCode = "EKB0030-TW";
			replaceValue = new String[] {"ファイル名（拡張子含む）の文字数", "", String.valueOf(FILE_MAX_LENGTH)};

			JCCWebCommon.setMessageInfo(this, errCode, replaceValue, objName);
			return false;
		}

		return true;
	}

	/**
	 * アップロードサービス呼出処理。
	 * <br>
	 * NTT電話帳アップロード（アップロード）サービスを呼び出し、対応履歴電子ファイル管理、電子ファイル管理の登録を実行する。
	 * 
	 * @param bean サービスフォームBean
	 * @param commoninfoBean 共有フォームBean
	 * @param fileByte 電子ファイル
	 * @param funcCd 機能コード
	 */
	private void callUploadService(X31SDataBeanAccess bean, X31SDataBeanAccess commoninfoBean, byte[] fileByte, String funcCd)
	{
		// ユースケースID格納用マップ
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// (1)サービス呼出処理
		// 電子ファイル登録のマッピング処理に必要なリストを生成する。
		// ファイルバイナリデータリスト
		ArrayList<byte[]> byteList = new  ArrayList<byte[]>();
		// ファイルコードリスト
		ArrayList<String> fileCodeList = new  ArrayList<String>();
		// ファイル削除年月日
		ArrayList<String> delYmdList = new  ArrayList<String>();

		// 電子ファイル管理サービスインターフェイスに引き渡す情報を設定する。
		// ファイルバイナリデータリスト
		byteList.add(fileByte);
		// ファイルコードリスト
		fileCodeList.add("0001");
		// ファイル削除年月日
		delYmdList.add("20991231");

		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean, commoninfoBean};

		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CRSV0143");

		// マッピングクラス
		CRSV0143_CRSV0143OPDBMapper mapper = new CRSV0143_CRSV0143OPDBMapper();
		mapper.setADDDELBUNSHOCTLCC(paramBean, dataMap, funcCd);

		HashMap<String, Object> attachMap = new HashMap<String, Object>();

		// 電子管理ファイル番号取得に必要な情報を電子ファイル管理サービスインターフェイスにマッピングする。
		JCRWebCommon.setDenshiFileService(dataMap, attachMap, "CR", fileCodeList, byteList, delYmdList, "1");

		// 文書種別コード
		String bunshoSbtCd = bean.sendMessageString(CRW08101SFConst.BUNSHO_SBT_CD, X31CWebConst.DATABEAN_GET_VALUE);

		// NGファイルアップロードの場合、削除処理を行う
		if (JCRStrConst.CD_DIV_BUNSHO_SBT_CD_NTT.equals(bunshoSbtCd))
		{
			// 最新電子ファイル管理番号
			String recentEfileNo = bean.sendMessageString(CRW08101SFConst.RECENT_EFILE_KANRI_NO, X31CWebConst.DATABEAN_GET_VALUE);
			if (!JCRUtilCommon.isNull(recentEfileNo))
			{
				// 電子ファイル削除のマッピング処理に必要なリストを生成する。
				ArrayList<HashMap<String, Object>> listDelEfileKanri = new  ArrayList<HashMap<String, Object>>();

				HashMap<String, Object> mapDelEfileKanri = new HashMap<String, Object>();

				// 電子ファイル管理番号
				mapDelEfileKanri.put("efile_kanri_no", JCRWebCommon.getReplaceNoString(this, recentEfileNo));
				// 世代登録年月日時分秒
				mapDelEfileKanri.put("gene_add_dtm_bf", bean.sendMessageString(
						CRW08101SFConst.RECENT_GENE_ADD_DTM, X31CWebConst.DATABEAN_GET_VALUE));
				// 更新前更新年月日時分秒
				mapDelEfileKanri.put("upd_dtm_bf", bean.sendMessageString(
						CRW08101SFConst.RECENT_UPD_DTM, X31CWebConst.DATABEAN_GET_VALUE));

				listDelEfileKanri.add(mapDelEfileKanri);

				((HashMap)dataMap.get("ADDDELBUNSHOCTLCC")).put("DEL_EFILE_KANRI_List", listDelEfileKanri);
			}

		}

		// サービス実行
		invokeService(paramMap, dataMap, outputMap, attachMap);
	}

	/**
	 * 削除サービス呼出処理。
	 * <br>
	 * NTT電話帳NGワード付与待データ削除サービスを呼び出し、対応履歴電子ファイル管理、電子ファイル管理の削除を実行する。
	 * 
	 * @param funcCd 機能コード
	 */
	private void callDeleteService(String funcCd)
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 電子ファイル削除のマッピング処理に必要なリストを生成する。
		ArrayList<HashMap<String, Object>> listDelEfileKanri = new  ArrayList<HashMap<String, Object>>(); 

		// (a) 電子ファイル削除用のリストの生成を行う。
		X31SDataBeanAccessArray delfileList = bean.getDataBeanArray(CRW08101SFConst.DEL_FILE);

		// (b) 電子ファイル管理サービスインターフェイスに引き渡す情報を設定する。
		for (int i = 0; i < delfileList.getCount(); i++)
		{
			X31SDataBeanAccess bunshoBean = delfileList.getDataBean(i);

			HashMap<String, Object> mapDelEfileKanri = new HashMap<String, Object>();

			// 電子ファイル管理番号
			mapDelEfileKanri.put("efile_kanri_no", JCRWebCommon.getReplaceNoString(this, bunshoBean.sendMessageString(
					CRW08101SFConst.L1_EFILE_KANRI_NO_02, X31CWebConst.DATABEAN_GET_VALUE)));
			// 世代登録年月日時分秒
			mapDelEfileKanri.put("gene_add_dtm_bf", bunshoBean.sendMessageString(
					CRW08101SFConst.L1_GENE_ADD_DTM_02, X31CWebConst.DATABEAN_GET_VALUE));
			// 更新前更新年月日時分秒
			mapDelEfileKanri.put("upd_dtm_bf", bunshoBean.sendMessageString(
					CRW08101SFConst.L1_UPD_DTM_02, X31CWebConst.DATABEAN_GET_VALUE));

			listDelEfileKanri.add(mapDelEfileKanri);
		}

		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean};

		// ユースケースID格納用マップ
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CRSV0144");

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// マッピングクラス
		CRSV0144_CRSV0144OPDBMapper mapper = new CRSV0144_CRSV0144OPDBMapper();
		mapper.setADDDELBUNSHOCTLCC(paramBean, dataMap, funcCd);

		((HashMap)dataMap.get("ADDDELBUNSHOCTLCC")).put("DEL_EFILE_KANRI_List", listDelEfileKanri);

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// サービス実行
		invokeService(paramMap, dataMap, outputMap);

	}

	/**
	 * アップロードファイル情報の編集を行う。
	 * <br>
	 * アップロードファイル情報リストを読みこみ、ファイルオブジェクト名が引数のファイルオブジェクト名と異なる場合、
	 * アップロードファイル情報リストからレコードを削除する。
	 * 
	 * @param fileInfoArray アップロードファイル情報
	 * @param fileObjName アップロードファイルオブジェクト名称
	 */
	private void editFileInfoArray(ArrayList<HashMap<String, Object>> fileInfoArray, String fileObjName)
	{
		if (fileInfoArray != null && fileInfoArray.size() > 0)
		{
			int startIndex = fileInfoArray.size() - 1;
			for (int i = startIndex; i >= 0; i--)
			{
				String objName = fileInfoArray.get(i).get("nameValue").toString();

				if (!fileObjName.equals(objName))
				{
					fileInfoArray.remove(i);
				}
			}
		}
	}

	/**
	 * サービスフォームBeanのクリアを行う。<br>
	 * <br>
	 * サービスフォームBeanの引継ぎ項目以外の値をクリアします。
	 * 引継ぎ項目：なし
	 * 
	 */
	private void clearBean()
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// サービスフォームBeanの項目をクリアする。
		bean.sendMessage(CRW08101SFConst.NGWORD_UPLOAD_DATE, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW08101SFConst.NGWORD_FILE_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW08101SFConst.RECENT_TORK_EFILE_KNRI_NO, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW08101SFConst.RECENT_TAIORRKI_BUNSHO_FILE_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW08101SFConst.RECENT_EFILE_KANRI_NO, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW08101SFConst.RECENT_GENE_ADD_DTM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW08101SFConst.RECENT_UPD_DTM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW08101SFConst.TEL_FILE_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.getDataBeanArray(CRW08101SFConst.NTT_TEL_FILE).clearArray();
		bean.getDataBeanArray(CRW08101SFConst.DEL_FILE).clearArray();
		bean.sendMessage(CRW08101SFConst.LINE_NO, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW08101SFConst.ALL_WKGRP_SELECT_FLG, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW08101SFConst.BUNSHO_SBT_CD, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW08101SFConst.FILE_NM, X31CWebConst.DATABEAN_CLEAR);

	}

}
