/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名	  ：eo顧客基幹システム
*   モジュール名	：JKKGetTsjgsKtnCdUtil
*   ソースファイル名：JKKGetTsjgsKtnCdUtil.java
*   作成者		  ：富士通
*   日付			：2013年10月17日
*＜機能概要＞
*   通信事業者拠点コード取得部品
*＜修正履歴＞
*   バージョン  修正日	   修正者	  修正内容
*   v5.00.00    2013/10/17  FJ）北浦  新規作成
*   v5.01.00    2013/10/23  FJ）中山  【OM-2013-0003588】番ポから新番号への変更対応
*   v72.00.00	2024/08/28	FJ) 寺田  【ANK-4494-00-00】【eo定期】 双方向番ポ対応
*   v74.00.00	2025/03/07	FJ) 古村  【ANK-4676-00-00】【eo】双方向番ポSTEP2
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
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.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.CCException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.mapping.bp.common.TemplateErrorUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;

import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.ETU0131B010CBSMsg;
import eo.ejb.cbs.cbsmsg.ETU0131B010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0091A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0091A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0301A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0301A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0321B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0321B010CBSMsg1List;

/**
 * 通信事業者拠点コード取得部品
 * <br>
 * @author 富士通
 */
public class JKKGetTsjgsKtnCdUtil extends AbstractCommonComponent
{
	/** リターンメッセージ **/
	private static final String RETURN_MESSAGE_STRING = "RETURN_MESSAGE_";
	/** リターンメッセージ **/
	private static final String RETURN_MESSAGE_FORMAT = "%1$04d";
	/** エラー用 */
	private static final String SC_ERROR_STRING = "サービスコンポーネントエラー";
	/** 作業マップ */
	private static final String CC_WORK_AREA_NAME = "JKKGetTsjgsKtnCdUtilWork";	

	// ANK-4494-00-00 DEL START
//	/** 業務パラメータID */
//	private static final String WORK_PARAM_ID = "KK_ITNM_TSJGS_KTN_CD";
	// ANK-4676-00-00 ADD START 処理復活
	/** 番号区画コード */
	private String no_kukaku_cd = null;
	// ANK-4676-00-00 ADD END 処理復活
	// ANK-4494-00-00 DEL END

	/** 通信事業者コード */
	private String tsjgs_ktn_cd = null;
	

	

	/**
	 * 通信事業者拠点コード取得処理
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param inPrefixTxt プレフィックス
	 * @param inMap 登録用マップ 
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite getTsjgsKtnCd(SessionHandle handle, IRequestParameterReadWrite param, String inPrefixTxt, HashMap inMap) 
	throws Exception
	{
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		HashMap<String, Object> paramMap = setSCInputCommonData(param, new HashMap<String, Object>());
		Map<?, ?> result = null;
		CAANMsg template = null;

		/* ユーザデータ情報 */
		if (inMap == null)
		{
			return param;
		}
		
		if(!inMap.get(JCMConstants.FUNC_CODE_KEY).equals("1"))
		{
			return param;
		}

		// プレフィックスの設定
		String  prefix = "";
		if (inPrefixTxt != null)
		{
			prefix = inPrefixTxt;
		}
		

		tsjgs_ktn_cd = (String)inMap.get("kk0191_tsjgs_cd");
		if (null == tsjgs_ktn_cd || "".equals(tsjgs_ktn_cd))
		{
			return param;
		}

