/*********************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JECKA9010004TPMA
*   ソースファイル名：JECKA9010004TPMA.java
*   作成者          ：EK963573
*   日付            ：2022年09月28日
*＜機能概要＞
*   認証器照会照会依頼独自処理部品クラス.
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*	v60.00.00	2022/09/28	FJ)北村		新規作成【ANK-4236-02-00】【eo】生体認証パスワードレス認証導入対応(仕変2)
*
**********************************************************************/

package eo.ejb.cbs.mainproc;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;
import com.fujitsu.futurity.model.ejb.common.fw.TemplateMainHandler;

import eo.ejb.cbs.cbsmsg.ECKA9010004CBSMsg;
import eo.ejb.cbs.cbsmsg.ECKA9010004CBSMsg1List;
import eo.ejb.common.JCKLcsRenkeiUtil;


/**
 * <p>
 * 認証器照会照会依頼独自処理部品クラスです。
 * </p>
 * @author 富士通
 */
public class JECKA9010004TPMA implements TemplateMainHandler
{
	public static String PGID = "JECKA9010004TPMA";

	/**
	 * コンストラクタ.
	 */
	public JECKA9010004TPMA()
	{
		super();
	}

	/**
	 * 認証器照会照会依頼独自処理部品です。
	 * @param inCBSMsg CAANメッセージ
	 * @param inContext コンテキスト
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	public void invoke(CAANMsg inCBSMsg, AgentDispatchContext inContext) throws Exception
	{
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "JECKA9010004TPMA#invoke start");
		
		Map<String, Object> retMap = new HashMap<String, Object>();
		
		// パラメータチェックがOKの時のみ連携を実行
		if (inCBSMsg != null)
		{
			// パラメータから体系内主キーを取得する
			String org_primary_key = inCBSMsg.getString(ECKA9010004CBSMsg.ORG_PRIMARY_KEY);
			
			try
			{
				// iDAのWebAPIへの認証器照会依頼
				retMap = JCKLcsRenkeiUtil.requestiDAWebApiGetAuthenticator(org_primary_key);
			}
			catch (Exception e)
			{
				printErrorLog(e, "IDA認証器照会でエラー発生", org_primary_key);
			}
		}
		
		// iDAからの照会結果が取得できた場合
		if (retMap != null)
		{
			CAANMsg[] ecka9010004list = new CAANMsg[1];
			
			CAANMsg msg = new CAANMsg("eo.ejb.cbs.cbsmsg.ECKA9010004CBSMsg1List");
			
			// 登録フラグ
			msg.set(ECKA9010004CBSMsg1List.REGIST_FLG, (String)retMap.get(ECKA9010004CBSMsg1List.REGIST_FLG));
			
			ecka9010004list[0] = msg;
			
			inCBSMsg.set(ECKA9010004CBSMsg.ECKA9010004CBSMSG1LIST, ecka9010004list);
		}
		// iDAからの照会結果が取得できなかった場合
		else
		{
			// 空のリストを返却する
			inCBSMsg.set(ECKA9010004CBSMsg.ECKA9010004CBSMSG1LIST, new ArrayList<Hashtable<String, Object>>());
		}
		
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "JECKA9010004TPMA#invoke end");
	}

	/**
	 * エラーログ出力
	 * @param e 発生した例外
	 * @param errTitle エラータイトル
	 * @param org_primary_key 体内系主キー
	 */
	private void printErrorLog(Exception e, String errTitle, String org_primary_key)
	{
		StringBuffer sb = new StringBuffer();
		sb.append(e.getMessage()+ "\n");
		StackTraceElement[] steAll = e.getStackTrace();
		for (StackTraceElement ste : steAll) {
			sb.append("	at " + ste.getClassName() + "." + ste.getMethodName() + "(" + ste.getFileName() + ":" + ste.getLineNumber()+")"+ "\n");
		}
		JSYejbLog.println(JSYejbLog.ERROR, this.getClass(), errTitle + "(体系内主キー:" + org_primary_key + ")" + "\n" + sb.toString());
	}
}
