/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUMladInfoShokaiCC
*   ソースファイル名：JFUMladInfoShokaiCC.java
*   作成者          ：富士通
*   日付            ：2014年03月05日
*＜機能概要＞
*   メールアドレス情報照会コモンコンポーネント部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v7.00       2014/03/05   FJ）谷本    新規作成【OM-2014-0000779】性能障害対応
*   
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EKK0081B506CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351B503CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0361B004CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0361B004CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0401B501CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0491B504CBSMsg;

/**
 * メールアドレス情報照会コモンコンポーネント部品
 * 
 * <br>
 * @author 富士通
 */
@SuppressWarnings("unchecked")
public class JFUMladInfoShokaiCC extends JFUBaseNetChgCommonCC
{
	/** FUSV011201SC：メールアドレス自動設定ツール連携契約情報取得一覧照会SC */
	private static final String USECASE_ID_FUSV011201SC = "FUSV011201SC";

	/** IN項目:POPID */
	private static final String IN_PARAM_POP_ID = "pop_id";

	/* ■□ 現サービス契約情報一覧照会(ネット)SC ■□ */
	/** テンプレートID(現オプションサービス契約情報一覧照会(ネット)) */
	private static final String TEMPLATE_ID_3 = "EKK0081B506";
	/** テンプレートID(現オプションサービス契約情報一覧照会(ネット)明細) */
	private static final String TEMPLATE_ID_3_DETAIL = EKK0081B506CBSMsg.EKK0081B506CBSMSG1LIST;
	/** IN項目リスト(現オプションサービス契約情報一覧照会(ネット)) */
	private static final List<String> IN_COLUMN_LIST_3 = Arrays.asList(EKK0081B506CBSMsg.KEY_SVC_KEI_NO);
	/** 関連チェックエラー項目(現オプションサービス契約情報一覧照会(ネット)) */
	private static final String ERROR_COLUMN_3 = EKK0081B506CBSMsg.KEY_SVC_KEI_NO_ERR;

	/* ■□ 現請求契約一覧照会SC ■□ */
	/** テンプレートID(現オプションサービス契約情報一覧照会(ネット)) */
	private static final String TEMPLATE_ID_4 = "EKK0491B504";
	/** テンプレートID(現オプションサービス契約情報一覧照会(ネット)明細) */
	private static final String TEMPLATE_ID_4_DETAIL = EKK0491B504CBSMsg.EKK0491B504CBSMSG1LIST;
	/** IN項目リスト(現オプションサービス契約情報一覧照会(ネット)) */
	private static final List<String> IN_COLUMN_LIST_4 = Arrays.asList(EKK0491B504CBSMsg.KEY_SVC_KEI_NO);
	/** 関連チェックエラー項目(現オプションサービス契約情報一覧照会(ネット)) */
	private static final String ERROR_COLUMN_4 = EKK0491B504CBSMsg.KEY_SVC_KEI_NO_ERR;

	/* ■□ 現オプションサービス契約情報一覧照会(ネット)SC ■□ */
	/** テンプレートID(現オプションサービス契約情報一覧照会(ネット)) */
	private static final String TEMPLATE_ID_1 = "EKK0351B503";
	/** テンプレートID(現オプションサービス契約情報一覧照会(ネット)明細) */
	private static final String TEMPLATE_ID_1_DETAIL = EKK0351B503CBSMsg.EKK0351B503CBSMSG1LIST;
	/** IN項目リスト(現オプションサービス契約情報一覧照会(ネット)) */
	private static final List<String> IN_COLUMN_LIST_1 =
			Arrays.asList(EKK0351B503CBSMsg.KEY_SYSID, EKK0351B503CBSMsg.KEY_SVC_KEI_NO, EKK0351B503CBSMsg.KEY_WEB_ID, EKK0351B503CBSMsg.KEY_POP_ID);
	/** 関連チェックエラー項目(現オプションサービス契約情報一覧照会(ネット)) */
	private static final String ERROR_COLUMN_1 = EKK0351B503CBSMsg.KEY_SVC_KEI_NO_ERR;

	/* ■□ 現サブオプションサービス契約情報一覧照会(ネット)SC ■□ */
	/** テンプレートID(現オプションサービス契約情報一覧照会(ネット)) */
	private static final String TEMPLATE_ID_2 = "EKK0401B501";
	/** テンプレートID(現オプションサービス契約情報一覧照会(ネット)明細) */
	private static final String TEMPLATE_ID_2_DETAIL = EKK0401B501CBSMsg.EKK0401B501CBSMSG1LIST;
	/** IN項目リスト(現オプションサービス契約情報一覧照会(ネット)) */
	private static final List<String> IN_COLUMN_LIST_2 = Arrays.asList(EKK0401B501CBSMsg.KEY_SVC_KEI_NO);
	/** 関連チェックエラー項目(現オプションサービス契約情報一覧照会(ネット)) */
	private static final String ERROR_COLUMN_2 = EKK0401B501CBSMsg.KEY_SVC_KEI_NO_ERR;