		// ANK-4676-00-00 ADD START 処理復活
		// ANK-4494-00-00 DEL START
		// 判定@
		// 通信事業者コードがNTTまたはNTT西ひかり、かつ電話番号が空白以外
		if(!isNullTellNumber(inMap) && 
				// ANK-4676-00-00 MOD START
//				(tsjgs_ktn_cd.equals((String)JKKStrConst.TSJGS_CD_NTT_WEST_HIKARI)))
				(tsjgs_ktn_cd.equals((String)JKKStrConst.TSJGS_CD_NTT)
				|| tsjgs_ktn_cd.equals((String)JKKStrConst.TSJGS_CD_NTT_WEST_HIKARI)))
				// ANK-4676-00-00 MOD END
		{
			//局番一意照会
			template = editInEZM0301A010Msg(param, inMap, prefix); // 上りマッピング
			result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
			editOutEZM0301A010Msg(result, param, inMap, prefix); // 下りマッピング
			if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
			{ // ステータスが単項目エラー以上であれば例外をスロー
				throw new CCException(SC_ERROR_STRING, new Exception());
			}

			//住所対象番号区画一意照会
			template = editInEZM0091A010Msg(param, inMap, prefix); // 上りマッピング
			result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
			editOutEZM0091A010Msg(result, param, inMap, prefix); // 下りマッピング
			if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
			{ // ステータスが単項目エラー以上であれば例外をスロー
				throw new CCException(SC_ERROR_STRING, new Exception());
			}
		}
		// ANK-4676-00-00 ADD END 処理復活
//		
//		// NTT-COMは、何も行わない
//		else if(tsjgs_ktn_cd.equals((String)JKKStrConst.TSJGS_CD_NTT_COM))
//		{
//			
//		}
//		
		// ANK-4676-00-00 ADD START 処理復活
		// 判定A
		// 通信事業者コードがKDDI、ソフトバンク、NTT-COM、オプテージ
		// ANK-4676-00-00 MOD START
//		else if(tsjgs_ktn_cd.equals((String)JKKStrConst.TSJGS_CD_KDDI))
		else if(tsjgs_ktn_cd.equals((String)JKKStrConst.TSJGS_CD_KDDI)
				|| tsjgs_ktn_cd.equals((String)JKKStrConst.TSJGS_CD_SOFTBANK)
				|| tsjgs_ktn_cd.equals((String)JKKStrConst.TSJGS_CD_NTT_COM)
				|| tsjgs_ktn_cd.equals((String)JKKStrConst.TSJGS_CD_OPTAGE))
			// ANK-4676-00-00 MOD  END
		{
			
			//業務パラメータ管理一覧照会
			// ANK-4676-00-00 MOD START
//			template = editInEZM0321A010Msg(param, inMap, prefix); // 上りマッピング
			template = editInEZM0321B010Msg(param, inMap, prefix); // 上りマッピング
			// ANK-4676-00-00 MOD  END
			result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
			// ANK-4676-00-00 MOD START
//			editOutEZM0321A010Msg(result, param, inMap, prefix); // 下りマッピング
			editOutEZM0321B010Msg(result, param, inMap, prefix); // 下りマッピング
			// ANK-4676-00-00 MOD  END
			if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
			{ // ステータスが単項目エラー以上であれば例外をスロー
				throw new CCException(SC_ERROR_STRING, new Exception());
			}
			
		}
		
		else 
		// ANK-4494-00-00 DEL END
		// ANK-4676-00-00 ADD END 処理復活
		// 判定B
		if(!"".equals(tsjgs_ktn_cd))
		{
			//通信事業者拠点一覧照会
			template = editInETU0131B010Msg(param, inMap, prefix); // 上りマッピング
			result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
			editOutETU0131B010Msg(result, param, inMap, prefix); // 下りマッピング
			if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
			{ // ステータスが単項目エラー以上であれば例外をスロー
				throw new CCException(SC_ERROR_STRING, new Exception());
			}
		}

