/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JTUTelNoUtil
*   ソースファイル名：JTUTelNoUtil.java
*   作成者          ：FJ
*   日付            ：2012年01月16日
*＜機能概要＞
*   電話番号編集部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v3.00.00    2012/01/16   FJ)宮本     新規作成
*
**********************************************************************/

package com.fujitsu.futurity.bp.custom.common;


import com.fujitsu.futurity.model.base.CAANMsg;

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.sc.exception.SCException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;

import eo.common.constant.JPCModelConstant;
import eo.common.util.JPCCommonUtil;
//import eo.ejb.cbs.cbsmsg.EZM0091B012CBSMsg;
//import eo.ejb.cbs.cbsmsg.EZM0091B012CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0301A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0301A010CBSMsg1List;


/**
 * 電話番号編集部品です。<p>
 * <BR>
 * @author FJ
 */
public class JTUTelNoUtil extends JPCCommonUtil 
{

	/** 一覧照会 テンプレートID **/
	//private static final String TEMPLATE_ID_TLN = "EZM0091B012";
	private static final String TEMPLATE_ID_TLN = "EZM0301A010";
	/** 一覧照会 最大検索件数 **/
	private static final String MAX_SEARCH_NUM_TLN = "100";

	/**
	 * 電話番号を市外局番、市内局番、加入者番号に分割し、ハイフン編集を行う。
	 * @param handle
	 * @param paramMap
	 * @param tln
	 * @return String
	 * @throws Exception
	 */
	public static String editTln(SessionHandle handle, HashMap<String, Object> paramMap, String tln) throws Exception
	{

		// NULLチェック
		if (isNull(tln)) 
		{
			return tln;
		}
		
		/** 11桁の場合 **/
		if(tln.length() == 11)
		{
			return tln.substring(0, 3) + "-" + tln.substring(3, 7) + "-" + tln.substring(7, 11);
		}
		/** 10桁の場合 **/
		else if(tln.length() == 10)
		{
			/*
			 * 上りマッピング処理
			 */			
			CAANMsg[] templates = (CAANMsg[])paramMap.get(JCMConstants.TEMPLATE_LIST_KEY);
			CAANMsg parentTemplate = templates[0];
			String kykNo = tln.substring(0, 6);
			
			// ＫＥＹ＿局番
			parentTemplate.set(EZM0301A010CBSMsg.KEY_KYOKU_NO, kykNo);
			/*
			 * ＳＣ呼出実行
			 */
			// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
			ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
			String areaCd = "";
			Map<?, ?> result = null;
			try
			{
				result = scCall.run(paramMap, handle);
			}
			catch(SCException ex)
			{
				return 	tln;
			}
			
			// SCからの戻り値からCAANMsgを取得する。
			CAANMsg[] rsltTemplates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
			CAANMsg[] rsltTemplateArray = rsltTemplates[0].getCAANMsgList(EZM0301A010CBSMsg.EZM0301A010CBSMSG1LIST);
	
			if (rsltTemplateArray != null) 
			{
				CAANMsg childTemplate = rsltTemplateArray[0];
				// 市外局番
				if (!childTemplate.isNull(EZM0301A010CBSMsg1List.AREACD))
				{
					areaCd = childTemplate.getString(EZM0301A010CBSMsg1List.AREACD);
				}
				
				rsltTemplates[0].removeData(EZM0301A010CBSMsg.EZM0301A010CBSMSG1LIST);
				
				if(!isNull(areaCd))
				{
					return areaCd + "-" + kykNo.substring(areaCd.length()) + "-" + tln.substring(6);
				}
				
			}
				
		}
		
		return tln;
		
	}

	/**
	 * EZM0091B012_住所対象番号区画市外局番一覧照会のインプットマップを取得
	 * @param param
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	public static HashMap<String, Object> getEditInMsg_Tln(IRequestParameterReadWrite param) throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// 【取得元：電文ヘッダ(ヘッダ)】
		// 電文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 template = new CAANMsg(EZM0301A010CBSMsg.class.getName());
		// テンプレートID
		template.set(EZM0301A010CBSMsg.TEMPLATEID, TEMPLATE_ID_TLN);
		
		// 機能コード
		template.set(EZM0301A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		// オペレータID
		template.set(EZM0301A010CBSMsg.OPERATORID, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		// 運用日付
		template.set(EZM0301A010CBSMsg.OPERATEDATE, param.getControlMapData(SCControlMapKeys.OPE_DATE));

		// 運用日時
		template.set(EZM0301A010CBSMsg.OPERATEDATETIME,  param.getControlMapData(SCControlMapKeys.OPE_TIME));

		// ◇業務データの設定
		// 検索パターン
		template.set(EZM0301A010CBSMsg.SEARCH_TYPE, JPCModelConstant.SAERCH_TYPE_IKT);
		// 最大検索件数
		template.set(EZM0301A010CBSMsg.MAX_SEARCH_NUM, MAX_SEARCH_NUM_TLN);
		/*// ＫＥＹ＿市外局番
		template.set(EZM0091B012CBSMsg.KEY_AREACD, tln.substring(0, 6));*/
		/*// ＫＥＹ＿基準日
		template.set(EZM0301A010CBSMsg.KEY_YMD, JTUBPCommon.getOpeDate(null));*/
	
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
}


