/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUNinshoIdPwdSonzaiChkCC
*   ソースファイル名：JFUNinshoIdPwdSonzaiChkCC.java
*   作成者          ：富士通
*   日付            ：2012年1月10日
*＜機能概要＞
*   認証ＩＤパスワード存在確認コモンコンポーネント部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/01/10   FJ）栗山    新規作成
*  v28.00.00    2017/02/20   FJ) 森脇    【OM-2017-0000160】「認証ＩＤパスワード認証一覧照会」機能コードを"1"に変更
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

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 com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;

import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EKK0171A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0171A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0171B002CBSMsg;

/**
 * 認証ＩＤパスワード存在確認コモンコンポーネント部品
 * 
 * <br>
 * @author 富士通
 */
public class JFUNinshoIdPwdSonzaiChkCC extends JFUBaseNetChgCommonCC
{

	/** IN項目:ＫＥＹ＿サービス契約内訳番号 */
	private static final String IN_PARAM_KEY_SVC_KEI_UCWK_NO = "key_svc_kei_ucwk_no";
	/** IN項目:ＫＥＹ＿世代登録年月日時分秒（サービス契約内訳＜eo光ネット＞） */
	private static final String IN_PARAM_KEY_GENE_ADD_DTM_SVC_KEI_UCWK_EOHNT = "key_gene_add_dtm";

	/** IN項目:ＫＥＹ＿ＳＹＳＩＤ */
	private static final String IN_PARAM_KEY_SYSID = "key_sysid";
	/** IN項目:ＫＥＹ＿ＩＳＰ認証ＩＤ */
	private static final String IN_PARAM_KEY_ISP_NINSHO_ID = "key_isp_ninsho_id";
	/** IN項目:ＫＥＹ＿ＩＳＰ認証ＩＤパスワード */
	private static final String IN_PARAM_KEY_ISP_NINSHO_ID_PWD = "key_isp_ninsho_id_pwd";

	/* ■□ サービス契約内訳<eo光ネット>一意照会SC ■□ */
	/** サービス契約内訳<eo光ネット>一意照会 テンプレートID*/
	private static final String TEMPLATE_ID_EKK0171A010 = "EKK0171A010";
	/** テンプレートID(サービス契約内訳<eo光ネット>一意照会明細) */
	private static final String TEMPLATE_ID_EKK0171A010_DETAIL = EKK0171A010CBSMsg.EKK0171A010CBSMSG1LIST;
	/** IN項目リスト(サービス契約内訳<eo光ネット>一意照会) */
	private static final List<String> IN_COLUMN_LIST_EKK0171A010 =
			Arrays.asList(EKK0171A010CBSMsg.KEY_SVC_KEI_UCWK_NO, EKK0171A010CBSMsg.KEY_GENE_ADD_DTM);
	/** 関連チェックエラー項目(サービス契約内訳<eo光ネット>一意照会) */
	private static final String ERROR_COLUMN_EKK0171A010 = EKK0171A010CBSMsg.KEY_SVC_KEI_UCWK_NO_ERR;
	/** SC実行結果取得キー(サービス契約内訳<eo光ネット>一意照会) */
	private static final String TEMP_TEMPLATE_KEY_EKK0171A010 =
			TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_EKK0171A010 + TEMP_TEMPLATE_PRIFIX_SEP + "1";

	/* ■□ 認証ＩＤパスワード認証一覧照会SC ■□ */
	/** 認証ＩＤパスワード認証一覧照会 テンプレートID*/
	private static final String TEMPLATE_ID_EKK0171B002 = "EKK0171B002";
	/** テンプレートID(認証ＩＤパスワード認証一覧照会明細) */
	private static final String TEMPLATE_ID_EKK0171B002_DETAIL = EKK0171B002CBSMsg.EKK0171B002CBSMSG1LIST;
	/** IN項目リスト(認証ＩＤパスワード認証一覧照会) */
	private static final List<String> IN_COLUMN_LIST_EKK0171B002 =
			Arrays.asList(EKK0171B002CBSMsg.KEY_SYSID, EKK0171B002CBSMsg.KEY_ISP_NINSHO_ID, EKK0171B002CBSMsg.KEY_ISP_NINSHO_ID_PWD);
	/** 関連チェックエラー項目(認証ＩＤパスワード認証一覧照会) */
	private static final String ERROR_COLUMN_EKK0171B002 = EKK0171B002CBSMsg.KEY_ISP_NINSHO_ID_PWD_ERR;