		return param;
	}	

	
	/**
	 * SCインプット共通データ設定処理を行います。
	 * <br>
	 * @param param
	 * @param paramMap
	 * @return パラメータマップ
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> setSCInputCommonData(IRequestParameterReadWrite param, HashMap<String, Object> paramMap)
			throws RequestParameterException
	{
		/* 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));

		return paramMap;
	}
	

	/**
	 * 単一CAANMsgのマッピング処理を行います。
	 * <br>
	 * @param paramMap
	 * @param template
	 * @return パラメータマップ
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> putParamMap(HashMap<String, Object> paramMap, CAANMsg template) throws RequestParameterException
	{
		CAANMsg[] templates = { template };
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}

	// ANK-4676-00-00 ADD START 処理復活
	// ANK-4494-00-00 DEL START
	/**
	 * 電話番号がnullまたは空文字かどうかを判定します。
	 * <br>
	 * @param inMap ユーザデータ情報
	 * @return boolean 電話番号がnullまたは空文字の場合、true
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private boolean isNullTellNumber(HashMap inMap) throws RequestParameterException
	{
		if (inMap == null || inMap.get("kk0191_telno") == null || "".equals(inMap.get("kk0191_telno")))
		{
			return true;
		}
		
		return false;
	}
	// ANK-4494-00-00 DEL END
	// ANK-4676-00-00 ADD END 処理復活
	/**
	 * SCの実行ステータスの取得処理を行います。
	 * <br>
	 * @param param
	 * @return SCの実行ステータス
	 * @throws Exception
	 */
	private int getReturnCode(IRequestParameterReadWrite param) throws Exception
	{
		return Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
	}
	

	// ANK-4676-00-00 ADD START 処理復活
	// ANK-4494-00-00 DEL START
	/**
	 * 局番一意照会上りマッピング処理
	 * <br>
	 * @param param
	 * @param inMap
	 * @param prefix
	 * @return CAANMsg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEZM0301A010Msg(IRequestParameterReadWrite param, HashMap inMap, String prefix) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EZM0301A010CBSMsg.class.getName());

		// テンプレートID
		template.set(EZM0301A010CBSMsg.TEMPLATEID, "EZM0301A010");

		// 機能コード（デフォルト：１）
		template.set(EZM0301A010CBSMsg.FUNC_CODE, "1");

		// オペレータ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);
		
		// ＫＥＹ＿局番 電話番号の上6桁
		template.set(EZM0301A010CBSMsg.KEY_KYOKU_NO, ((String)inMap.get("kk0191_telno")).substring(0,6));

	
		return template;
	}
	
	
	/**
	 * 局番一意照会下りマッピング処理
	 * <br>
	 * @param msgList
	 * @param param
	 * @param dataMap
	 * @param prefix
	 * @return リクエストパラメータ
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editOutEZM0301A010Msg(Map<?, ?> msgList, IRequestParameterReadWrite param, HashMap dataMap, String prefix)
			throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		CAANMsg[] templateArray = null;

		// リターンコード取得
		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// 作業領域のマップを取得
		Map workMap = param.getMappingWorkArea();
		if (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		HashMap workDataMap = (HashMap)workMap.get(CC_WORK_AREA_NAME);
		if (workDataMap == null)
		{
			workDataMap = new HashMap();
			workMap.put(CC_WORK_AREA_NAME, workDataMap);
		}

		ArrayList dataList = null;

		templateArray = template.getCAANMsgList(EZM0301A010CBSMsg.EZM0301A010CBSMSG1LIST);
		dataList = (ArrayList)dataMap.get("EZM0301A010CBSMsg1List");

		if (dataList == null)
		{
			dataList = new ArrayList();
		}

		if (templateArray != null)
		{
			int cnt = 0;
			for (int i = 0; i < templateArray.length; i++)
			{
				CAANMsg childTemplate = templateArray[i];

				if (cnt >= dataList.size())
				{
					dataList.add(new HashMap());
				}
				HashMap childMap = (HashMap)dataList.get(cnt++);

				// 番号区画コード
				if (childTemplate.isNull(EZM0301A010CBSMsg1List.NO_KUKAKU_CD))
				{
					childMap.put("no_kukaku_cd", "");
					no_kukaku_cd = "";
				}
				else
				{
					childMap.put("no_kukaku_cd", childTemplate.getString(EZM0301A010CBSMsg1List.NO_KUKAKU_CD));
					no_kukaku_cd = childTemplate.getString(EZM0301A010CBSMsg1List.NO_KUKAKU_CD);
				}
			}
		}
		workDataMap.put("EZM0301A010CBSMsg1List", dataList);


		// エラー情報の設定
		editErrInfoEZM0301A010Msg(param, template, (Integer)returnCode, dataMap, prefix);

		// エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}

		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		return param;
	}
	
	
	/**
	 * 局番一意照会のエラー情報マッピング処理を行います。
	 * 
	 * <br>
	 * @param param
	 * @param template
	 * @param returnCode
	 * @param inMap
	 * @param prefix
	 * @return リクエストパラメータ
	 * @throws NumberFormatException
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEZM0301A010Msg(IRequestParameterReadWrite param, CAANMsg template, int returnCode,
			HashMap inMap, String prefix) throws NumberFormatException, RequestParameterException
	{
		int templateStatus = template.getInt(EZM0301A010CBSMsg.STATUS);
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + String.format(RETURN_MESSAGE_FORMAT, templateStatus)) == null)
		{
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus)
		{
			String formatStatus = String.format(RETURN_MESSAGE_FORMAT, templateStatus);
			String message = JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		//  ＫＥＹ＿局番エラー
		if (!template.isNull(EZM0301A010CBSMsg.KEY_KYOKU_NO_ERR))
		{
			if (!inMap.containsKey("kk0191_telno_err"))
			{
				inMap.put("kk0191_telno_err", template.getString(EZM0301A010CBSMsg.KEY_KYOKU_NO_ERR));
			}
		}

		return param;
	}
	
	
	
	/**
	 * 住所対象番号区画一意照会上りマッピング処理
	 * <br>
	 * @param param
	 * @param inMap
	 * @param prefix
	 * @return CAANMsg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEZM0091A010Msg(IRequestParameterReadWrite param, HashMap inMap, String prefix) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EZM0091A010CBSMsg.class.getName());

		// テンプレートID
		template.set(EZM0091A010CBSMsg.TEMPLATEID, "EZM0091A010");

		// 機能コード
		template.set(EZM0091A010CBSMsg.FUNC_CODE, "2");

		// オペレータ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);
		
		// ＫＥＹ＿住所コード
		template.set(EZM0091A010CBSMsg.KEY_AD_CD, (String)inMap.get("kk0191_emg_ad_cd"));

		// ＫＥＹ＿番号区画コード
		template.set(EZM0091A010CBSMsg.KEY_NO_KUKAKU_CD, no_kukaku_cd);
		
		// ＫＥＹ＿予約適用年月日
		template.set(EZM0091A010CBSMsg.KEY_RSV_APLY_YMD, operateDate);

		return template;
	}
	
	
	/**
	 * 住所対象番号区画一意照会下りマッピング処理
	 * <br>
	 * @param msgList
	 * @param param
	 * @param dataMap
	 * @param prefix
	 * @return リクエストパラメータ
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editOutEZM0091A010Msg(Map<?, ?> msgList, IRequestParameterReadWrite param, HashMap dataMap, String prefix)
			throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		CAANMsg[] templateArray = null;

		// リターンコード取得
		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// 作業領域のマップを取得
		Map workMap = param.getMappingWorkArea();
		if (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		HashMap workDataMap = (HashMap)workMap.get(CC_WORK_AREA_NAME);
		if (workDataMap == null)
		{
			workDataMap = new HashMap();
			workMap.put(CC_WORK_AREA_NAME, workDataMap);
		}

		ArrayList dataList = null;

		templateArray = template.getCAANMsgList(EZM0091A010CBSMsg.EZM0091A010CBSMSG1LIST);
		dataList = (ArrayList)dataMap.get("EZM0091A010CBSMsg1List");

		if (dataList == null)
		{
			dataList = new ArrayList();
		}

		if (templateArray != null)
		{
			int cnt = 0;
			for (int i = 0; i < templateArray.length; i++)
			{
				CAANMsg childTemplate = templateArray[i];

				if (cnt >= dataList.size())
				{
					dataList.add(new HashMap());
				}
				HashMap childMap = (HashMap)dataList.get(cnt++);

				// ANK-4676-00-00 ADD START
				// 通信事業者がNTTなら「通信事業者拠点コード」、NTT西ひかりなら「通信事業者拠点コード2」を移転元通信事業者拠点コードに設定する
				if(JKKStrConst.TSJGS_CD_NTT.equals(tsjgs_ktn_cd))
				{
					// ANK-4676-00-00 ADD END
					// 通信事業者拠点コード
					if (childTemplate.isNull(EZM0091A010CBSMsg1List.TSJGS_KTN_CD))
					{
						childMap.put("kk0191_itnm_tsjgs_ktn_cd", "");
					}
					else
					{
						childMap.put("kk0191_itnm_tsjgs_ktn_cd", childTemplate.getString(EZM0091A010CBSMsg1List.TSJGS_KTN_CD));
					}
				// ANK-4676-00-00 ADD START
				}
				else
				{
					// 通信事業者拠点コード2
					if (childTemplate.isNull(EZM0091A010CBSMsg1List.TSJGS_KTN_CD_2))
					{
						childMap.put("kk0191_itnm_tsjgs_ktn_cd", "");
					}
					else
					{
						childMap.put("kk0191_itnm_tsjgs_ktn_cd", childTemplate.getString(EZM0091A010CBSMsg1List.TSJGS_KTN_CD_2));
					}
				}
				// ANK-4676-00-00 ADD END
			}
		}
		workDataMap.put("EZM0091A010CBSMsg1List", dataList);


		// エラー情報の設定
		editErrInfoEZM0091A010Msg(param, template, (Integer)returnCode, dataMap, prefix);

		// エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}

		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		return param;
	}
	
	
	/**
	 * 住所対象番号区画一意照会のエラー情報マッピング処理を行います。
	 * 
	 * <br>
	 * @param param
	 * @param template
	 * @param returnCode
	 * @param inMap
	 * @param prefix
	 * @return リクエストパラメータ
	 * @throws NumberFormatException
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEZM0091A010Msg(IRequestParameterReadWrite param, CAANMsg template, int returnCode,
			HashMap inMap, String prefix) throws NumberFormatException, RequestParameterException
	{
		int templateStatus = template.getInt(EZM0091A010CBSMsg.STATUS);
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + String.format(RETURN_MESSAGE_FORMAT, templateStatus)) == null)
		{
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus)
		{
			String formatStatus = String.format(RETURN_MESSAGE_FORMAT, templateStatus);
			String message = JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		//  ＫＥＹ＿住所コードエラー
		if (!template.isNull(EZM0091A010CBSMsg.KEY_AD_CD_ERR))
		{
			if (!inMap.containsKey("kk0191_emg_ad_cd_err"))
			{
				inMap.put("kk0191_emg_ad_cd_err", template.getString(EZM0091A010CBSMsg.KEY_AD_CD_ERR));
			}
		}
		
		//  ＫＥＹ＿番号区画コード
		if (!template.isNull(EZM0091A010CBSMsg.KEY_NO_KUKAKU_CD_ERR))
		{
			if (!inMap.containsKey("no_kukaku_cd_err"))
			{
				inMap.put("key_no_kukaku_cd_err", template.getString(EZM0091A010CBSMsg.KEY_NO_KUKAKU_CD_ERR));
			}
		}
		
		//  ＫＥＹ＿予約適用年月日エラー
		if (!template.isNull(EZM0091A010CBSMsg.KEY_RSV_APLY_YMD_ERR))
		{
			if (!inMap.containsKey("key_rsv_aply_ymd_err"))
			{
				inMap.put("key_rsv_aply_ymd_err", template.getString(EZM0091A010CBSMsg.KEY_RSV_APLY_YMD_ERR));
			}
		}
		
		return param;
	}
	// ANK-4676-00-00 ADD END 処理復活
//	
//	/**
//	 * 業務パラメータ管理一意照会上りマッピング処理
//	 * <br>
//	 * @param param
//	 * @param inMap
//	 * @param prefix
//	 * @return CAANMsg
//	 * @throws RequestParameterException
//	 */
//	@SuppressWarnings("unchecked")
//	private CAANMsg editInEZM0321A010Msg(IRequestParameterReadWrite param, HashMap inMap, String prefix) throws RequestParameterException
//	{
//		CAANMsg template = new CAANMsg(EZM0321A010CBSMsg.class.getName());
//
//		// テンプレートID
//		template.set(EZM0321A010CBSMsg.TEMPLATEID, "EZM0321A010");
//
//		// 機能コード（デフォルト：１）
//		template.set(EZM0321A010CBSMsg.FUNC_CODE, "1");
//
//		// オペレータ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);
//		
//		// ＫＥＹ＿業務パラメータID
//		template.set(EZM0321A010CBSMsg.KEY_WORK_PARAM_ID, WORK_PARAM_ID);
//
//		
//		
//		return template;
//	}
//	
//	
//	/**
//	 * 業務パラメータ管理一意照会下りマッピング処理
//	 * <br>
//	 * @param msgList
//	 * @param param
//	 * @param dataMap
//	 * @param prefix
//	 * @return リクエストパラメータ
//	 * @throws Exception 
//	 */
//	@SuppressWarnings("unchecked")
//	private IRequestParameterReadWrite editOutEZM0321A010Msg(Map<?, ?> msgList, IRequestParameterReadWrite param, HashMap dataMap, String prefix)
//			throws Exception
//	{
//		// SCからの戻り値からCAANMsgを取得する。
//		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
//		CAANMsg template = templates[0];
//		CAANMsg[] templateArray = null;
//
//		// リターンコード取得
//		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);
//		
//		// 作業領域のマップを取得
//		Map workMap = param.getMappingWorkArea();
//		if (workMap == null)
//		{
//			workMap = new HashMap();
//			param.setMappingWorkArea(workMap);
//		}
//		HashMap workDataMap = (HashMap)workMap.get(CC_WORK_AREA_NAME);
//		if (workDataMap == null)
//		{
//			workDataMap = new HashMap();
//			workMap.put(CC_WORK_AREA_NAME, workDataMap);
//		}
//
//		ArrayList dataList = null;
//
//		templateArray = template.getCAANMsgList(EZM0321A010CBSMsg.EZM0321A010CBSMSG1LIST);
//		dataList = (ArrayList)dataMap.get("EZM0321A010CBSMsg1List");
//
//		if (dataList == null)
//		{
//			dataList = new ArrayList();
//		}
//
//		if (templateArray != null)
//		{
//			int cnt = 0;
//			for (int i = 0; i < templateArray.length; i++)
//			{
//				CAANMsg childTemplate = templateArray[i];
//
//				if (cnt >= dataList.size())
//				{
//					dataList.add(new HashMap());
//				}
//				HashMap childMap = (HashMap)dataList.get(cnt++);
//
//				// 移転元通信事業者拠点コード
//				if (childTemplate.isNull(EZM0321A010CBSMsg1List.WORK_PARAM_SETTE_VALUE))
//				{
//					childMap.put("kk0191_itnm_tsjgs_ktn_cd", "");
//				}
//				else
//				{
//					childMap.put("kk0191_itnm_tsjgs_ktn_cd", childTemplate.getString(EZM0321A010CBSMsg1List.WORK_PARAM_SETTE_VALUE));
//				}
//			}
//		}
//		workDataMap.put("EZM0321A010CBSMsg1List", dataList);
//
//
//		// エラー情報の設定
//		editErrInfoEZM0321A010Msg(param, template, (Integer)returnCode, dataMap, prefix);
//
//		// エラー情報のマップを取得
//		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
//		if (errList == null)
//		{
//			errList = new ArrayList<Object>();
//		}
//
//		// コントロールマップに設定
//		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));
//
//		return param;
//	}
//	
//	
//	/**
//	 * 業務パラメータ管理一意照会照会のエラー情報マッピング処理を行います。
//	 * 
//	 * <br>
//	 * @param param
//	 * @param template
//	 * @param returnCode
//	 * @param inMap
//	 * @param prefix
//	 * @return リクエストパラメータ
//	 * @throws NumberFormatException
//	 * @throws RequestParameterException
//	 */
//	@SuppressWarnings("unchecked")
//	private IRequestParameterReadWrite editErrInfoEZM0321A010Msg(IRequestParameterReadWrite param, CAANMsg template, int returnCode,
//			HashMap inMap, String prefix) throws NumberFormatException, RequestParameterException
//	{
//		int templateStatus = template.getInt(EZM0321A010CBSMsg.STATUS);
//		if (returnCode != 0)
//		{
//			templateStatus = 9000;
//		}
//		if (JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + String.format(RETURN_MESSAGE_FORMAT, templateStatus)) == null)
//		{
//			templateStatus = 0;
//		}
//
//		int bpStatus = 0;
//		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
//		if (obj == null)
//		{
//			bpStatus = -1;
//		}
//		else
//		{
//			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
//		}
//
//		if (templateStatus > bpStatus)
//		{
//			String formatStatus = String.format(RETURN_MESSAGE_FORMAT, templateStatus);
//			String message = JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + formatStatus);
//			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
//			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
//		}
//
//		//  ＫＥＹ＿業務パラメータIDエラー
//		if (!template.isNull(EZM0321A010CBSMsg.KEY_WORK_PARAM_ID_ERR))
//		{
//			if (!inMap.containsKey("key_work_param_id_err"))
//			{
//				inMap.put("key_work_param_id_err", template.getString(EZM0321A010CBSMsg.KEY_WORK_PARAM_ID_ERR));
//			}
//		}
//		
//		
//		return param;
//	}
// ANK-4494-00-00 DEL END
	
	// ANK-4676-00-00 ADD START
	/**
	 * 業務パラメータ管理一覧照会上りマッピング処理
	 * <br>
	 * @param param
	 * @param inMap
	 * @param prefix
	 * @return CAANMsg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEZM0321B010Msg(IRequestParameterReadWrite param, HashMap inMap, String prefix) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EZM0321B010CBSMsg.class.getName());

		// テンプレートID
		template.set(EZM0321B010CBSMsg.TEMPLATEID, "EZM0321B010");

		// 機能コード（デフォルト：１）
		template.set(EZM0321B010CBSMsg.FUNC_CODE, "1");

		// オペレータ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);
		
		// ＫＥＹ＿業務パラメータID
		template.set(EZM0321B010CBSMsg.KEY_WORK_PARAM_ID, JKKStrConst.KK_ATADDTSJGSCD);

		
		
		return template;
	}
	
	
	/**
	 * 業務パラメータ管理一覧照会下りマッピング処理
	 * <br>
	 * @param msgList
	 * @param param
	 * @param dataMap
	 * @param prefix
	 * @return リクエストパラメータ
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editOutEZM0321B010Msg(Map<?, ?> msgList, IRequestParameterReadWrite param, HashMap dataMap, String prefix)
			throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		CAANMsg[] templateArray = null;

		// リターンコード取得
		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// 作業領域のマップを取得
		Map workMap = param.getMappingWorkArea();
		if (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		HashMap workDataMap = (HashMap)workMap.get(CC_WORK_AREA_NAME);
		if (workDataMap == null)
		{
			workDataMap = new HashMap();
			workMap.put(CC_WORK_AREA_NAME, workDataMap);
		}

		templateArray = template.getCAANMsgList(EZM0321B010CBSMsg.EZM0321B010CBSMSG1LIST);

		// 業務パラメータ管理から取得した業務パラメータ設定値を","で分割し、[0]の通信事業者コードが一致したものを設定する
		for (int i = 0; i < templateArray.length; i++)
		{
			CAANMsg childTemplate = templateArray[i];
			String workParamSetteValue = childTemplate.getString(EZM0321B010CBSMsg1List.WORK_PARAM_SETTE_VALUE);
			String[] workSplit = workParamSetteValue.split(JKKStrConst.COMMA);
			
			if(workSplit[0].equals(tsjgs_ktn_cd))
			{
				dataMap.put("kk0191_itnm_tsjgs_ktn_cd", workSplit[1]);
				break;
			}
		}

		// エラー情報の設定
		editErrInfoEZM0321B010Msg(param, template, (Integer)returnCode, dataMap, prefix);

		// エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}

		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		return param;
	}
	
	
	/**
	 * 業務パラメータ管理一覧照会照会のエラー情報マッピング処理を行います。
	 * 
	 * <br>
	 * @param param
	 * @param template
	 * @param returnCode
	 * @param inMap
	 * @param prefix
	 * @return リクエストパラメータ
	 * @throws NumberFormatException
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEZM0321B010Msg(IRequestParameterReadWrite param, CAANMsg template, int returnCode,
			HashMap inMap, String prefix) throws NumberFormatException, RequestParameterException
	{
		int templateStatus = template.getInt(EZM0321B010CBSMsg.STATUS);
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + String.format(RETURN_MESSAGE_FORMAT, templateStatus)) == null)
		{
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus)
		{
			String formatStatus = String.format(RETURN_MESSAGE_FORMAT, templateStatus);
			String message = JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		//  ＫＥＹ＿業務パラメータIDエラー
		if (!template.isNull(EZM0321B010CBSMsg.KEY_WORK_PARAM_ID_ERR))
		{
			if (!inMap.containsKey("key_work_param_id_err"))
			{
				inMap.put("key_work_param_id_err", template.getString(EZM0321B010CBSMsg.KEY_WORK_PARAM_ID_ERR));
			}
		}
		
		
		return param;
	}
	// ANK-4676-00-00 ADD END
	
	/**
	 * 通信事業者拠点一覧照会上りマッピング処理
	 * <br>
	 * @param param
	 * @param inMap
	 * @param prefix
	 * @return CAANMsg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInETU0131B010Msg(IRequestParameterReadWrite param, HashMap inMap, String prefix) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(ETU0131B010CBSMsg.class.getName());

		// テンプレートID
		template.set(ETU0131B010CBSMsg.TEMPLATEID, "ETU0131B010");

		// 機能コード（デフォルト：１）
		template.set(ETU0131B010CBSMsg.FUNC_CODE, "1");

		// オペレータ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);
		
		// ＫＥＹ＿通信事業者コード
		template.set(ETU0131B010CBSMsg.KEY_TSJGS_CD, tsjgs_ktn_cd);
		
		template.set(ETU0131B010CBSMsg.SEARCH_TYPE, "1");
		
		template.set(ETU0131B010CBSMsg.MAX_SEARCH_NUM, "1000");

		
		
		return template;
	}
	
	
	/**
	 * 通信事業者拠点一覧照会下りマッピング処理
	 * <br>
	 * @param msgList
	 * @param param
	 * @param dataMap
	 * @param prefix
	 * @return リクエストパラメータ
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editOutETU0131B010Msg(Map<?, ?> msgList, IRequestParameterReadWrite param, HashMap dataMap, String prefix)
			throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		CAANMsg[] templateArray = null;

		// リターンコード取得
		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// 作業領域のマップを取得
		Map workMap = param.getMappingWorkArea();
		if (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		HashMap workDataMap = (HashMap)workMap.get(CC_WORK_AREA_NAME);
		if (workDataMap == null)
		{
			workDataMap = new HashMap();
			workMap.put(CC_WORK_AREA_NAME, workDataMap);
		}

		ArrayList dataList = null;

		templateArray = template.getCAANMsgList(ETU0131B010CBSMsg.ETU0131B010CBSMSG1LIST);
		dataList = (ArrayList)dataMap.get("ETU0131B010CBSMsg1List");

		if (dataList == null)
		{
			dataList = new ArrayList();
		}

		if (templateArray != null)
		{
			int cnt = 0;
			for (int i = 0; i < templateArray.length; i++)
			{
				if(templateArray.length == 1)
				{
					CAANMsg childTemplate = templateArray[i];
	
					if (cnt >= dataList.size())
					{
						dataList.add(new HashMap());
					}
					HashMap childMap = (HashMap)dataList.get(cnt++);
	
					// 通信事業者拠点コード
					if (childTemplate.isNull(ETU0131B010CBSMsg1List.TSJGS_KTN_CD))
					{
						childMap.put("kk0191_itnm_tsjgs_ktn_cd", "");
					}
					else
					{
						childMap.put("kk0191_itnm_tsjgs_ktn_cd", childTemplate.getString(ETU0131B010CBSMsg1List.TSJGS_KTN_CD));
					}
				}
				
			}
		}
		workDataMap.put("ETU0131B010CBSMsg1List", dataList);


		// エラー情報の設定
		editErrInfoETU0131B010Msg(param, template, (Integer)returnCode, dataMap, prefix);

		// エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}

		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		return param;
	}
	
	
	/**
	 * 通信事業者拠点一覧照会のエラー情報マッピング処理を行います。
	 * 
	 * <br>
	 * @param param
	 * @param template
	 * @param returnCode
	 * @param inMap
	 * @param prefix
	 * @return リクエストパラメータ
	 * @throws NumberFormatException
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoETU0131B010Msg(IRequestParameterReadWrite param, CAANMsg template, int returnCode,
			HashMap inMap, String prefix) throws NumberFormatException, RequestParameterException
	{
		int templateStatus = template.getInt(ETU0131B010CBSMsg.STATUS);
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + String.format(RETURN_MESSAGE_FORMAT, templateStatus)) == null)
		{
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus)
		{
			String formatStatus = String.format(RETURN_MESSAGE_FORMAT, templateStatus);
			String message = JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		//  ＫＥＹ＿業務パラメータIDエラー
		if (!template.isNull(ETU0131B010CBSMsg.KEY_TSJGS_CD_ERR))
		{
			if (!inMap.containsKey("kk0191_itnm_tsjgs_ktn_cd_err"))
			{
				inMap.put("kk0191_itnm_tsjgs_ktn_cd_err", template.getString(ETU0131B010CBSMsg.KEY_TSJGS_CD_ERR));
			}
		}
		
		
		return param;
	}

}
