/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom, 2011
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：JKKTelnoStatJudgeMapperCC
 *   ソースファイル名：JKKTelnoStatJudgeMapperCC.java
 *   作成者          ：富士通
 *   日付            ：2024年01月25日
 *＜機能概要＞
 *   電話番号状態判定マッパーCCクラスです。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v72.00.00   2024/01/25   FJ)寺田     新規作成 【ANK-4494-00-00】双方向番ポ STEP1
 *   
 **********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.HashMap;

import com.fujitsu.futurity.bp.custom.constant.JKKSvcConst;
import com.fujitsu.futurity.bp.custom.constant.JKKTelnoStatJudgeConstCC;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadOnly;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.model.base.CAANMsg;

import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.*;

/**
 * 電話番号情報登録用マッパーCCです。
 * <p>
 * <br>
 * 
 * @author FJ)寺田
 */
public class JKKTelnoStatJudgeMapperCC extends AbstractCommonComponent {

	/*******************************************************************/
	/** テンプレートＩＤ（ZM） **/
	/*******************************************************************/

	/** テンプレートＩＤ：電話番号一意照会 */
	private static final String TEMPLATE_ID_EZM0121A010 = "EZM0121A010";

	/*******************************************************************/
	/** テンプレートＩＤ（KK） **/
	/*******************************************************************/

	/** テンプレートＩＤ：サービス契約内訳＜eo光電話＞一意照会（電話番号） */
	private static final String TEMPLATE_ID_EKK0191B040 = "EKK0191B040";

	/*******************************************************************/
	/** テンプレートＩＤ（TU） **/
	/*******************************************************************/

	/** テンプレートＩＤ：通信事業者一覧照会 */
	private static final String TEMPLATE_ID_ETU0051B010 = "ETU0051B010";

	/*******************************************************************/
	/** テンプレートＩＤ（ZM） **/
	/*******************************************************************/

	/** テンプレートＩＤ：ENUM切替履歴一意照会 */
	private static final String TEMPLATE_ID_EZM0541A010 = "EZM0541A010";

	
	/**
	 * EZM0121A010_電話番号一意照会 サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする
	 * 
	 * @param param リクエストパラメータ
	 * @param telno 電話番号
	 * @return S/I上り情報
	 * @throws RequestParameterException
	 */
	public HashMap<String, Object> editInMsgEZM0121A010(IRequestParameterReadWrite param, String telno) throws RequestParameterException {
		CAANMsg template = new CAANMsg(EZM0121A010CBSMsg.class.getName());

		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EZM0121A010CBSMsg().getContents());

		// 共通部を設定
		editInMsgBasicCmn(param, template);

		// テンプレートID(SIFのID)
		template.set(EZM0121A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EZM0121A010);

		// 機能コード
		template.set(EZM0121A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		// ＫＥＹ＿電話番号
		template.set(EZM0121A010CBSMsg.KEY_TELNO, convBlankToNull(telno));

		// 上り情報を生成
		return editInMsgCmn(param, template);
	}

	/**
	 * EKK0191B040_サービス契約内訳＜eo光電話＞一意照会（電話番号）
	 * サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする
	 * 
	 * @param param リクエストパラメータ
	 * @return S/I上り情報
	 * @throws RequestParameterException
	 */
	public HashMap<String, Object> editInMsgEKK0191B040(IRequestParameterReadWrite param, String telno) throws RequestParameterException {
		CAANMsg template = new CAANMsg(EKK0191B040CBSMsg.class.getName());

		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK0191B040CBSMsg().getContents());

		// 共通部を設定
		editInMsgBasicCmn(param, template);

		// テンプレートID(SIFのID)
		template.set(EKK0191B040CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0191B040);

		// 機能コード
		template.set(EKK0191B040CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		// 検索処理パターン
		template.set(EKK0191B040CBSMsg.SEARCH_TYPE, convBlankToNull(JPCModelConstant.SAERCH_TYPE_IKT));
		// 最大検索件数
		template.set(EKK0191B040CBSMsg.MAX_SEARCH_NUM, convBlankToNull("1000000"));

		// ＫＥＹ＿電話番号
		template.set(EKK0191B040CBSMsg.KEY_TELNO, convBlankToNull(telno));

		// 上り情報を生成
		return editInMsgCmn(param, template);
	}

	/**
	 * EZM0541A010_ENUM切替履歴一意照会
	 * サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする
	 * 
	 * @param param リクエストパラメータ
	 * @return S/I上り情報
	 * @throws RequestParameterException
	 */
	public HashMap<String, Object> editInMsgEZM0541A010(IRequestParameterReadWrite param, String telno) throws RequestParameterException {
		CAANMsg template = new CAANMsg(EZM0541A010CBSMsg.class.getName());

		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EZM0541A010CBSMsg().getContents());

		// 共通部を設定
		editInMsgBasicCmn(param, template);

		// テンプレートID(SIFのID)
		template.set(EZM0541A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EZM0541A010);

		// 機能コード
		template.set(EZM0541A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2);

		// 検索処理パターン
		template.set(EZM0541A010CBSMsg.SEARCH_TYPE, convBlankToNull(JPCModelConstant.SAERCH_TYPE_IKT));
		// 最大検索件数
		template.set(EZM0541A010CBSMsg.MAX_SEARCH_NUM, convBlankToNull("1000000"));

		// ＫＥＹ＿電話番号
		template.set(EZM0541A010CBSMsg.KEY_TELNO, convBlankToNull(telno));

		// 上り情報を生成
		return editInMsgCmn(param, template);
	}

	/**
	 * サービスI/F実行用の上り情報を生成する
	 * 
	 * @param param リクエストパラメータ
	 * @param template 条件の設定先
	 * @return S/I上り情報
	 * @throws RequestParameterException
	 * @exception RequestParameterException
	 */
	public HashMap<String, Object> editInMsgCmn(IRequestParameterReadOnly param, CAANMsg template) throws RequestParameterException {
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		/* SCインプット共通データ */
		// **********************************************
		// 【取得元：電文ヘッダ(ヘッダ)】
		// **********************************************
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());

		// **********************************************
		// 【取得元：ユーザエリア(コントロールマップ)】
		// **********************************************
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;

	}

	/*
	 * ------------------------------------------------------------
	 * 共通で使用するUtil系のメソッド ↓↓↓↓↓
	 * ------------------------------------------------------------
	 */

	/**
	 * 条件部の共通する項目の設定する
	 * 
	 * @param param リクエストパラメータ
	 * @param template template 条件の設定先
	 * @throws RequestParameterException
	 */
	public void editInMsgBasicCmn(IRequestParameterReadOnly param, CAANMsg template) throws RequestParameterException {

		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);
		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);
		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);

	}

	/**
	 * 持ちうるフィールドにNullマッピングで埋める
	 * 
	 * @param msg 対象クラス
	 * @param contents 対応クラスのフィールド列挙
	 */
	public void fillCAANMSGNullMapping(CAANMsg msg, Object[][] contents) {
		// 要素ごとのループ
		for (int i = 0; i < contents.length; i++) {
			Object element = null;
			// キーに該当する箇所の取得
			element = contents[i][0];
			// Nullでマッピング
			msg.setNull((String) element);
		}
	}

	/**
	 * 文字列が空文字ならnullに変換する
	 * 
	 * @param value 判定する文字列
	 * @return 変換後文字列
	 */
	public String convBlankToNull(String value) {
		return JKKSvcConst.STRING_BLANK.equals(value) ? null : value;
	}

}
