/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKMansionPayHoshikiGetterCC
*	ソースファイル名：JKKMansionPayHoshikiGetterCC.java
*	作成者			：富士通
*	日付			：2013年03月25日
*＜機能概要＞
*	マッピングCCです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/09/05	FJ		新規作成
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
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 com.sun.enterprise.tools.common.util.StringUtils;

import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EKK0881B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0891A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0891A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0891B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0891B002CBSMsg1List;

public class JKKMansionPayHoshikiGetterCC extends AbstractCommonComponent
{
	
	//--------------------------------------------------
	// 入力情報マップ設定項目キー
	//--------------------------------------------------
	/** 入力情報マップ:リクエストパラメータ */
	private static final String IN_INF_KEY_REQ_PARAM = "req_param";
	/** 入力情報マップ:ユーザ任意文字列 */
	private static final String IN_INF_KEY_FIXED_TEXT = "fixed_text";

	//--------------------------------------------------
	// サービスI/Fマッピング共通情報マップ設定項目キー
	//--------------------------------------------------
	/** サービスI/Fマッピング共通情報マップ[上り]:CBSMsgクラス */
	private static final String SVC_IF_CMN_INF_KEY_USE_CBSMSG = "use_cbsmsg";
	/** サービスI/Fマッピング共通情報マップ[上り]:テンプレートID(キー名) */
	private static final String SVC_IF_CMN_INF_KEY_USE_TEMP_ID_KEY = "use_temp_id_key";
	/** サービスI/Fマッピング共通情報マップ[上り]:テンプレートID(設定値) */
	private static final String SVC_IF_CMN_INF_KEY_USE_TEMP_ID_VAL = "use_temp_id_val";
	/** サービスI/Fマッピング共通情報マップ[上り]:機能コード(キー名) */
	private static final String SVC_IF_CMN_INF_KEY_USE_FUNC_CD_KEY = "use_func_cd_key";
	/** サービスI/Fマッピング共通情報マップ[上り]:機能コード(設定値) */
	private static final String SVC_IF_CMN_INF_KEY_USE_FUNC_CD_VAL = "use_func_cd_val";
	/** サービスI/Fマッピング共通情報マップ[下り]:明細リスト名 */
	private static final String SVC_IF_CMN_INF_KEY_USE_DTL_LST_NM = "use_dtl_lst_nm";
	/** サービスI/Fマッピング共通情報マップ[下り]:param <---> サービスI/F 変換マップ名 */
	private static final String SVC_IF_CMN_INF_KEY_USE_CONV_MAP_NM = "use_conv_map_nm";
	/** サービスI/Fマッピング共通情報マップ[下り]:ステータス項目名 */
	private static final String SVC_IF_CMN_INF_KEY_USE_STS_COLUM_NM = "use_sts_colum_nm";

	//--------------------------------------------------
	// テンプレートID
	//--------------------------------------------------
	/** EKK0891A010 提供方式契約一意照会 */
	private static final String TEMPLATE_ID_EKK0891A010 = "EKK0891A010";
	/** EKK0891B002 提供方式契約一覧照会 */
	private static final String TEMPLATE_ID_EKK0891B002 = "EKK0891B002";

	//--------------------------------------------------------------------
	// 照会 - 検索条件格納マップ用キー項目
	//--------------------------------------------------------------------
	/** 検索条件格納マップ用キー項目:回線使用契約番号 */
	public static final String COND_KEY_KAISEN_USE_KEI_NO = "cond_key_kaisen_use_kei_no";
	/** 検索条件格納マップ用キー項目:提供方式契約番号 */
	public static final String COND_KEY_TK_HOSHIKI_KEI_NO = "cond_key_tk_hoshiki_kei_no";
	
	//--------------------------------------------------
	// param <---> サービスI/F 変換マップ名
	//--------------------------------------------------
	/** EKK0891A010 提供方式契約一意照会 */
	private static final String EKK0891A010_MAP = "kk0891_a010_map";
	/** EKK0891B002 提供方式契約一覧照会 */
	private static final String EKK0891B002_MAP = "kk0891_b002_map";
	
	//--------------------------------------------------
	// リターンコード
	//--------------------------------------------------
	/** リターンコード: -1 */
	private static final Integer RTN_CODE_MINUS = -1;
	/** リターンコード: 0000 */
	private static final Integer RTN_CODE_0000 = 0;
	/** リターンコード: 9000 */
	private static final Integer RTN_CODE_9000 = 9000;
	/** リターンメッセージ: "RETURN_MESSAGE_" */
	private static final String RETURN_MSG_ = "RETURN_MESSAGE_";
	/** リターンメッセージ: フォーマット(%1$04d) */
	private static final String RETURN_MSG_FORMAT = "%1$04d";
	
	//--------------------------------------------------
	// エラーメッセージ
	//--------------------------------------------------
	/** エラーメッセージ: 実行結果エラーあり */
	public static final String ERR_STR_RESULT_CD = "サービスコンポーネントの実行結果にエラーがあります";
	
	
	/** StringクラスのEmpty値 */
	public static final String STR_EMPTY = new String();


