/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKAddSvcKeiAdslCC
*   ソースファイル名：JKKAddSvcKeiAdslCC.java
*   作成者          ：富士通
*   日付            ：2011年09月13日
*＜機能概要＞
*   eoADSL登録チェックを行います。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/09/13   FJ）湯地    新規作成
*
**********************************************************************/

package com.fujitsu.futurity.bp.custom.common;

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.ICommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.CCException;
import com.fujitsu.futurity.bp.x21.sc.exception.SCException;
import com.fujitsu.futurity.model.base.CAANMsg;

import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EFU0041B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0141C040CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0141D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0361D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0591B003CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0591B003CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0781A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0781A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0791A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0791A010CBSMsg1List;

/**
 * eoADSL登録部品
 * <BR>
 * @author 富士通
 */
public class JKKAddSvcKeiAdslCC extends AbstractCommonComponent implements ICommonComponent
{
	/** エラー発生時メッセージ */
	private static final String SC_ERROR_STRING = "eoADSL登録チェックCCで例外が発生しました";
	/** 返却用MAPADSL可能エリア未存在時エラー設定フラグキー名 */
	private static final String ADSLAREA_ERROR_FLG_MAPKEY = "adsl_area_sc_result_flg";

	/**
	 * 入力チェックメイン処理
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ccName ユーザ定義文字列
	 * @return リクエストパラメータ
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite checkMain(SessionHandle handle, IRequestParameterReadWrite param, String ccName) throws Throwable
	{
		Map<?, ?> result = null;
		Map resUserMap = new HashMap();

		/* ユーザデータ情報 */
		HashMap inMapChk = (HashMap)(param.getData(ccName));
		if (inMapChk == null)
		{
			return param;
		}

		boolean errFlg = false;
		String opeDate = (String)inMapChk.get("ope_date");
		/***************************************************/
		/** 料金コースチェック                             */
		/***************************************************/
		result = checkPrcCourse(handle, param, ccName, opeDate);
		if (!JKKBpCommon.isSuccess(result))
		{
			JKKBpCommon.setResultCtrlData(param, result);
			errFlg = true;
		}

		/***************************************************/
		/** サービス契約＜eoADSL＞登録サービス             */
		/***************************************************/
		result = callAddSvcKeiAdslSc(handle, param, JPCModelConstant.FUNC_CD_2, ccName);
		if (!JKKBpCommon.isSuccess(result))
		{
			JKKBpCommon.setResultCtrlData(param, result);
			errFlg = true;
		}

		/***************************************************/
		/** オプション_サービスチェック                    */
		/***************************************************/
		String opPcrsCd = (String)inMapChk.get("op_pcrs_cd");
		if ((opPcrsCd != null) && (!"".equals(opPcrsCd)))
		{
			result = checkOptSvc(handle, param, ccName, opeDate, opPcrsCd);
			if (!JKKBpCommon.isSuccess(result))
			{
				JKKBpCommon.setResultCtrlData(param, result);
				errFlg = true;
			}
		}

		/***************************************************/
		/** 電話番号チェック                               */
		/***************************************************/
		String telNo = (String)inMapChk.get("adsl_use_telno");
		if ((telNo != null) && (!"".equals(telNo)))
		{
			result = checkTelNo(handle, param, ccName, resUserMap);
			if (!JKKBpCommon.isSuccess(result))
			{
				JKKBpCommon.setResultCtrlData(param, result);
				errFlg = true;
			}
		}

		// データ返却
		if (errFlg)
		{
			throw new CCException(SC_ERROR_STRING, new Exception());
		}
		JKKBpCommon.setResultUserData(param, ccName, resUserMap);
		JKKBpCommon.setResultCtrlData(param, result, ccName , 0, 0);