	/**
	 * 認証ID及び認証IDパスワードの存在チェック処理です。<br>
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception 例外
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite getResultData(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
			throws Exception
	{

		// ユーザデータ取得
		HashMap<String, Object> dataMap = (HashMap<String, Object>)param.getData(fixedText);
		dataMap.remove(TEMPLATE_ID_EKK0171A010_DETAIL);

		// IN項目:サービス契約内訳番号
		String inMapSvcKeiUcwkNo = (String)dataMap.get(IN_PARAM_KEY_SVC_KEI_UCWK_NO);
		// IN項目:世代登録年月日時分秒（サービス契約内訳＜eo光ネット＞）
		String inMapGeneAddDtm = (String)dataMap.get(IN_PARAM_KEY_GENE_ADD_DTM_SVC_KEI_UCWK_EOHNT);

		// IN項目:ＫＥＹ＿ＳＹＳＩＤ
		String inMapSysid = (String)dataMap.get(IN_PARAM_KEY_SYSID);
		// IN項目:ＫＥＹ＿ＩＳＰ認証ＩＤ
		String inMapIspNinshoId = (String)dataMap.get(IN_PARAM_KEY_ISP_NINSHO_ID);
		// IN項目:ＫＥＹ＿ＩＳＰ認証ＩＤパスワード
		String inMapIspNinshoIdPwd = (String)dataMap.get(IN_PARAM_KEY_ISP_NINSHO_ID_PWD);

		// ●サービス契約内訳<eo光ネット>一意照会 サービスIF実行
		// 上りマッピング
		setInMapEKK0171A010Search(param, fixedText, inMapSvcKeiUcwkNo, "");
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMPLATE_ID_EKK0171A010, TEMPLATE_ID_EKK0171A010_DETAIL, IN_COLUMN_LIST_EKK0171A010,
				ERROR_COLUMN_EKK0171A010);

		// 一覧
		List<HashMap> resultListEKK0171A010 = getTemplateList(dataMap, TEMP_TEMPLATE_KEY_EKK0171A010, TEMPLATE_ID_EKK0171A010_DETAIL);

		for (HashMap resultMap : resultListEKK0171A010)
		{
			// 世代登録年月日時分秒
			String geneAddDtm = (String)resultMap.get(EKK0171A010CBSMsg1List.GENE_ADD_DTM);

			// 引数とサービスIF返り値の世代登録年月日が一致しない場合
			if (!inMapGeneAddDtm.equals(geneAddDtm))
			{
				// 存在エラー
				setRelationErrorInfo(param, TEMPLATE_ID_EKK0171A010, ERROR_COLUMN_EKK0171A010, fixedText);
				throw new SCCallException(String.valueOf(param.getControlMapData(SCControlMapKeys.RETURN_MESSAGE)), String
						.valueOf(RETURN_CODE_NORMAL), JPCModelConstant.RELATION_ERR);
			}
		}

		// ●認証ＩＤパスワード認証一覧照会SC サービスIF実行
		// 上りマッピング
		setInMapEKK0171B002Search(param, fixedText, inMapSysid, inMapIspNinshoId, inMapIspNinshoIdPwd);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMPLATE_ID_EKK0171B002, TEMPLATE_ID_EKK0171B002_DETAIL, IN_COLUMN_LIST_EKK0171B002,
				ERROR_COLUMN_EKK0171B002);

		return param;
	}

	/**
	 * 上りマッピングの項目設定(サービス契約内訳<eo光ネット>一意照会)です。
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiUcwkNo サービス契約内訳番号
	 * @param geneAddDtm 世代登録年月日時分秒
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0171A010Search(IRequestParameterReadWrite param, String fixedText, String svcKeiUcwkNo, String geneAddDtm)
			throws RequestParameterException
	{
		// 機能コード設定(2:カレントレコードの照会を行う)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_2);

		// ユーザデータ取得
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);

		// サービス契約内訳番号
		inMap.put(EKK0171A010CBSMsg.KEY_SVC_KEI_UCWK_NO, svcKeiUcwkNo);

	}

	/**
	 * 上りマッピングの項目設定(認証ＩＤパスワード認証一覧照会)です。
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param sysid ＳＹＳＩＤ
	 * @param ispNinshoId ＩＳＰ認証ＩＤ
	 * @param ispNinshoIdPwd ＩＳＰ認証ＩＤパスワード
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0171B002Search(IRequestParameterReadWrite param, String fixedText, String sysid, String ispNinshoId,
			String ispNinshoIdPwd) throws RequestParameterException
	{
		// 機能コード設定(1:PK指定でレコードの照会を行う)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ユーザデータ取得
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);

		// ＳＹＳＩＤ
		inMap.put(EKK0171B002CBSMsg.KEY_SYSID, sysid);

		// ＩＳＰ認証ＩＤ
		inMap.put(EKK0171B002CBSMsg.KEY_ISP_NINSHO_ID, ispNinshoId);

		// ＩＳＰ認証ＩＤパスワード
		inMap.put(EKK0171B002CBSMsg.KEY_ISP_NINSHO_ID_PWD, ispNinshoIdPwd);

	}

}