	/** セッションハンドル保持域 */
	private static ThreadLocal<SessionHandle> keepSesHandle = new ThreadLocal<SessionHandle>()
	{
		// 保持域への設定はinitialValue()ではなくset()を使用する為、
		// initialValue()は実装しない
	};

	
	/**
	 * チェック処理です。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @throws Throwable 
	 * @exception RequestParameterExceptionがスローされます。
	 */
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) 
	throws Throwable
	{
		return null;
	}

	/**
	 *<DL>
	 *<DT>エラー転記処理です。
	 *<DD>サービスコンポーネント実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 *</DL>
	 * 
	 * @param param (I) 業務データ取得・書込用I/F
	 * @param templates (I) CAANMsgクラス配列
	 * @param returnCode (I) リターンコード
	 * @param fixedText (I) ユーザ任意文字列
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable 
	 */
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, String fixedText)
	throws Throwable
	{
		return null;
	}


	/**
	 * CCへのマッピング処理を行います
	 * <br>
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return
	 * @throws Throwable
	 */
	@SuppressWarnings({ "unchecked" })
	public IRequestParameterReadWrite execute(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		
// OM-2013-0004303対応 20131120 星野 ADD START
		try {
// OM-2013-0004303対応 20131120 星野 ADD END
			/** 事前準備 */
			HashMap<String, Object> paramMap = (HashMap<String, Object>)param.getData(fixedText);
	
			/** リソース保持 */
			// セッションハンドルをローカル変数に保持
			keepSesHandle.set( handle );
			
			
			/** マンション契約一覧照会（複合検索）マップ取得 */
			String mansInfoKey = (String) paramMap.get("mansInfoKey");
			HashMap<String, Object> mansInfoMap = (HashMap<String, Object>)param.getData(mansInfoKey);
			
			if( mansInfoMap != null && mansInfoMap.containsKey("EKK0881B002CBSMsg1List")){
				ArrayList<HashMap<String, Object>> mansInfoList = (ArrayList)mansInfoMap.get("EKK0881B002CBSMsg1List");
				if(mansInfoList != null){
					for(HashMap<String, Object> mansChildMap : mansInfoList){
						
						String kaisenUseKeiNo = "";
						if( !StringUtils.isEmpty( (String)mansChildMap.get(EKK0881B002CBSMsg1List.KAISEN_USE_KEI_NO_NET) ) ){
							kaisenUseKeiNo = (String)mansChildMap.get(EKK0881B002CBSMsg1List.KAISEN_USE_KEI_NO_NET);
						}else if( !StringUtils.isEmpty( (String)mansChildMap.get(EKK0881B002CBSMsg1List.KAISEN_USE_KEI_NO_TV) ) ){
							kaisenUseKeiNo = (String)mansChildMap.get(EKK0881B002CBSMsg1List.KAISEN_USE_KEI_NO_TV);
						}
						
						/** 加入契約支払い方式設定 */
						setKanyuKeiPayHoshiki(param, fixedText,mansChildMap, kaisenUseKeiNo);
						
					}
				}
			}
	
			return param;
// OM-2013-0004303対応 20131120 星野 ADD START
		} finally {

			// ・セッションハンドル保持域
			if(keepSesHandle.get() != null){
				keepSesHandle.remove();
			}
		}

// OM-2013-0004303対応 20131120 星野 ADD END
	}

	private void setKanyuKeiPayHoshiki(
		IRequestParameterReadWrite param,
		String fixedText, 
		HashMap<String, Object> mansChildMap, 
		String kaisenUseKeiNo
	) throws Exception {
		
		/** 事前準備 */
		HashMap<String, String> condMap;
		HashMap<String, Object> reqMap;
		Map<?, ?> resMap;
		
		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		if( !StringUtils.isEmpty(kaisenUseKeiNo) ){
			
			/** 提供方式契約情報 取得 */
			// EKK0891B002  提供方式契約一覧照会
			condMap = new HashMap<String, String>();

			// 回線使用契約番号を設定
			condMap.put(COND_KEY_KAISEN_USE_KEI_NO, kaisenUseKeiNo);
			reqMap = setEKK0891B002( param, fixedText, condMap );
			resMap = scCall.run( reqMap, keepSesHandle.get() );
			ArrayList<HashMap<String, Object>> kk0891_b002_map_list = getEKK0891B002( param, fixedText, resMap );
			scResultCheck( param );
			
			if( kk0891_b002_map_list != null && !kk0891_b002_map_list.isEmpty() ){
				
				HashMap<String, Object> kk0891_b002_map = kk0891_b002_map_list.get(0);
				String tkHoshikiKeiNo = (String) kk0891_b002_map.get(EKK0891B002CBSMsg1List.TK_HOSHIKI_KEI_NO);
				
				if( !StringUtils.isEmpty(tkHoshikiKeiNo) ){
					
					// ・EKK0891A010 提供方式契約一意照会
					condMap.clear();
					condMap.put( COND_KEY_TK_HOSHIKI_KEI_NO, tkHoshikiKeiNo );
					reqMap = setEKK0891A010( param, fixedText, condMap );
					resMap = scCall.run( reqMap, keepSesHandle.get() );
					HashMap<String, Object> kk0891_a010_map = getEKK0891A010( param, fixedText, resMap );
					scResultCheck( param );
					
					// 加入契約支払方式コード
					mansChildMap.put("kk0891_kanyu_kei_pay_hoshiki_cd", kk0891_a010_map.get(EKK0891A010CBSMsg1List.KANYU_KEI_PAY_HOSHIKI_CD));
					// 加入契約支払方式コード名称
					mansChildMap.put("kk0891_kanyu_kei_pay_hoshiki_cd_nm", kk0891_a010_map.get(EKK0891A010CBSMsg1List.KANYU_KEI_PAY_HOSHIKI_CD_NM));
				}
			}
		}
	}
	
	
	
	/**
	 * EKK0891B002 提供方式契約一覧照会 上りマッピング.
	 * <br>
	 * @param   reqParam   モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @param   condMap    検索条件格納マップ
	 * @throws  Exception  例外が発生した場合
	 * @return  サービスIF実行用のマッピング情報
	 */
	public HashMap<String, Object> setEKK0891B002( IRequestParameterReadWrite reqParam, String fixedText, HashMap<String, String> condMap ) throws RequestParameterException {

		/** 入力情報マップ 生成 */
		HashMap<String, Object> inInfoMap = new HashMap<String, Object>();
		inInfoMap.put( IN_INF_KEY_REQ_PARAM, reqParam );
		inInfoMap.put( IN_INF_KEY_FIXED_TEXT, fixedText );

		/** サービスI/Fマッピング共通情報マップ 生成 */
		HashMap<String, Object> svcIfCmnInfMap = new HashMap<String, Object>();
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_CBSMSG, EKK0891B002CBSMsg.class );
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_TEMP_ID_KEY, EKK0891B002CBSMsg.TEMPLATEID );
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_TEMP_ID_VAL, TEMPLATE_ID_EKK0891B002 );
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_FUNC_CD_KEY, EKK0891B002CBSMsg.FUNC_CODE );
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_FUNC_CD_VAL, JPCModelConstant.FUNC_CD_1 );

		/** 設定値格納マップ 生成  ※検索条件を格納 */
		HashMap<String, Object> setDtMap = new HashMap<String, Object>();
		// condMap.回線使用契約番号 ⇒ EKK0891B002.ＫＥＹ＿回線使用契約番号
		setDtMap.put( EKK0891B002CBSMsg.KEY_KAISEN_USE_KEI_NO, condMap.get( COND_KEY_KAISEN_USE_KEI_NO ) );

		/** 上りマッピング実施 */
		return setUppMapping( inInfoMap, svcIfCmnInfMap, setDtMap );
	}
	
	/**
	 * EKK0891B002 提供方式契約一覧照会 下りマッピング.
	 * <br>
	 * @param   reqParam   モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @param   resultMap  サービスIFの結果が格納されているマップ情報
	 * @throws  Exception  例外が発生した場合
	 * @return  下りマッピング項目
	 */
	public ArrayList<HashMap<String, Object>> getEKK0891B002( IRequestParameterReadWrite reqParam, String fixedText, Map<?, ?> resultMap ) throws Exception {

		/** 事前準備 */
		// 返却データ項目名
		String[] resDataColums = {
				// 提供方式契約番号
				EKK0891B002CBSMsg1List.TK_HOSHIKI_KEI_NO,
				// 提供設備種別コード
				EKK0891B002CBSMsg1List.TK_EQUIP_SBT_CD,
				// 提供設備帯域種別コード
				EKK0891B002CBSMsg1List.TK_EQUIP_TAIIKI_SBT_CD,
				// 回線使用契約番号
				EKK0891B002CBSMsg1List.KAISEN_USE_KEI_NO,
				// マンションプランコード
				EKK0891B002CBSMsg1List.MANSION_PLAN_CD,
				// マンションプランコード名称
				EKK0891B002CBSMsg1List.MANSION_PLAN_CD_NM,
				// 提供方式パターンコード
				EKK0891B002CBSMsg1List.TK_HOSHIKI_PATTERN_CD,
				// 提供方式コード
				EKK0891B002CBSMsg1List.TK_HOSHIKI_CD,
				// アクセス回線速度コード
				EKK0891B002CBSMsg1List.ACCSS_KISN_SPEED_CD,
				// 棟内速度コード
				EKK0891B002CBSMsg1List.TONAI_SPEED_CD,
				// 加入契約支払方式コード
				EKK0891B002CBSMsg1List.KANYU_KEI_PAY_HOSHIKI_CD,
				// 提供料金種別コード
				EKK0891B002CBSMsg1List.TK_PRC_SBT_CD,
				// 提供方式詳細メモ
				EKK0891B002CBSMsg1List.TK_HOSHIKI_DTAIL_MEMO,
				// サービス課金開始年月日
				EKK0891B002CBSMsg1List.SVC_CHRG_STAYMD,
				// サービス課金終了年月日
				EKK0891B002CBSMsg1List.SVC_CHRG_ENDYMD,
				// 登録年月日時分秒
				EKK0891B002CBSMsg1List.ADD_DTM,
				// 登録オペレータアカウント
				EKK0891B002CBSMsg1List.ADD_OPEACNT,
				// 更新年月日時分秒
				EKK0891B002CBSMsg1List.UPD_DTM,
				// 更新オペレータアカウント
				EKK0891B002CBSMsg1List.UPD_OPEACNT,
				// 削除年月日時分秒
				EKK0891B002CBSMsg1List.DEL_DTM,
				// 削除オペレータアカウント
				EKK0891B002CBSMsg1List.DEL_OPEACNT,
				// 無効フラグ
				EKK0891B002CBSMsg1List.MK_FLG,
				// 無効フラグ名称
				EKK0891B002CBSMsg1List.MK_FLG_NM,
				// 提供方式コード名称
				EKK0891B002CBSMsg1List.TK_HOSHIKI_CD_NM,
				// アクセス回線速度コード名称
				EKK0891B002CBSMsg1List.ACCSS_KISN_SPEED_CD_NM,
				// 提供料金種別コード名称
				EKK0891B002CBSMsg1List.TK_PRC_SBT_CD_NM,
				// ｅｏ光ネット従量プラン申込可否
				EKK0891B002CBSMsg1List.EOHNT_JURYO_PLAN_MKM_KH,
				// ｅｏ光ネット従量プラン申込可否名称
				EKK0891B002CBSMsg1List.EOHNT_JURYO_PLAN_MKM_KH_NM,
				// マンション営業管理対象物件名
				EKK0891B002CBSMsg1List.MSBSN_KRTG_BKN_NM,
				// マンション営業管理対象物件形態コード
				EKK0891B002CBSMsg1List.MSBSN_KRTG_BKN_FORM_CD,
				// マンション営業管理対象物件住所コード
				EKK0891B002CBSMsg1List.MSBSN_KRTG_BKN_AD_CD,
				// マンション営業管理対象物件郵便番号
				EKK0891B002CBSMsg1List.MSBSN_KRTG_BKN_PCD,
				// マンション営業管理対象物件都道府県名
				EKK0891B002CBSMsg1List.MSBSN_KRTG_BKN_STATE_NM,
				// マンション営業管理対象物件市区町村名
				EKK0891B002CBSMsg1List.MSBSN_KRTG_BKN_CITY_NM,
				// マンション営業管理対象物件大字通称名
				EKK0891B002CBSMsg1List.MSBSN_KRTG_BKN_OAZTSU_NM,
				// マンション営業管理対象物件字丁目名
				EKK0891B002CBSMsg1List.MSBSN_KRTG_BKN_AZCHO_NM,
				// マンション営業管理対象物件番地号
				EKK0891B002CBSMsg1List.MSBSN_KRTG_BKN_BNCHIGO
		};

		// エラー項目へ割付するデータ項目名
		String[] errMappingDataColums = {
				// ＫＥＹ＿回線使用契約番号
				EKK0891B002CBSMsg.KEY_KAISEN_USE_KEI_NO_ERR
		};


		/** 入力情報マップ 生成 */
		HashMap<String, Object> inInfoMap = new HashMap<String, Object>();
		inInfoMap.put( IN_INF_KEY_REQ_PARAM, reqParam );
		inInfoMap.put( IN_INF_KEY_FIXED_TEXT, fixedText );

		/** サービスI/Fマッピング共通情報マップ 生成 */
		HashMap<String, Object> svcIfCmnInfMap = new HashMap<String, Object>();
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_CONV_MAP_NM, EKK0891B002_MAP );
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_DTL_LST_NM, EKK0891B002CBSMsg.EKK0891B002CBSMSG1LIST );
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_STS_COLUM_NM, EKK0891B002CBSMsg.STATUS );

		/** 返却データ項目名リスト 生成 */
		ArrayList<String> resDtLst = new ArrayList<String>();
		for( int i=0; i < resDataColums.length; i++ ){
			resDtLst.add( resDataColums[i] );
		}

		/** エラー項目へ割付するデータ項目名リスト 生成 */
		ArrayList<String> errDtLst = new ArrayList<String>();
		for( int i=0; i < errMappingDataColums.length; i++ ){
			errDtLst.add( errMappingDataColums[i] );
		}

		/** 下りマッピング実施 */
		return setSelDwnMappingToLst( inInfoMap, svcIfCmnInfMap, resultMap, resDtLst, errDtLst );
	}

	/**
	 * EKK0891A010 提供方式契約一意照会 上りマッピング.
	 * <br>
	 * @param   reqParam   モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @param   condMap    検索条件格納マップ
	 * @throws  Exception  例外が発生した場合
	 * @return  サービスIF実行用のマッピング情報
	 */
	public HashMap<String, Object> setEKK0891A010( IRequestParameterReadWrite reqParam, String fixedText, HashMap<String, String> condMap ) throws RequestParameterException {

		/** 入力情報マップ 生成 */
		HashMap<String, Object> inInfoMap = new HashMap<String, Object>();
		inInfoMap.put( IN_INF_KEY_REQ_PARAM, reqParam );
		inInfoMap.put( IN_INF_KEY_FIXED_TEXT, fixedText );

		/** サービスI/Fマッピング共通情報マップ 生成 */
		HashMap<String, Object> svcIfCmnInfMap = new HashMap<String, Object>();
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_CBSMSG, EKK0891A010CBSMsg.class );
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_TEMP_ID_KEY, EKK0891A010CBSMsg.TEMPLATEID );
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_TEMP_ID_VAL, TEMPLATE_ID_EKK0891A010 );
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_FUNC_CD_KEY, EKK0891A010CBSMsg.FUNC_CODE );
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_FUNC_CD_VAL, JPCModelConstant.FUNC_CD_1 );

		/** 設定値格納マップ 生成  ※検索条件を格納 */
		HashMap<String, Object> setDtMap = new HashMap<String, Object>();
		// condMap.提供方式契約番号 ⇒ EKK0891A010.ＫＥＹ＿提供方式契約番号
		setDtMap.put( EKK0891A010CBSMsg.KEY_TK_HOSHIKI_KEI_NO, condMap.get( COND_KEY_TK_HOSHIKI_KEI_NO ) );

		/** 上りマッピング実施 */
		return setUppMapping( inInfoMap, svcIfCmnInfMap, setDtMap );
	}

	/**
	 * EKK0891A010 提供方式契約一意照会 下りマッピング.
	 * <br>
	 * @param   reqParam   モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @param   resultMap  サービスIFの結果が格納されているマップ情報
	 * @throws  Exception  例外が発生した場合
	 * @return  下りマッピング項目
	 */
	public HashMap<String, Object> getEKK0891A010( IRequestParameterReadWrite reqParam, String fixedText, Map<?, ?> resultMap ) throws Exception {

		/** 事前準備 */
		// 返却データ項目名
		String[] resDataColums = {
				// 提供方式契約番号
				EKK0891A010CBSMsg1List.TK_HOSHIKI_KEI_NO,
				// 提供設備種別コード
				EKK0891A010CBSMsg1List.TK_EQUIP_SBT_CD,
				// 提供設備帯域種別コード
				EKK0891A010CBSMsg1List.TK_EQUIP_TAIIKI_SBT_CD,
				// 回線使用契約番号
				EKK0891A010CBSMsg1List.KAISEN_USE_KEI_NO,
				// マンションプランコード
				EKK0891A010CBSMsg1List.MANSION_PLAN_CD,
				// マンションプランコード名称
				EKK0891A010CBSMsg1List.MANSION_PLAN_CD_NM,
				// 提供方式パターンコード
				EKK0891A010CBSMsg1List.TK_HOSHIKI_PATTERN_CD,
				// 提供方式コード
				EKK0891A010CBSMsg1List.TK_HOSHIKI_CD,
				// 提供方式コード名称
				EKK0891A010CBSMsg1List.TK_HOSHIKI_CD_NM,
				// アクセス回線速度コード
				EKK0891A010CBSMsg1List.ACCSS_KISN_SPEED_CD,
				// アクセス回線速度コード名称
				EKK0891A010CBSMsg1List.ACCSS_KISN_SPEED_CD_NM,
				// 棟内速度コード
				EKK0891A010CBSMsg1List.TONAI_SPEED_CD,
				// 棟内速度コード名称
				EKK0891A010CBSMsg1List.TONAI_SPEED_CD_NM,
				// 加入契約支払方式コード
				EKK0891A010CBSMsg1List.KANYU_KEI_PAY_HOSHIKI_CD,
				// 加入契約支払方式コード名称
				EKK0891A010CBSMsg1List.KANYU_KEI_PAY_HOSHIKI_CD_NM,
				// 提供料金種別コード
				EKK0891A010CBSMsg1List.TK_PRC_SBT_CD,
				// 提供料金種別コード名称
				EKK0891A010CBSMsg1List.TK_PRC_SBT_CD_NM,
				// 提供方式詳細メモ
				EKK0891A010CBSMsg1List.TK_HOSHIKI_DTAIL_MEMO,
				// サービス課金開始年月日
				EKK0891A010CBSMsg1List.SVC_CHRG_STAYMD,
				// サービス課金終了年月日
				EKK0891A010CBSMsg1List.SVC_CHRG_ENDYMD,
				// 登録年月日時分秒
				EKK0891A010CBSMsg1List.ADD_DTM,
				// 登録オペレータアカウント
				EKK0891A010CBSMsg1List.ADD_OPEACNT,
				// 更新年月日時分秒
				EKK0891A010CBSMsg1List.UPD_DTM,
				// 更新オペレータアカウント
				EKK0891A010CBSMsg1List.UPD_OPEACNT,
				// 削除年月日時分秒
				EKK0891A010CBSMsg1List.DEL_DTM,
				// 削除オペレータアカウント
				EKK0891A010CBSMsg1List.DEL_OPEACNT,
				// 無効フラグ
				EKK0891A010CBSMsg1List.MK_FLG,
				// 無効フラグ名称
				EKK0891A010CBSMsg1List.MK_FLG_NM,
				// マンション提供ステータスコード
				EKK0891A010CBSMsg1List.MANS_TK_STAT_CD,
				// サービス開始年月日
				EKK0891A010CBSMsg1List.SVC_STA_YMD,
				// サービス開始予定年月日
				EKK0891A010CBSMsg1List.SVC_STA_RSV_YMD,
				// サービス終了年月日
				EKK0891A010CBSMsg1List.SVC_END_YMD,
				// eo光ネット従量プラン申込可否
				EKK0891A010CBSMsg1List.EOHNT_JURYO_PLAN_MKM_KH,
				// eo光ネット従量プラン申込可否名称
				EKK0891A010CBSMsg1List.EOHNT_JURYO_PLAN_MKM_KH_NM,
				// 審査済フラグ
				EKK0891A010CBSMsg1List.JUDGE_ZUMI_FLG,
				// 審査済フラグ名称
				EKK0891A010CBSMsg1List.JUDGE_ZUMI_FLG_NM,
				// 照査済フラグ
				EKK0891A010CBSMsg1List.SHOSA_ZUMI_FLG,
				// 照査済フラグ名称
				EKK0891A010CBSMsg1List.SHOSA_ZUMI_FLG_NM,
				// 物件管理番号
				EKK0891A010CBSMsg1List.BKN_KNRI_NO,
				// マンション営業管理対象物件名
				EKK0891A010CBSMsg1List.MSBSN_KRTG_BKN_NM,
				// マンション営業管理対象物件カナ名
				EKK0891A010CBSMsg1List.MSBSN_KRTG_BKN_KANA,
				// 仮称フラグ
				EKK0891A010CBSMsg1List.KSYO_FLG,
				// 新築既設コード
				EKK0891A010CBSMsg1List.NEWCONST_KST_CD,
				// 新築既設コード名称
				EKK0891A010CBSMsg1List.NEWCONST_KST_CD_NM,
				// マンション営業管理対象物件形態コード
				EKK0891A010CBSMsg1List.MSBSN_KRTG_BKN_FORM_CD,
				// マンション営業管理対象物件形態コード名称
				EKK0891A010CBSMsg1List.MSBSN_KRTG_BKN_FORM_CD_NM,
				// マンション営業管理対象物件住所コード
				EKK0891A010CBSMsg1List.MSBSN_KRTG_BKN_AD_CD,
				// マンション営業管理対象物件郵便番号
				EKK0891A010CBSMsg1List.MSBSN_KRTG_BKN_PCD,
				// マンション営業管理対象物件都道府県名
				EKK0891A010CBSMsg1List.MSBSN_KRTG_BKN_STATE_NM,
				// マンション営業管理対象物件市区町村名
				EKK0891A010CBSMsg1List.MSBSN_KRTG_BKN_CITY_NM,
				// マンション営業管理対象物件大字通称名
				EKK0891A010CBSMsg1List.MSBSN_KRTG_BKN_OAZTSU_NM,
				// マンション営業管理対象物件字丁目名
				EKK0891A010CBSMsg1List.MSBSN_KRTG_BKN_AZCHO_NM,
				// マンション営業管理対象物件番地号
				EKK0891A010CBSMsg1List.MSBSN_KRTG_BKN_BNCHIGO,
				// マンション営業管理対象物件最上階
				EKK0891A010CBSMsg1List.MSBSN_KRTG_BKN_MAX_FLR,
				// 住所未確定フラグ
				EKK0891A010CBSMsg1List.AD_MI_FIX_FLG,
				// 総棟数
				EKK0891A010CBSMsg1List.TTL_TOU_CNT,
				// 総戸数
				EKK0891A010CBSMsg1List.TTL_KOSU,
				// 竣工年月日
				EKK0891A010CBSMsg1List.SHUNKO_YMD,
				// 棟構成メモ
				EKK0891A010CBSMsg1List.TOU_KOSE_MEMO,
				// 棟別住所情報メモ
				EKK0891A010CBSMsg1List.TOU_BETU_AD_INFO_MEMO
		};

		// エラー項目へ割付するデータ項目名
		String[] errMappingDataColums = {
				// ＫＥＹ＿提供方式契約番号
				EKK0891A010CBSMsg.KEY_TK_HOSHIKI_KEI_NO_ERR
		};


		/** 入力情報マップ 生成 */
		HashMap<String, Object> inInfoMap = new HashMap<String, Object>();
		inInfoMap.put( IN_INF_KEY_REQ_PARAM, reqParam );
		inInfoMap.put( IN_INF_KEY_FIXED_TEXT, fixedText );

		/** サービスI/Fマッピング共通情報マップ 生成 */
		HashMap<String, Object> svcIfCmnInfMap = new HashMap<String, Object>();
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_CONV_MAP_NM, EKK0891A010_MAP );
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_DTL_LST_NM, EKK0891A010CBSMsg.EKK0891A010CBSMSG1LIST );
		svcIfCmnInfMap.put( SVC_IF_CMN_INF_KEY_USE_STS_COLUM_NM, EKK0891A010CBSMsg.STATUS );

		/** 返却データ項目名リスト 生成 */
		ArrayList<String> resDtLst = new ArrayList<String>();
		for( int i=0; i < resDataColums.length; i++ ){
			resDtLst.add( resDataColums[i] );
		}

		/** エラー項目へ割付するデータ項目名リスト 生成 */
		ArrayList<String> errDtLst = new ArrayList<String>();
		for( int i=0; i < errMappingDataColums.length; i++ ){
			errDtLst.add( errMappingDataColums[i] );
		}

		/** 下りマッピング実施 */
		return setSelDwnMappingToOne( inInfoMap, svcIfCmnInfMap, resultMap, resDtLst, errDtLst );
	}
	
	
	
	/**
	 * 上りマッピング共通処理[照会系,更新系].
	 * <br>
	 * @param   inInfMap        入力情報マップ
	 * @param   svcIfCmnInfMap  サービスI/Fマッピング共通情報マップ
	 * @param   setDtMap        設定値格納マップ
	 * @throws  Exception       例外が発生した場合
	 * @return  サービスIF実行用のマッピング情報
	 */
	private HashMap<String, Object> setUppMapping( HashMap<String, Object> inInfMap,
													HashMap<String, Object> svcIfCmnInfMap,
													HashMap<String, Object> setDtMap ) throws RequestParameterException {

		/** 事前処理 */
		// リクエストパラメータを取得
		IRequestParameterReadWrite reqParam = (IRequestParameterReadWrite)inInfMap.get( IN_INF_KEY_REQ_PARAM );

		// 使用するCBSMsgクラスを取得
		Class<?> cbsMsg = (Class<?>)svcIfCmnInfMap.get( SVC_IF_CMN_INF_KEY_USE_CBSMSG );

		// 使用するテンプレートIDを取得
		String templateIdKey = (String)svcIfCmnInfMap.get( SVC_IF_CMN_INF_KEY_USE_TEMP_ID_KEY );
		String templateIdVal = (String)svcIfCmnInfMap.get( SVC_IF_CMN_INF_KEY_USE_TEMP_ID_VAL );

		// 使用する機能コードを取得
		String funcCdKey = (String)svcIfCmnInfMap.get( SVC_IF_CMN_INF_KEY_USE_FUNC_CD_KEY );
		String funcCdVal = (String)svcIfCmnInfMap.get( SVC_IF_CMN_INF_KEY_USE_FUNC_CD_VAL );


		/** パラメータマップ設定 */
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		// 電文ID
		paramMap.put( JCMConstants.TRANZACTION_ID_KEY, reqParam.getTelegramID() );
		// ユースケースID
		paramMap.put( JCMConstants.USECASE_ID_KEY, reqParam.getUsecaseID() );
		// オペレーションID
		paramMap.put( JCMConstants.OPERATION_ID_KEY, reqParam.getOperationID() );
		// サービス呼出し区分
		paramMap.put( JCMConstants.CALL_TYPE_KEY, reqParam.getCallType() );
		// 依頼先ホスト名
		paramMap.put( JCMConstants.CLIENT_HOST_NAME_KEY, reqParam.getControlMapData( SCControlMapKeys.REQ_HOSTNAME ) );
		// 依頼元IPアドレス
		paramMap.put( JCMConstants.CLIENT_IP_ADDRESS_KEY, reqParam.getControlMapData( SCControlMapKeys.REQ_HOSTIP ) );
		// 依頼元画面ID
		paramMap.put( JCMConstants.INVOKE_GAMEN_ID_KEY, reqParam.getControlMapData( SCControlMapKeys.REQ_VIEWID ) );
		// オペレータID
		paramMap.put( JCMConstants.OPERATOR_ID_KEY, reqParam.getControlMapData( SCControlMapKeys.OPERATOR_ID ) );

		/** テンプレート設定 */
		CAANMsg template = new CAANMsg( cbsMsg.getName() );
		// オペレータID
		template.set( JCMConstants.OPERATOR_ID_KEY, reqParam.getControlMapData( SCControlMapKeys.OPERATOR_ID ) );
		// 運用日付
		template.set( JCMConstants.OPERATE_DATE_KEY, reqParam.getControlMapData( SCControlMapKeys.OPE_DATE ) );
		// 運用日時
		template.set( JCMConstants.OPERATE_DATETIME_KEY, reqParam.getControlMapData( SCControlMapKeys.OPE_TIME ) );
		// テンプレートID
		template.set( templateIdKey, templateIdVal );
		// 機能コード
		template.set( funcCdKey, funcCdVal );


		/** 上りマッピング */
		Iterator<Map.Entry<String, Object>> setDtMapIte = setDtMap.entrySet().iterator();
		while( setDtMapIte.hasNext() ){
			Map.Entry<String, Object> entry = (Map.Entry<String, Object>)setDtMapIte.next();

			/** nullチェック */
			if( entry.getValue() == null ){
				template.setNull( entry.getKey() );
				continue;
			}

			/** 単項目チェック */
			if( entry.getValue() instanceof String ) {
				String val = (String)entry.getValue();

				if( StringUtils.isEmpty( val )){
					template.setNull( entry.getKey() );
				} else {
					template.set( entry.getKey(), val );
				}
			}

			/** 一覧項目チェック */
			if( entry.getValue() instanceof ArrayList ){

				/** テンプレートへの追加する為のchildテンプレートリストの生成 */
				ArrayList<CAANMsg> child_template_lst = new ArrayList<CAANMsg>();

				/** 使用する明細リスト名を取得 */
				String dtlLstNm = (String)entry.getKey();

				/** 設定項目リストの格納域を取得 */
				ArrayList<HashMap<String, Object>> listDt = (ArrayList<HashMap<String, Object>>)entry.getValue();

				/** 設定項目リストの件数分、繰り返し */
				Iterator<HashMap<String, Object>> listDtIte = listDt.iterator();
				while(listDtIte.hasNext()){

					HashMap<String, Object> listDtMap = listDtIte.next();

					/** 使用するCBSMsgクラスを取得 */
					Class<?> childCbsMsg = (Class<?>)listDtMap.get( SVC_IF_CMN_INF_KEY_USE_CBSMSG );

					/** テンプレートへの追加する為のchildテンプレート生成 */
					CAANMsg childTemplate = new CAANMsg(childCbsMsg.getName());

					Iterator<Map.Entry<String, Object>> childEntryIte = listDtMap.entrySet().iterator();
					while( childEntryIte.hasNext() ){

						Map.Entry<String, Object> childEntry = (Map.Entry<String, Object>)childEntryIte.next();

						/** nullチェック */
						if( childEntry.getValue() == null ){
							childTemplate.setNull( childEntry.getKey() );
							continue;
						}

						/** 単項目チェック */
						if( childEntry.getValue() instanceof String ) {
							String val = (String)childEntry.getValue();

							if( StringUtils.isEmpty( val )){
								childTemplate.setNull( childEntry.getKey() );
							} else {
								childTemplate.set( childEntry.getKey(), val );
							}
						}
					}

					/** childテンプレートをchildテンプレートリストへ追加 */
					child_template_lst.add( childTemplate );
				}

				/** 一覧項目をテンプレートに追加 */
				if( child_template_lst.size() > 0 ){
					template.set( dtlLstNm, child_template_lst.toArray( new CAANMsg[0] ));
				}
			}
		}

		/** パラメータマップとテンプレートのマッピング */
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put( JCMConstants.TEMPLATE_LIST_KEY, templates );

		return paramMap;
	}
	
	/**
	 * 下りマッピング処理[照会系(一覧照会)].
	 * <br>
	 * @param   inInfMap        入力情報マップ
	 * @param   svcIfCmnInfMap  サービスI/Fマッピング共通情報マップ
	 * @param   svcResMap       サービスIFの結果が格納されているマップ情報
	 * @param   resDtLst        返却データ項目名リスト
	 * @param   errDtLst        エラー項目へ割付するデータ項目名リスト
	 * @throws  Exception       例外が発生した場合
	 * @return  下りマッピング項目
	 */
	private ArrayList<HashMap<String, Object>> setSelDwnMappingToLst( HashMap<String, Object> inInfMap,
																	   HashMap<String, Object> svcIfCmnInfMap,
																	   Map<?, ?> svcResMap,
																	   ArrayList<String> resDtLst, 
																	   ArrayList<String> errDtLst ) throws Exception {

		/** 事前処理 */
		// リクエストパラメータを取得
		IRequestParameterReadWrite reqParam = (IRequestParameterReadWrite)inInfMap.get( IN_INF_KEY_REQ_PARAM );

		// ユーザ任意文字列を取得
		String fixedText = (String)inInfMap.get( IN_INF_KEY_FIXED_TEXT );

		// 使用するparam <---> サービスI/F 変換マップ名を取得
		String convMapNm = (String)svcIfCmnInfMap.get( SVC_IF_CMN_INF_KEY_USE_CONV_MAP_NM );

		// 使用する明細リスト名を取得
		String dtlLstNm = (String)svcIfCmnInfMap.get( SVC_IF_CMN_INF_KEY_USE_DTL_LST_NM );

		// 使用するステータス項目名を取得
		String stsColumNm = (String)svcIfCmnInfMap.get( SVC_IF_CMN_INF_KEY_USE_STS_COLUM_NM );


		/** サービスIFの戻り値 */
		CAANMsg[] templates = null;
		CAANMsg template = null;
		if ( svcResMap.containsKey( JCMConstants.TEMPLATE_LIST_KEY ) ) {
			templates = (CAANMsg[])( svcResMap.get( JCMConstants.TEMPLATE_LIST_KEY ) );
			template = templates[0];
		}

		/** リクエストパラメータ作業領域 */
		Map<Object, Object> paramWorkMap = reqParam.getMappingWorkArea();
		if ( paramWorkMap == null ) {
			paramWorkMap = new HashMap<Object, Object>();
			reqParam.setMappingWorkArea( paramWorkMap );
		}

		/** マップ項目の生成 */
		HashMap<Object, Object> parent_map = (HashMap<Object, Object>)( paramWorkMap.get( convMapNm ) );
		if ( parent_map == null ) {
			parent_map = new HashMap<Object, Object>();
			paramWorkMap.put( convMapNm, parent_map );
		}

		CAANMsg[] templateArray = null;
		ArrayList<HashMap<String, Object>> parent_map_list = null;

		/** 下りマッピング */
		templateArray = template.getCAANMsgList( dtlLstNm );
		parent_map_list = (ArrayList<HashMap<String, Object>>)( parent_map.get( dtlLstNm ) );
		if ( parent_map_list == null ) {
			parent_map_list = new ArrayList<HashMap<String, Object>>();
		}
		if ( templateArray != null ) {
			// 明細
			for ( int i = 0; i < templateArray.length; i ++ ) {
				if ( i >= parent_map_list.size() ) {
					parent_map_list.add( new HashMap<String, Object>() );
				}
				CAANMsg child_template = templateArray[i];
				HashMap<String, Object> child_map = (HashMap<String, Object>)( parent_map_list.get(i) );

				/** 返却データ項目を取得 */
				Iterator<String> resDtLstIte = resDtLst.iterator();
				while( resDtLstIte.hasNext() ){
					String resDt = resDtLstIte.next();
					if ( child_template.isNull( resDt ) ) {
						child_map.put( resDt, STR_EMPTY );
					} else {
						child_map.put( resDt, child_template.getString( resDt ) );
					}
				}
			}
		}

		/** リターンコード・メッセージの設定 */
		Object returnCode = svcResMap.get( JCMConstants.RET_CD_INT_KEY );
		scResultStat(reqParam, template, Integer.parseInt( returnCode.toString() ), stsColumNm );

		/** エラーマッピング */
		HashMap<Object, Object> errMap = (HashMap<Object, Object>)( reqParam.getData( fixedText ) );

		// エラー項目へ割付するデータ項目名リストに設定されている全情報を
		// マッピングする
		Iterator<String> errDtLstIte = errDtLst.iterator();
		while( errDtLstIte.hasNext() )
		{
			String errDt = errDtLstIte.next();
			if ( ( !template.isNull( errDt ) ) && ( !errMap.containsKey( errDt ) ) ) {
				errMap.put( errDt, template.getString( errDt ) );
			}
		}

		/** エラー情報の適用 */
		ArrayList<Object> errMapList = (ArrayList<Object>)( reqParam.getControlMapData( SCControlMapKeys.ERROR_INFO ) );
		if ( errMapList == null ) {
			errMapList = new ArrayList<Object>();
		}
		reqParam.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo( svcResMap, errMapList ) );

		return parent_map_list;
	}

	/**
	 * 下りマッピング処理[照会系(一意照会)].
	 * <br>
	 * @param   inInfMap        入力情報マップ
	 * @param   svcIfCmnInfMap  サービスI/Fマッピング共通情報マップ
	 * @param   svcResMap       サービスIFの結果が格納されているマップ情報
	 * @param   resDtLst        返却データ項目名リスト
	 * @param   errDtLst        エラー項目へ割付するデータ項目名リスト
	 * @throws  Exception       例外が発生した場合
	 * @return  下りマッピング項目
	 */
	private HashMap<String, Object> setSelDwnMappingToOne( HashMap<String, Object> inInfMap,
															HashMap<String, Object> svcIfCmnInfMap,
															Map<?, ?> svcResMap,
															ArrayList<String> resDtLst, 
															ArrayList<String> errDtLst ) throws Exception {

		/** 下りマッピング処理[照会系(一覧照会)]を内部的に呼出し */
		ArrayList<HashMap<String, Object>> dwnMappingLst = setSelDwnMappingToLst( inInfMap, svcIfCmnInfMap, svcResMap, resDtLst, errDtLst );

		/** 先頭のデータのみを呼び元へ返却 */
		if ( (dwnMappingLst == null) || (dwnMappingLst.isEmpty()) ) {
			return new HashMap<String, Object>();
		}

		return (HashMap<String, Object>)( dwnMappingLst.get(0) );
	}
	
	/**
	 * リターンコード・メッセージの設定.
	 * <br>
	 * @param   reqParam   モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   template   テンプレート情報
	 * @param   returnCd   リターンコード
	 * @param   statusKey  ステータス取得キー
	 * @throws  Exception  例外が発生した場合
	 * @return  リクエストパラメータ(param)に戻り値を追加して返却する
	 */
	private IRequestParameterReadWrite scResultStat( IRequestParameterReadWrite reqParam, CAANMsg template, int returnCode, String statusKey ) throws RequestParameterException {

		/** リターンコード・メッセージの設定 */
		int templateStatus = template.getInt( statusKey );
		if ( returnCode != 0 ) {
			templateStatus = RTN_CODE_9000;
		}
		if ( JCMAPLConstMgr.getString( RETURN_MSG_.concat( String.format( RETURN_MSG_FORMAT, templateStatus ) ) ) == null ) {
			templateStatus = RTN_CODE_0000;
		}

		int bpStatus = RTN_CODE_0000;
		Object obj = reqParam.getControlMapData( SCControlMapKeys.RETURN_CODE );
		if ( obj == null ) {
			bpStatus = RTN_CODE_MINUS;
		} else {
			bpStatus = Integer.parseInt(reqParam.getControlMapData( SCControlMapKeys.RETURN_CODE ).toString() );
		}

		if ( templateStatus > bpStatus ) {
			String returnCdStr = String.format( RETURN_MSG_FORMAT, templateStatus );
			String returnMsgString = JCMAPLConstMgr.getString( RETURN_MSG_.concat( returnCdStr ) );
			reqParam.setControlMapData( SCControlMapKeys.RETURN_CODE, returnCdStr );
			reqParam.setControlMapData( SCControlMapKeys.RETURN_MESSAGE, returnMsgString );
		}

		return reqParam;
	}



	/**
	 * サービスコンポーネント実行結果確認.
	 * <br>
	 * @param   reqParam   モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @throws  Exception  例外が発生した場合
	 */
	public void scResultCheck( IRequestParameterReadWrite reqParam ) throws CCException, RequestParameterException {
		int scReturnCode = Integer.parseInt( reqParam.getControlMapData( SCControlMapKeys.RETURN_CODE ).toString() );

		// サービスコンポーネントの実行結果に単項目以上のエラーがある場合、例外とする
		if ( scReturnCode >= JPCModelConstant.SINGLEDATA_ERR ) {
			throw new CCException( ERR_STR_RESULT_CD, new Exception() );
		}
	}
	

}