		return param;
	}

	/**
	 * 入力チェックメイン処理(照査前登録用)
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ccName ユーザ定義文字列
	 * @return リクエストパラメータ
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite checkMainShosa(SessionHandle handle, IRequestParameterReadWrite param, String ccName) throws Throwable
	{
		Map<?, ?> result = null;
		Map resUserMap = new HashMap();

		/* ユーザデータ情報 */
		HashMap inMapChk = (HashMap)(param.getData(ccName));
		if (inMapChk == null)
		{
			return param;
		}

		boolean errFlg = false;
		String opeDate = (String)inMapChk.get("ope_date");
		/***************************************************/
		/** 料金コースチェック                             */
		/***************************************************/
		result = checkPrcCourse(handle, param, ccName, opeDate);
		if (!JKKBpCommon.isSuccess(result))
		{
			JKKBpCommon.setResultCtrlData(param, result);
			errFlg = true;
		}

		/***************************************************/
		/** サービス契約＜eoADSL＞登録サービス             */
		/***************************************************/
		result = callAddSvcKeiAdslSc(handle, param, JPCModelConstant.FUNC_CD_2, ccName);
		if (!JKKBpCommon.isSuccess(result))
		{
			JKKBpCommon.setResultCtrlData(param, result);
			errFlg = true;
		}

		/***************************************************/
		/** サービス契約＜eoADSL＞情報変更サービス             */
		/***************************************************/
		result = callUpdSvcKeiAdslSc(handle, param, JPCModelConstant.FUNC_CD_2, ccName);
		if (!JKKBpCommon.isSuccess(result))
		{
			JKKBpCommon.setResultCtrlData(param, result);
			errFlg = true;
		}

		/***************************************************/
		/** オプション_サービスチェック                    */
		/***************************************************/
		String opPcrsCd = (String)inMapChk.get("op_pcrs_cd");
		if ((opPcrsCd != null) && (!"".equals(opPcrsCd)))
		{
			result = checkOptSvc(handle, param, ccName, opeDate, opPcrsCd);
			if (!JKKBpCommon.isSuccess(result))
			{
				JKKBpCommon.setResultCtrlData(param, result);
				errFlg = true;
			}
		}

		/***************************************************/
		/** 電話番号チェック                               */
		/***************************************************/
		String telNo = (String)inMapChk.get("adsl_use_telno");
		if ((telNo != null) && (!"".equals(telNo)))
		{
			result = checkTelNo(handle, param, ccName, resUserMap);
			if (!JKKBpCommon.isSuccess(result))
			{
				JKKBpCommon.setResultCtrlData(param, result);
				errFlg = true;
			}
		}

		// データ返却
		if (errFlg)
		{
			throw new CCException(SC_ERROR_STRING, new Exception());
		}
		JKKBpCommon.setResultUserData(param, ccName, resUserMap);
		JKKBpCommon.setResultCtrlData(param, result, ccName , 0, 0);

		return param;
	}

	/**
	 * 料金コースチェック
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ccName ユーザ定義文字列
	 * @param opeDate 運用日付
	 * @return 実行結果
	 * @throws RequestParameterException 
	 * @throws SCException 
	 */
	@SuppressWarnings("unchecked")
	private Map<?, ?> checkPrcCourse(SessionHandle handle, IRequestParameterReadWrite param, String ccName, String opeDate)
	throws RequestParameterException, SCException
	{
		HashMap inMapChk = (HashMap)(param.getData(ccName));
		String pcrsCd = (String)inMapChk.get("pcrs_cd");
		Map<?, ?> result = null;
		/***************************************************/
		/** 料金プランコード取得                           */
		/***************************************************/
		String pplanCd = null;
		result = callGetPrcPlanCdSc(handle, param, pcrsCd);
		if (JKKBpCommon.isSuccess(result))
		{
			pplanCd = JKKBpCommon.getResultString(result, EKK0591B003CBSMsg.EKK0591B003CBSMSG1LIST + "[0]." + EKK0591B003CBSMsg1List.PPLAN_CD);
			inMapChk.put("pplan_cd", pplanCd);
		}
		else
		{
			return result;
		}

		/***************************************************/
		/** 料金グループコード取得                         */
		/***************************************************/
		String prcGrpCd = null;
		result = callGetPrcGrpCdSc(handle, param, pcrsCd, opeDate);
		if (JKKBpCommon.isSuccess(result))
		{
			prcGrpCd = JKKBpCommon.getResultString(result, EKK0791A010CBSMsg.EKK0791A010CBSMSG1LIST + "[0]." + EKK0791A010CBSMsg1List.PRC_GRP_CD);
			inMapChk.put("prc_grp_cd", prcGrpCd);
		}
		else
		{
			return result;
		}

		/***************************************************/
		/** サービスコード取得                             */
		/***************************************************/
		String svcCd = null;
		result = callGetSvcCdSc(handle, param, opeDate, prcGrpCd);
		if (JKKBpCommon.isSuccess(result))
		{
			svcCd = JKKBpCommon.getResultString(result, EKK0781A010CBSMsg.EKK0781A010CBSMSG1LIST + "[0]." + EKK0781A010CBSMsg1List.SVC_CD);
			inMapChk.put("svc_cd", svcCd);
		}
		else
		{
			return result;
		}
		return result;
	}

	/**
	 * 電話番号チェック
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ccName ユーザ定義文字列
	 * @param resUserMap 返却用データMAP
	 * @return 実行結果
	 * @throws SCException
	 * @throws RequestParameterException 
	 */
	@SuppressWarnings("unchecked")
	private Map<?, ?> checkTelNo(SessionHandle handle, IRequestParameterReadWrite param, String ccName, Map resUserMap)
	throws RequestParameterException, SCException
	{
		Map<?, ?> result = null;

		/***************************************************/
		/** ADSL可能エリア一覧照会サービス                 */
		/***************************************************/
		result = callChkAdslAreaSc(handle, param, JPCModelConstant.FUNC_CD_1, ccName);
		if (JKKBpCommon.isSuccess(result))
		{
			CAANMsg[] list = JKKBpCommon.getResultMsgList(result, "EFU0041B010CBSMsg1List");
			if ((list != null) && (list.length <= 0))
			{
				// 取得レコードがない場合
				resUserMap.put(ADSLAREA_ERROR_FLG_MAPKEY, "1");
			}
		}
		return result;
	}

	/**
	 * オプションサービスチェック
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ccName ユーザ定義文字列
	 * @param opeDate 運用日付
	 * @param opPcrsCd オプション料金コースコード
	 * @return 実行結果
	 * @throws SCException
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private Map<?, ?> checkOptSvc(SessionHandle handle,
									IRequestParameterReadWrite param,
									String ccName,
									String opeDate,
									String opPcrsCd) throws RequestParameterException, SCException
	{
		HashMap inMapChk = (HashMap)(param.getData(ccName));
		Map<?, ?> result = null;
		/***************************************************/
		/** オプション_サービスコード取得              */
		/***************************************************/
		result = callGetPrcGrpCdSc(handle, param, opPcrsCd, opeDate);
		if (JKKBpCommon.isSuccess(result))
		{
			String opSvcCd = JKKBpCommon.getResultString(result, EKK0791A010CBSMsg.EKK0791A010CBSMSG1LIST + "[0]." + EKK0791A010CBSMsg1List.OP_SVC_CD);
			inMapChk.put("op_svc_cd", opSvcCd);
		}
		else
		{
			return result;
		}

		/***************************************************/
		/** オプション_料金プランコード取得                */
		/***************************************************/
		result = callGetPrcPlanCdSc(handle, param, opPcrsCd);
		if (JKKBpCommon.isSuccess(result))
		{
			String opPplanCd = JKKBpCommon.getResultString(result, EKK0591B003CBSMsg.EKK0591B003CBSMSG1LIST + "[0]." + EKK0591B003CBSMsg1List.PPLAN_CD);
			inMapChk.put("op_pplan_cd", opPplanCd);
		}
		else
		{
			return result;
		}

		/***************************************************/
		/** オプションサービス契約＜IPS＞登録サービス      */
		/***************************************************/
		result = callAddSvcKeiOptionIpsSc(handle, param, JPCModelConstant.FUNC_CD_2, ccName);
		if (!JKKBpCommon.isSuccess(result))
		{
			return result;
		}
		return result;
	}

	/**
	 * 料金コース一意照会SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param pcrsCd 料金コースコード
	 * @param opeDate 運用日付
	 * @return 実行結果
	 * @throws RequestParameterException
	 * @throws SCException 
	 */
	private Map<?, ?> callGetPrcGrpCdSc(SessionHandle handle, IRequestParameterReadWrite param, String pcrsCd, String opeDate)
	throws RequestParameterException, SCException
	{
		/***************************************************/
		/** 料金コース一意照会SCへの上りマッピング         */
		/***************************************************/
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		inMap.put(EKK0791A010CBSMsg.KEY_PCRS_CD, pcrsCd);
		inMap.put(EKK0791A010CBSMsg.KEY_RSV_APLY_YMD, opeDate);
		HashMap<String, Object> paramMap = JKKBpCommon.createScParamForSearch(param, "EKK0791A010", EKK0791A010CBSMsg.class , inMap,
				JPCModelConstant.FUNC_CD_2);

		/***************************************************/
		/** ＳＣ呼出実行                                   */
		/***************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		JKKBpCommon.printBpDebugLog(this.getClass(), "料金コース一意照会SC呼び出し開始（ 料金コースコード：" + ((pcrsCd != null) ? pcrsCd : "") + " ）");
		Map<?, ?> result = scCall.run(paramMap, handle);
		JKKBpCommon.printBpDebugLog(this.getClass(), "料金コース一意照会SC呼び出し完了" + result);

		return result;
	}

	/**
	 * 料金プラン一覧照会SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param pcrsCd 料金コースコード
	 * @return 実行結果
	 * @throws RequestParameterException 
	 * @throws SCException 
	 */
	private Map<?, ?> callGetPrcPlanCdSc(SessionHandle handle, IRequestParameterReadWrite param, String pcrsCd)
	throws RequestParameterException, SCException
	{
		/***************************************************/
		/** 料金プラン一覧照会SCへの上りマッピング         */
		/***************************************************/
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		inMap.put(EKK0591B003CBSMsg.KEY_PCRS_CD, pcrsCd);
		HashMap<String, Object> paramMap = JKKBpCommon.createScParamForSearch(param, "EKK0591B003", EKK0591B003CBSMsg.class , inMap,
				JPCModelConstant.FUNC_CD_1);

		/***************************************************/
		/** ＳＣ呼出実行                                   */
		/***************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		JKKBpCommon.printBpDebugLog(this.getClass(), "料金プラン一覧照会SC呼び出し開始（ 料金コースコード：" + ((pcrsCd != null) ? pcrsCd : "") + " ）");
		Map<?, ?> result = scCall.run(paramMap, handle);
		JKKBpCommon.printBpDebugLog(this.getClass(), "料金プラン一覧照会SC呼び出し完了" + result);

		return result;
	}

	/**
	 * 料金グループ一意照会SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param opeDate 運用日付
	 * @param prcGrpCd 料金グループコード
	 * @return 実行結果
	 * @throws RequestParameterException
	 * @throws SCException
	 */
	private Map<?, ?> callGetSvcCdSc(SessionHandle handle, IRequestParameterReadWrite param, String opeDate, String prcGrpCd)
	throws RequestParameterException, SCException
	{
		/***************************************************/
		/** 料金グループ一意照会SCへの上りマッピング       */
		/***************************************************/
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		inMap.put(EKK0781A010CBSMsg.KEY_PRC_GRP_CD, prcGrpCd);
		inMap.put(EKK0781A010CBSMsg.KEY_RSV_APLY_YMD, opeDate);
		HashMap<String, Object> paramMap = JKKBpCommon.createScParamForSearch(param, "EKK0781A010", EKK0781A010CBSMsg.class , inMap,
				JPCModelConstant.FUNC_CD_2);

		/***************************************************/
		/** ＳＣ呼出実行                                   */
		/***************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		JKKBpCommon.printBpDebugLog(this.getClass(), "料金グループ一意照会SC呼び出し開始（ 料金グループコード：" + 
										((prcGrpCd != null) ? prcGrpCd : "") + " ）");
		Map<?, ?> result = scCall.run(paramMap, handle);
		JKKBpCommon.printBpDebugLog(this.getClass(), "料金グループ一意照会SC呼び出し完了" + result);

		return result;
	}

	/**
	 * サービス契約＜eoADSL＞登録SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param funcCd 機能コード
	 * @param ccName ユーザ定義文字列
	 * @return 実行結果
	 * @throws RequestParameterException
	 * @throws SCException
	 */
	@SuppressWarnings("unchecked")
	private Map<?, ?> callAddSvcKeiAdslSc(
							SessionHandle handle,
							IRequestParameterReadWrite param,
							String funcCd,
							String ccName) throws RequestParameterException, SCException
	{
		/*****************************************************/
		/** サービス契約＜eoADSL＞登録SCへの上りマッピング */
		/*****************************************************/
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		Map<String, Object> ccParam = (Map<String, Object>)param.getData(ccName);
		inMap.put(EKK0141D010CBSMsg.SYSID, ccParam.get("sysid"));
		inMap.put(EKK0141D010CBSMsg.SVC_CD, ccParam.get("svc_cd"));
		inMap.put(EKK0141D010CBSMsg.PRC_GRP_CD, ccParam.get("prc_grp_cd"));
		inMap.put(EKK0141D010CBSMsg.PCRS_CD, ccParam.get("pcrs_cd"));
		inMap.put(EKK0141D010CBSMsg.PPLAN_CD, ccParam.get("pplan_cd"));
		inMap.put(EKK0141D010CBSMsg.PAYWAY_KEIZOKU_FLG, ccParam.get("payway_keizoku_flg"));
		inMap.put(EKK0141D010CBSMsg.ADSL_TYPE_CD, ccParam.get("adsl_type_cd"));
		inMap.put(EKK0141D010CBSMsg.AREA_JUDGE_KYOKU_NO, getKyokuNo((String)ccParam.get("adsl_use_telno")));
		inMap.put(EKK0141D010CBSMsg.ADSL_USE_TELNO, ccParam.get("adsl_use_telno"));
		inMap.put(EKK0141D010CBSMsg.ADSL_KAISEN_SBT_CD, ccParam.get("adsl_kaisen_sbt_cd"));
		inMap.put(EKK0141D010CBSMsg.ADSL_KAISEN_MEIGIN_NM, ccParam.get("adsl_kaisen_meigin_nm"));
		inMap.put(EKK0141D010CBSMsg.ANALOG_SWITCH_SHONIN_DIV, ccParam.get("analog_switch_shonin_div"));
		inMap.put(EKK0141D010CBSMsg.ADSL_TAKNIKJ_CD, ccParam.get("adsl_taknikj_cd"));
		inMap.put(EKK0141D010CBSMsg.WORK_RRK_BIKO, ccParam.get("work_rrk_biko"));
		HashMap<String, Object> paramMap = JKKBpCommon.createScParamForSearch(
				param, EKK0141D010CBSMsg.TEMPLATEID, EKK0141D010CBSMsg.class,
				inMap, funcCd);

		/***************************************************/
		/** ＳＣ呼出実行                                   */
		/***************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		JKKBpCommon.printBpDebugLog(this.getClass(), "サービス契約＜eoADSL＞登録SC呼び出し開始");
		Map<?, ?> result = scCall.run(paramMap, handle);
		JKKBpCommon.printBpDebugLog(this.getClass(), "サービス契約＜eoADSL＞登録SC呼び出し完了" + result);

		return result;
	}

	/**
	 * サービス契約＜eoADSL＞情報変更SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param funcCd 機能コード
	 * @param ccName ユーザ定義文字列
	 * @return 実行結果
	 * @throws RequestParameterException
	 * @throws SCException
	 */
	@SuppressWarnings("unchecked")
	private Map<?, ?> callUpdSvcKeiAdslSc(
							SessionHandle handle,
							IRequestParameterReadWrite param,
							String funcCd,
							String ccName) throws RequestParameterException, SCException
	{
		/*****************************************************/
		/** サービス契約＜eoADSL＞情報変更SCへの上りマッピング */
		/*****************************************************/
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		Map<String, Object> ccParam = (Map<String, Object>)param.getData(ccName);
		inMap.put(EKK0141C040CBSMsg.SVC_KEI_NO, ccParam.get("svc_kei_no"));
		inMap.put(EKK0141C040CBSMsg.SKEKKA_CD, ccParam.get("skekka_cd"));
		inMap.put(EKK0141C040CBSMsg.SKEKKA_DTL_CD, ccParam.get("skekka_dtl_cd"));
		inMap.put(EKK0141C040CBSMsg.SKEKKA_HOKI_CD, ccParam.get("skekka_hoki_cd"));
		inMap.put(EKK0141C040CBSMsg.SKEKKA_SEND_CD, ccParam.get("skekka_send_cd"));
		inMap.put(EKK0141C040CBSMsg.AUTO_SHOSA_TRAN_STAT_CD, "0");
		HashMap<String, Object> paramMap = JKKBpCommon.createScParamForSearch(
				param, EKK0141C040CBSMsg.TEMPLATEID, EKK0141C040CBSMsg.class,
				inMap, funcCd);

		/***************************************************/
		/** ＳＣ呼出実行                                   */
		/***************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		JKKBpCommon.printBpDebugLog(this.getClass(), "サービス契約＜eoADSL＞情報変更SC呼び出し開始");
		Map<?, ?> result = scCall.run(paramMap, handle);
		JKKBpCommon.printBpDebugLog(this.getClass(), "サービス契約＜eoADSL＞情報変更SC呼び出し完了" + result);

		return result;
	}

	/**
	 * ADSL可能エリア一覧照会SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param funcCd 機能コード
	 * @param ccName ユーザ定義文字列
	 * @return 実行結果
	 * @throws RequestParameterException 
	 * @throws SCException 
	 */
	@SuppressWarnings("unchecked")
	private Map<?, ?> callChkAdslAreaSc(SessionHandle handle, IRequestParameterReadWrite param, String funcCd, String ccName)
	throws RequestParameterException, SCException
	{
		/*****************************************************/
		/** ADSL可能エリア一覧照会SCへの上りマッピング */
		/*****************************************************/
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		Map<String, Object> ccParam = (Map<String, Object>)param.getData(ccName);
		String area_trgt_course_cd = (String)ccParam.get("area_trgt_course_cd");
		String judgeKyokuNo = getJudgeKyokuNo((String)ccParam.get("adsl_use_telno"));

		inMap.put(EFU0041B010CBSMsg.KEY_AREA_TRGT_COURSE_CD, area_trgt_course_cd);
		inMap.put(EFU0041B010CBSMsg.KEY_JUDGE_KYOKU_NO, judgeKyokuNo);
		HashMap<String, Object> paramMap = JKKBpCommon.createScParamForSearch(
				param, EFU0041B010CBSMsg.TEMPLATEID, EFU0041B010CBSMsg.class,
				inMap, funcCd);

		/***************************************************/
		/** ＳＣ呼出実行                                   */
		/***************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		JKKBpCommon.printBpDebugLog(this.getClass(), "ADSL可能エリア一覧照会SC呼び出し開始");
		Map<?, ?> result = scCall.run(paramMap, handle);
		JKKBpCommon.printBpDebugLog(this.getClass(), "ADSL可能エリア一覧照会SC呼び出し完了" + result);

		return result;
	}

	/**
	 * オプションサービス契約＜IPS＞登録SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param funcCd 機能コード
	 * @param ccName ユーザ定義文字列
	 * @return 実行結果
	 * @throws RequestParameterException
	 * @throws SCException
	 */
	@SuppressWarnings("unchecked")
	private Map<?, ?> callAddSvcKeiOptionIpsSc(SessionHandle handle, IRequestParameterReadWrite param, String funcCd, String ccName)
	throws RequestParameterException, SCException
	{
		/*****************************************************/
		/** オプションサービス契約＜IPS＞登録SCへの上りマッピング */
		/*****************************************************/
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		Map<String, Object> ccParam = (Map<String, Object>)param.getData(ccName);
		inMap.put(EKK0361D010CBSMsg.SYSID, ccParam.get("sysid"));
		inMap.put(EKK0361D010CBSMsg.OP_SVC_CD, ccParam.get("op_svc_cd"));
		inMap.put(EKK0361D010CBSMsg.PCRS_CD, ccParam.get("op_pcrs_cd"));
		inMap.put(EKK0361D010CBSMsg.PPLAN_CD, ccParam.get("op_pplan_cd"));

		HashMap<String, Object> paramMap = JKKBpCommon.createScParamForSearch(
				param, EKK0361D010CBSMsg.TEMPLATEID, EKK0361D010CBSMsg.class,
				inMap, funcCd);

		/***************************************************/
		/** ＳＣ呼出実行                                   */
		/***************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		JKKBpCommon.printBpDebugLog(this.getClass(), "オプションサービス契約＜IPS＞登録SC呼び出し開始");
		Map<?, ?> result = scCall.run(paramMap, handle);
		JKKBpCommon.printBpDebugLog(this.getClass(), "オプションサービス契約＜IPS＞登録SC呼び出し完了" + result);

		return result;
	}

	/**
	 * ＢＰチェック用の入力パラメータを作成する。
	 * <br />
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @return ＢＰチェック用パラメータ
	 */
	@SuppressWarnings("unchecked")
	public HashMap getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
	{
		// BPチェックは行わない(0件のCAANMsg配列を返却)
		return JKKBpCommon.createBpNotCheckParam();
	}

	/**
	 * ＢＰチェック結果を編集する。
	 * <br />
	 * @param param リクエストパラメータ
	 * @param caanMsgs サービスインターフェイス用のパラメータ配列
	 * @param returnCode リターンコード
	 * @return リクエストパラメータ
	 */
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, CAANMsg[] caanMsgs, Integer returnCode)
	{
		// BPチェックを行わない為、チェック結果の編集も不要
		return param;
	}
	
	/**
	 * 電話番号から判定局番を取得する処理です。
	 * @param telno 電話番号
	 * @return 判定局番
	 */
	private String getJudgeKyokuNo(String telno)
	{
		int cutLength = 7;
		if (telno == null || telno.length() < cutLength)
		{
			return telno;
		}
		
		return telno.substring(0, cutLength);
	}
	
	/**
	 * 電話番号から局番を取得する処理です。
	 * @param telno 電話番号
	 * @return 局番
	 */
	private String getKyokuNo(String telno)
	{
		int cutLength = 6;
		if (telno == null || telno.length() < cutLength)
		{
			return telno;
		}
		
		return telno.substring(0, cutLength);
	}
}