	/**
	 * メールアドレス情報取得処理
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Throwable 
	 */
	public IRequestParameterReadWrite getMladInfo(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		try
		{
			// ユーザデータ取得
			HashMap inMap = (HashMap)param.getData(fixedText);
			// POPID
			String popId = (String)inMap.get(IN_PARAM_POP_ID);

			// ユーザデータ取得(メールアドレス自動設定ツール連携契約情報取得一覧照会SC)
			HashMap inMap2 = (HashMap)param.getData(USECASE_ID_FUSV011201SC);
			ArrayList list = (ArrayList)inMap2.get(EKK0361B004CBSMsg.EKK0361B004CBSMSG1LIST);

			if (null != list && !list.isEmpty())
			{
				HashMap childMap = (HashMap)list.get(JFUStrConst.I_ZERO);

				// サービス契約番号
				String svcKeiNo = (String)childMap.get(EKK0361B004CBSMsg1List.SVC_KEI_NO);
				// SYSID
				String sysid = (String)childMap.get(EKK0361B004CBSMsg1List.SYSID);

				// サービス契約番号、または、SYSIDが取得できない場合は処理無し
				if (JFUBPCommon.isNull(svcKeiNo) || JFUBPCommon.isNull(sysid))
				{
					return param;
				}

				// ●現サービス契約情報一覧照会(ネット)
				// ユーザデータ初期化
				initData(param, fixedText, IN_COLUMN_LIST_3);
				// 検索エラーなし
				ignoreSearchError(param, fixedText);
				// 上りマッピング
				setInMapSvcKeiSearch(param, fixedText, svcKeiNo);
				// サービスIF実行
				executeSC(handle, param, fixedText, TEMPLATE_ID_3, TEMPLATE_ID_3_DETAIL, IN_COLUMN_LIST_3, ERROR_COLUMN_3);

				// ●現請求契約一覧照会
				// ユーザデータ初期化
				initData(param, fixedText, IN_COLUMN_LIST_4);
				// 検索エラーなし
				ignoreSearchError(param, fixedText);
				// 上りマッピング
				setInMapSeikyKeiSearch(param, fixedText, svcKeiNo);
				// サービスIF実行
				executeSC(handle, param, fixedText, TEMPLATE_ID_4, TEMPLATE_ID_4_DETAIL, IN_COLUMN_LIST_4, ERROR_COLUMN_4);

				// ●現オプションサービス契約情報一覧照会(ネット)
				// ユーザデータ初期化
				initData(param, fixedText, IN_COLUMN_LIST_1);
				// 検索エラーなし
				ignoreSearchError(param, fixedText);
				// 上りマッピング
				setInMapOpSvcKeiSearch(param, fixedText, sysid, svcKeiNo, popId);
				// サービスIF実行
				executeSC(handle, param, fixedText, TEMPLATE_ID_1, TEMPLATE_ID_1_DETAIL, IN_COLUMN_LIST_1, ERROR_COLUMN_1);

				// ●現サブオプションサービス契約情報一覧照会(ネット)
				// ユーザデータ初期化
				initData(param, fixedText, IN_COLUMN_LIST_2);
				// 検索エラーなし
				ignoreSearchError(param, fixedText);
				// 上りマッピング
				setInMapSbopSvcKeiSearch(param, fixedText, svcKeiNo);
				// サービスIF実行
				executeSC(handle, param, fixedText, TEMPLATE_ID_2, TEMPLATE_ID_2_DETAIL, IN_COLUMN_LIST_2, ERROR_COLUMN_2);
			}
		}
		finally
		{
			this.deleteTempArea(param, fixedText);
		}
		return param;
	}

	/**
	 * 上りマッピング項目設定(現サービス契約情報一覧照会(ネット))
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNo サービス契約番号
	 * @throws RequestParameterException
	 */
	private void setInMapSvcKeiSearch(IRequestParameterReadWrite param, String fixedText, String svcKeiNo) throws RequestParameterException
	{
		// 機能コード設定(1)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ＫＥＹ＿サービス契約番号
		inMap.put(EKK0081B506CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
	}

	/**
	 * 上りマッピング項目設定(現請求契約一覧照会)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNo サービス契約番号
	 * @throws RequestParameterException
	 */
	private void setInMapSeikyKeiSearch(IRequestParameterReadWrite param, String fixedText, String svcKeiNo) throws RequestParameterException
	{
		// 機能コード設定(1)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ＫＥＹ＿サービス契約番号
		inMap.put(EKK0491B504CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
	}

	/**
	 * 上りマッピング項目設定(現オプションサービス契約情報一覧照会(ネット))
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param sysid SYSID
	 * @param svcKeiNo サービス契約番号
	 * @param popId POPID
	 * @throws RequestParameterException
	 */
	private void setInMapOpSvcKeiSearch(IRequestParameterReadWrite param, String fixedText, String sysid, String svcKeiNo, String popId)
			throws RequestParameterException
	{
		// 機能コード設定(4)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_4);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ＫＥＹ＿サービス契約番号
		inMap.put(EKK0351B503CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
		// ＫＥＹ＿ＳＹＳＩＤ
		inMap.put(EKK0351B503CBSMsg.KEY_SYSID, sysid);
		// ＫＥＹ＿ＰＯＰＩＤ
		inMap.put(EKK0351B503CBSMsg.KEY_POP_ID, popId);
	}

	/**
	 * 上りマッピング項目設定(現サブオプションサービス契約情報一覧照会(ネット))
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNo サービス契約番号
	 * @throws RequestParameterException
	 */
	private void setInMapSbopSvcKeiSearch(IRequestParameterReadWrite param, String fixedText, String svcKeiNo) throws RequestParameterException
	{
		// 機能コード設定(1)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ＫＥＹ＿サービス契約番号
		inMap.put(EKK0401B501CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
	}
}
