/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKDelJdgRsltAndJdgDtlCC
*   ソースファイル名：JKKDelJdgRsltAndJdgDtlCC.java
*   作成者          ：富士通
*   日付            ：2013年04月09日
*＜機能概要＞
*   利用場所情報照会部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v5.00.00    2013/04/09   FJ）薄出    新規作成
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
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.common.util.JKKCommonUtil;
import eo.ejb.cbs.cbsmsg.EKK1071B501CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1071B501CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1071C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1071C010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1981B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1981B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1981E010CBSMsg;

/**
 * 審査判定結果審査詳細削除コモンコンポーネント部品
 * <br>
 * @author 富士通
 */
public class JKKDelJdgRsltAndJdgDtlCC 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 = "サービスコンポーネントエラー";
	
	/** 作業マップ名(利用場所CC) */
	private static final String USE_PLACE_WORK_AREA_NAME = "JKKUpdUsePlaceInfoCCWork";
	
	/** 削除対象「他」申込審査種別コード列挙 */
	private static final String TA_MSKM_JDG_SBT_CDS_NAME = "ta_mskm_jdg_sbt_cds";
	/** 削除対象「自」申込審査種別コード列挙 */
	private static final String JI_MSKM_JDG_SBT_CDS_NAME = "ji_mskm_jdg_sbt_cds";
	/** 「他」申込リスト */
	private static final String TA_MSKM_LIST        = "ta_mskm_list";
	/** 「自」申込リスト */
	private static final String JI_MSKM_LIST        = "ji_mskm_list";
	/** 「自」申込リスト（画面照会時） */
	private static final String JI_MSKM_RENKEI_LIST = "shokai_ji_mskm_list";
	/** 「他」申込審査リスト */
	private static final String TA_MSKM_JDG_LIST = "ta_mskm_jdg_list";
	/** 「自」申込審査リスト */
	private static final String JI_MSKM_JDG_LIST = "ji_mskm_jdg_list";
	/** 削除審査リスト */
	private static final String DEL_JDG_LIST     = "del_jdg_list";
	/** 削除審査詳細リスト */
	private static final String DEL_JDG_DTL_LIST = "del_jdg_dtl_list";
	
	/**
	 * 審査判定結果審査詳細削除処理を行います。
	 * <br>
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite delJdgRsltJdgDtl(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		HashMap<String, Object> paramMap = setSCInputCommonData(param, new HashMap<String, Object>());
		Map<?, ?> result = null;
		CAANMsg template = null;
		
		// ユーザデータ情報
		HashMap dataMap = (HashMap)(param.getData(fixedText));
		if (dataMap == null)
		{
			return param;
		}
		
		ArrayList<HashMap<String, Object>> taMskmList    = new ArrayList();
		ArrayList<HashMap<String, Object>> taJdgList     = new ArrayList();
		ArrayList<HashMap<String, Object>> jiMskmList    = new ArrayList();
		ArrayList<HashMap<String, Object>> jiJdgList     = new ArrayList();
		ArrayList<HashMap<String, Object>> delJdgList    = new ArrayList();
		dataMap.put(TA_MSKM_LIST,     taMskmList);
		dataMap.put(JI_MSKM_LIST,     jiMskmList);
		dataMap.put(TA_MSKM_JDG_LIST, taJdgList);
		dataMap.put(JI_MSKM_JDG_LIST, jiJdgList);
		dataMap.put(DEL_JDG_LIST,     delJdgList);
		
		if (JKKCommonUtil.isNull(dataMap.get("jimskm_no")))
		{
			// 画面から申込番号が渡されていない場合は、CCで登録した申込番号を取得する。
			dataMap.put("jimskm_no", JKKBpCommon.getWkMskmNo(param));
		}
		
		// 他申込のリストを取得します。(同一回線) エリアチェック:(ネット/電話/テレビ)用
		if (dataMap.containsKey(TA_MSKM_JDG_SBT_CDS_NAME) && !"".equals(dataMap.get(TA_MSKM_JDG_SBT_CDS_NAME)))
		{
			getTaMskm(param, fixedText);
		}
		// 自申込のリストを取得します。(不良顧客/エリア)チェック:(ネット/電話/テレビ/ADSL)用
		if (dataMap.containsKey(JI_MSKM_JDG_SBT_CDS_NAME) && !"".equals(dataMap.get(JI_MSKM_JDG_SBT_CDS_NAME)))
		{
			getJiMskm(param, fixedText);
		}
		
		if ((0 >= taMskmList.size()) && (0 >= jiMskmList.size()))
		{
			return param;
		}
		
		//#######################################
		//### 審査一覧照会（サービス契約番号）### 他申込用 EKK1071B501
		//#######################################
		if ((null != taMskmList) && (0 < taMskmList.size()))
		{
			template = editInEKK1071B501(param, fixedText, taMskmList);   // 上りマッピング
			result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
			editRetEKK1071B501(result, param, fixedText, taJdgList);      // 下りマッピング
			if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
			{ // ステータスが単項目エラー以上であれば例外をスロー
				throw new CCException(SC_ERROR_STRING, new Exception());
			}
		}
		
		//#######################################
		//### 審査一覧照会（サービス契約番号）### 自申込用 EKK1071B501
		//#######################################
		if ((null != jiMskmList) && (0 < jiMskmList.size()))
		{
			template = editInEKK1071B501(param, fixedText, jiMskmList);   // 上りマッピング
			result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
			editRetEKK1071B501(result, param, fixedText, jiJdgList);      // 下りマッピング
			if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
			{ // ステータスが単項目エラー以上であれば例外をスロー
				throw new CCException(SC_ERROR_STRING, new Exception());
			}
		}
		
		//#########################################
		//### 削除対象選別処理（審査種別コード）###
		//#########################################
		delJdgList.addAll(getTargetJudges(taJdgList, (String)dataMap.get(TA_MSKM_JDG_SBT_CDS_NAME)));
		delJdgList.addAll(getTargetJudges(jiJdgList, (String)dataMap.get(JI_MSKM_JDG_SBT_CDS_NAME)));
		
		if (0 >= delJdgList.size())
		{
			return param; // 対象がひとつもない場合は処理を終了する。
		}
		
		//####################
		//### 審査結果反映 ### EKK1071C010
		//####################
		template = editInEKK1071C010(param, fixedText, delJdgList);   // 上りマッピング
		result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
		editRetEKK1071C010(result, param, fixedText, delJdgList);     // 下りマッピング
		if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
		{ // ステータスが単項目エラー以上であれば例外をスロー
			throw new CCException(SC_ERROR_STRING, new Exception());
		}
		
		ArrayList<HashMap<String, Object>> delJdgDtlList = null;
		
		for (HashMap tmpJdg : delJdgList)
		{
			//###################################
			//### 審査詳細一覧照会（審査番号）### EKK1981B001
			//###################################
			template = editInEKK1981B001(param, fixedText, tmpJdg);       // 上りマッピング
			result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
			editRetEKK1981B001(result, param, fixedText, tmpJdg);         // 下りマッピング
			if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
			{ // ステータスが単項目エラー以上であれば例外をスロー
				throw new CCException(SC_ERROR_STRING, new Exception());
			}
			
			delJdgDtlList = (ArrayList)tmpJdg.get(DEL_JDG_DTL_LIST);
			if ((null != delJdgDtlList) && (0 < delJdgDtlList.size()))
			{
				for (HashMap tmpJdgDtl : delJdgDtlList)
				{
					//####################
					//### 審査詳細削除 ### EKK1981E010
					//####################
					template = editInEKK1981E010(param, fixedText, tmpJdgDtl);    // 上りマッピング
					result = scCall.run(putParamMap(paramMap, template), handle); // SC呼び出し
					editRetEKK1981E010(result, param, fixedText, tmpJdgDtl);      // 下りマッピング
					if (getReturnCode(param) >= JPCModelConstant.SINGLEDATA_ERR)
					{ // ステータスが単項目エラー以上であれば例外をスロー
						throw new CCException(SC_ERROR_STRING, new Exception());
					}
				}
			}
		}
		
		return param;
	}
	
	/**
	 * 削除の対象となる審査リストを取得します。
	 * <br>
	 * @param jdgList 審査リスト
	 * @param trgt_cds 対象コード列挙
	 * @return 削除対象審査リスト
	 * @throws RequestParameterException 
	 */
	@SuppressWarnings("unchecked")
	private ArrayList getTargetJudges(ArrayList<HashMap<String, Object>> jdgList, String trgt_cds)
		throws RequestParameterException
	{
		ArrayList<HashMap<String, Object>> trgtJdgList = new ArrayList();

		if ((null == trgt_cds) || (0 >= trgt_cds.length()))
		{
			return trgtJdgList;
		}
		
		// 対象審査種別コードの列挙を分解
		String[] sbtCds  = trgt_cds.split(",");
		HashSet  cdSets  = new HashSet();
		for (String tmpCd : sbtCds)
		{
			cdSets.add(tmpCd);
		}
		
		String prefix = "kk1071_";
		String sbtCd = null;
		
		// 対象リストを作成します
		for (HashMap jdgMap : jdgList)
		{
			sbtCd = (String)jdgMap.get(prefix + EKK1071B501CBSMsg1List.JUDGE_SBT_CD);
			
			if (cdSets.contains(sbtCd))
			{
				trgtJdgList.add(jdgMap);
			}
		}
		
		return trgtJdgList;
	}
	
	/**
	 * 自申込情報を取得します。
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return 他申込情報のリスト
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void getJiMskm(IRequestParameterReadWrite param, String fixedText)
		throws Exception
	{
		HashMap<String, Object> dataMap = (HashMap<String, Object>)param.getData(fixedText);
		if (null == dataMap)
		{
			return;
		}
		
		HashSet<String> svckeiNums = new HashSet();
		String   svcKeiStat = null;
		String   svcKeiNo   = null;
		boolean isTarget   = false;
		HashMap<String, Object> tmpMap = null;
		
		// 画面照会時申込情報（個別照査対象でないものを含む）
		ArrayList<HashMap<String, Object>> jiMskmRenkeiList = (ArrayList)dataMap.get(JI_MSKM_RENKEI_LIST);
		if (null != jiMskmRenkeiList)
		{
			for(HashMap svcKeiMap : jiMskmRenkeiList)
			{
				svcKeiStat = (String)svcKeiMap.get("svc_kei_stat");
				svcKeiNo   = (String)svcKeiMap.get("svc_kei_no");
				isTarget   = JKKStrConst.CD00037_UK_ZM.equals(svcKeiStat) && (null != svcKeiNo) && !"".equals(svcKeiNo);
				if (isTarget)
				{
					svckeiNums.add(svcKeiNo);
				}
			}
		}
		
		// 登録更新時申込情報（訂正追加で新規作成のサービスを含む）
		ArrayList<HashMap<String, Object>> jiMskmList = (ArrayList)dataMap.get(JI_MSKM_LIST);
		
		String svcKeiNoNet  = JKKBpCommon.getWkSvcKeiNoNet(param);
		String svcKeiNoTel  = JKKBpCommon.getWkSvcKeiNoTel(param);
		String svcKeiNoTv   = JKKBpCommon.getWkSvcKeiNoTv(param);
		String svcKeiNoMbl  = JKKBpCommon.getWkSvcKeiNoMbl(param);
		String svcKeiNoAdsl = JKKBpCommon.getWkSvcKeiNoAdsl(param);
		
		if ((null != svcKeiNoNet) && !"".equals(svcKeiNoNet))
		{
			svckeiNums.add(svcKeiNoNet);
		}
		if ((null != svcKeiNoTel) && !"".equals(svcKeiNoTel))
		{
			svckeiNums.add(svcKeiNoTel);
		}
		if ((null != svcKeiNoTv) && !"".equals(svcKeiNoTv))
		{
			svckeiNums.add(svcKeiNoTv);
		}
		if ((null != svcKeiNoMbl) && !"".equals(svcKeiNoMbl))
		{
			svckeiNums.add(svcKeiNoMbl);
		}
		if ((null != svcKeiNoAdsl) && !"".equals(svcKeiNoAdsl))
		{
			svckeiNums.add(svcKeiNoAdsl);
		}
		
		for (String tmpSvcKeiNo : svckeiNums)
		{
			tmpMap = new HashMap();
			tmpMap.put("svc_kei_no", tmpSvcKeiNo);
			jiMskmList.add(tmpMap);
		}
		
		return;
	}
	
	/**
	 * 同一回線の他申込情報を取得します。
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return 他申込情報のリスト
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void getTaMskm(IRequestParameterReadWrite param, String fixedText)
		throws Exception
	{
		HashMap<String, Object> dataMap = (HashMap<String, Object>)param.getData(fixedText);
		if (null == dataMap)
		{
			return;
		}
		
		ArrayList<HashMap<String, Object>> taMskmList = (ArrayList)dataMap.get(TA_MSKM_LIST);
		
		Map<Object, Object> workArea = param.getMappingWorkArea();
		if (null == workArea)
		{
			return;
		}
		
		HashMap<String, Object> workMap = (HashMap<String, Object>)workArea.get(USE_PLACE_WORK_AREA_NAME);
		if (null == workMap)
		{
			return;
		}
		
		ArrayList<HashMap<String, Object>> svcKeiList = (ArrayList<HashMap<String, Object>>)workMap.get("svc_kei_list");
		if (null == svcKeiList)
		{
			return;
		}
		
		String jimskmNo = (String)dataMap.get("jimskm_no");
		for (HashMap<String, Object> svcKeiMap : svcKeiList)
		{
			String mskmNo = (String)svcKeiMap.get("mskm_no");
			
			if (jimskmNo.equals(mskmNo))
			{
				continue;
			}
			
			String svcKeiStat = (String)svcKeiMap.get("svc_kei_stat");
			String prcGrpCd = (String)svcKeiMap.get("prc_grp_cd");
			boolean isTarget = JKKStrConst.CD00037_UK_ZM.equals(svcKeiStat)
								&& (JKKCtrlyUtil.getNetSvcJdg(prcGrpCd)
								|| JKKCtrlyUtil.getTelSvcJdg(prcGrpCd)
								|| JKKCtrlyUtil.getTvSvcJdg(prcGrpCd));
			if (isTarget)
			{
				taMskmList.add(svcKeiMap);
			}
		}
		
		return;
	}
	
	/**
	 * 審査一覧照会（サービス契約番号）の上りマッピング処理を行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ指定文字列
	 * @param mskmList 申込リスト
	 * @return  CAANMsgクラス
	 * @throws RequestParameterException
	 */
	private CAANMsg editInEKK1071B501(IRequestParameterReadWrite param, String fixedText,
			ArrayList<HashMap<String, Object>> mskmList)
		throws RequestParameterException
	{
		CAANMsg template = setControlMapInInfo(param, EKK1071B501CBSMsg.class.getName(), "EKK1071B501", "1");
		
		String svcKeiNo = null;
		int keyNum = 0;
		template.setNull(EKK1071B501CBSMsg.KEY_SVC_KEI_NO1);
		template.setNull(EKK1071B501CBSMsg.KEY_SVC_KEI_NO2);
		template.setNull(EKK1071B501CBSMsg.KEY_SVC_KEI_NO3);
		template.setNull(EKK1071B501CBSMsg.KEY_SVC_KEI_NO4);
		
		for (HashMap<String, Object> tmpMap : mskmList)
		{
			svcKeiNo = (String)tmpMap.get("svc_kei_no");
			if ((null == svcKeiNo) || (0 == svcKeiNo.length()))
			{
				continue;
			}
			switch (keyNum++)
			{
			case 0:
				template.set(EKK1071B501CBSMsg.KEY_SVC_KEI_NO1, svcKeiNo);
				break;
				
			case 1:
				template.set(EKK1071B501CBSMsg.KEY_SVC_KEI_NO2, svcKeiNo);
				break;
				
			case 2:
				template.set(EKK1071B501CBSMsg.KEY_SVC_KEI_NO3, svcKeiNo);
				break;
				
			case 3:
				template.set(EKK1071B501CBSMsg.KEY_SVC_KEI_NO4, svcKeiNo);
				break;
				
			default:
				break;
			
			}
		}
		
		return template;
	}
	
	/**
	 * 審査結果反映 の上りマッピング処理を行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ指定文字列
	 * @param delJdgList 削除審査リスト
	 * @return  CAANMsgクラス
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg editInEKK1071C010(IRequestParameterReadWrite param, String fixedText,
			ArrayList<HashMap<String, Object>> delJdgList)
		throws RequestParameterException
	{
		CAANMsg   template      = setControlMapInInfo(param, EKK1071C010CBSMsg.class.getName(), "EKK1071C010", "1");
		CAANMsg[] templateArray = template.getCAANMsgList(EKK1071C010CBSMsg.EKK1071C010CBSMSG1LIST);
		CAANMsg   childTemplate = null;
		HashMap   jdgMap = null;
		
		if ((null == templateArray) || (delJdgList.size() != templateArray.length))
		{
			templateArray = new CAANMsg[delJdgList.size()];
		}
		
		String prefix = "kk1071_";
		
		for (int i = 0; i < delJdgList.size(); i++)
		{
			jdgMap = delJdgList.get(i);
			childTemplate = templateArray[i];
			
			if (null == childTemplate)
			{
				childTemplate = new CAANMsg(EKK1071C010CBSMsg1List.class.getName());
			}
			
			setTemplate(childTemplate, EKK1071C010CBSMsg1List.JUDGE_NO,   jdgMap, prefix, EKK1071B501CBSMsg1List.JUDGE_NO);//審査番号
			setTemplate(childTemplate, EKK1071C010CBSMsg1List.UPD_DTM_BF, jdgMap, prefix, EKK1071B501CBSMsg1List.UPD_DTM); //更新年月日時分秒（更新前）
			childTemplate.setNull(EKK1071C010CBSMsg1List.JUDGE_YMD);          //審査年月日
			childTemplate.setNull(EKK1071C010CBSMsg1List.JUDGE_JUDGE_RSLT_CD);//審査判定結果コード
			
			templateArray[i] = childTemplate;
		}
		
		template.set(EKK1071C010CBSMsg.EKK1071C010CBSMSG1LIST, templateArray);
		
		return template;
	}
	
	/**
	 * 審査詳細一覧照会（審査番号）の上りマッピング処理を行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ指定文字列
	 * @param delJdgMap 審査結果反映用マップ
	 * @return CAANMsgクラス
	 * @throws RequestParameterException
	 */
	private CAANMsg editInEKK1981B001(IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> delJdgMap)
	throws RequestParameterException
	{
		CAANMsg template = setControlMapInInfo(param, EKK1981B001CBSMsg.class.getName(), "EKK1981B001", "1");
		
		String prefix = "kk1071_";
		
		setTemplate(template, EKK1981B001CBSMsg.KEY_JUDGE_NO, delJdgMap, prefix, EKK1071B501CBSMsg1List.JUDGE_NO);
		template.setNull(EKK1981B001CBSMsg.KEY_JDG_DTL_SBT_CD);
		
		return template;
	}
	
	/**
	 * 審査詳細削除の上りマッピング処理を行います。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ指定文字列
	 * @param delJdgDtlMap 削除審査詳細マップ
	 * @return  CAANMsgクラス
	 * @throws RequestParameterException
	 */
	private CAANMsg editInEKK1981E010(IRequestParameterReadWrite param, String fixedText,
			HashMap<String, Object> delJdgDtlMap) throws RequestParameterException
	{
		CAANMsg template = setControlMapInInfo(param, EKK1981E010CBSMsg.class.getName(), "EKK1981E010", "1");
		
		String prefix = "kk1981_";
		
		setTemplate(template, EKK1981E010CBSMsg.JUDGE_NO,       delJdgDtlMap, prefix, EKK1981B001CBSMsg1List.JUDGE_NO);      //審査番号
		setTemplate(template, EKK1981E010CBSMsg.JDG_DTL_SBT_CD, delJdgDtlMap, prefix, EKK1981B001CBSMsg1List.JDG_DTL_SBT_CD);//審査詳細種別コード
		setTemplate(template, EKK1981E010CBSMsg.UPD_DTM_BF,     delJdgDtlMap, prefix, EKK1981B001CBSMsg1List.UPD_DTM);       //更新年月日時分秒(更新前)
		
		return template;
	}
	
	/**
	 * 審査一覧照会（サービス契約番号）の下りマッピング処理を行います。
	 * <br>
	 * @param msgList CAANMsgクラス
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ指定文字列
	 * @param jdgList 審査リスト
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editRetEKK1071B501(Map<?, ?> msgList, IRequestParameterReadWrite param,
			String fixedText, ArrayList<HashMap<String, Object>> jdgList) throws Exception
	{
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		
		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		String prefix = "kk1071_";
		
		CAANMsg[] templateArray = template.getCAANMsgList(EKK1071B501CBSMsg.EKK1071B501CBSMSG1LIST);
		
		// dataList[] <- templateArray[]
		if (null != templateArray)
		{
			for (int i = 0; i < templateArray.length; i++)
			{
				CAANMsg childTemplate = templateArray[i];
				HashMap childMap      = new HashMap();
				
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.JUDGE_NO, childTemplate);
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.JUDGE_TG_SBT_CD, childTemplate);
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.JUDGE_SBT_CD, childTemplate);
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.SYSID, childTemplate);
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.MSKM_DTL_NO, childTemplate);
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.SVC_KEI_NO, childTemplate);
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.SVC_KEI_UCWK_NO, childTemplate);
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.KKTK_SVC_KEI_NO, childTemplate);
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.OP_SVC_KEI_NO, childTemplate);
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.SBOP_SVC_KEI_NO, childTemplate);
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.WRIB_SVC_KEI_NO, childTemplate);
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.SEIOPSVC_KEI_NO, childTemplate);
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.JUDGE_YMD, childTemplate);
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.JUDGE_JUDGE_RSLT_CD, childTemplate);
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.ADD_DTM, childTemplate);
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.ADD_OPEACNT, childTemplate);
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.UPD_DTM, childTemplate);
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.UPD_OPEACNT, childTemplate);
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.DEL_DTM, childTemplate);
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.DEL_OPEACNT, childTemplate);
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.MK_FLG, childTemplate);
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.ADD_UNYO_YMD, childTemplate);
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.ADD_TRN_ID, childTemplate);
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.UPD_UNYO_YMD, childTemplate);
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.UPD_TRN_ID, childTemplate);
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.DEL_UNYO_YMD, childTemplate);
				setDataMap(childMap, prefix, EKK1071B501CBSMsg1List.DEL_TRN_ID, childTemplate);
				
				jdgList.add(childMap);
			}
		}
		
		// エラー情報の設定
		editErrInfoEKK1071B501(param, template, (Integer)returnCode, fixedText);
		
		// エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (null == errList)
		{
			errList = new ArrayList<Object>();
		}
		
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));
		
		return param;
	}
	
	/**
	 * 審査結果反映の下りマッピング処理を行います。
	 * <br>
	 * @param msgList CAANMsgクラス
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ指定文字列
	 * @param trgtJdgsList 対象審査リスト
	 * @return リクエストパラメータ
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editRetEKK1071C010(Map<?, ?> msgList, IRequestParameterReadWrite param,
		String fixedText, ArrayList<HashMap<String, Object>> trgtJdgsList) throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates     = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg   template      = templates[0];
		CAANMsg[] templateArray = template.getCAANMsgList(EKK1071C010CBSMsg.EKK1071C010CBSMSG1LIST);
		CAANMsg   childTemplate = null;
		HashMap   jdgMap = null;
		
		// リターンコード取得
		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		String prefix = "kk1071_";
		
		if (null != templateArray)
		{
			for (int i = 0; i < templateArray.length; i++)
			{
				childTemplate = templateArray[i];
				jdgMap        = trgtJdgsList.get(i);
				
				setDataMap(jdgMap, prefix, EKK1071C010CBSMsg1List.UPD_DTM,     childTemplate);
				setDataMap(jdgMap, prefix, EKK1071C010CBSMsg1List.UPD_OPEACNT, childTemplate);
			}
		}
		
		// エラー情報の設定
		editErrInfoEKK1071C010(param, template, (Integer)returnCode, fixedText, trgtJdgsList);
		
		// エラー情報のマップを取得
		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 msgList CAANMsgクラス
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ指定文字列
	 * @param delJdgMap 審査結果反映用マップ
	 * @return リクエストパラメータ
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editRetEKK1981B001(Map<?, ?> msgList, IRequestParameterReadWrite param,
		String fixedText, HashMap<String, Object> delJdgMap) throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		
		// リターンコード取得
		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		if (!delJdgMap.containsKey(DEL_JDG_DTL_LIST))
		{
			delJdgMap.put(DEL_JDG_DTL_LIST, new ArrayList<HashMap<String, Object>>());
		}
		
		ArrayList delJdgDtlList = (ArrayList)delJdgMap.get(DEL_JDG_DTL_LIST);
		
		String prefix = "kk1981_";

		CAANMsg[] templateArray = template.getCAANMsgList(EKK1981B001CBSMsg.EKK1981B001CBSMSG1LIST);
		HashMap<String, Object> childMap = new HashMap();
		
		if (templateArray != null)
		{
			for (int i = 0; i < templateArray.length; i++)
			{
				CAANMsg childTemplate = templateArray[i];
				childMap = new HashMap();
				
				setDataMap(childMap, prefix, EKK1981B001CBSMsg1List.JUDGE_NO,               childTemplate);//審査番号
				setDataMap(childMap, prefix, EKK1981B001CBSMsg1List.JDG_DTL_SBT_CD,         childTemplate);//審査詳細種別コード
				setDataMap(childMap, prefix, EKK1981B001CBSMsg1List.JUDGE_TG_SCREEN_TAB_CD, childTemplate);//審査対象画面タブコード
				setDataMap(childMap, prefix, EKK1981B001CBSMsg1List.JUDGE_TG_SCREEN_KMK_CD, childTemplate);//審査対象画面項目コード
				setDataMap(childMap, prefix, EKK1981B001CBSMsg1List.JUDGE_YMD,              childTemplate);//審査年月日
				setDataMap(childMap, prefix, EKK1981B001CBSMsg1List.JUDGE_JUDGE_RSLT_CD,    childTemplate);//審査判定結果コード
				setDataMap(childMap, prefix, EKK1981B001CBSMsg1List.JDG_DTL_MSG_ID,         childTemplate);//審査詳細メッセージＩＤ
				setDataMap(childMap, prefix, EKK1981B001CBSMsg1List.MSG_UMKM_MOJI,          childTemplate);//メッセージ埋込み文字
				setDataMap(childMap, prefix, EKK1981B001CBSMsg1List.ADD_DTM,                childTemplate);//登録年月日時分秒
				setDataMap(childMap, prefix, EKK1981B001CBSMsg1List.ADD_OPEACNT,            childTemplate);//登録オペレータアカウント
				setDataMap(childMap, prefix, EKK1981B001CBSMsg1List.UPD_DTM,                childTemplate);//更新年月日時分秒
				setDataMap(childMap, prefix, EKK1981B001CBSMsg1List.UPD_OPEACNT,            childTemplate);//更新オペレータアカウント
				setDataMap(childMap, prefix, EKK1981B001CBSMsg1List.DEL_DTM,                childTemplate);//削除年月日時分秒
				setDataMap(childMap, prefix, EKK1981B001CBSMsg1List.DEL_OPEACNT,            childTemplate);//削除オペレータアカウント
				setDataMap(childMap, prefix, EKK1981B001CBSMsg1List.MK_FLG,                 childTemplate);//無効フラグ
				
				delJdgDtlList.add(childMap);
			}
		}
		
		// エラー情報の設定
		editErrInfoEKK1981B001(param, template, (Integer)returnCode, fixedText, delJdgMap);
		
		// エラー情報のマップを取得
		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 msgList CAANMsgクラス
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ指定文字列
	 * @param delJdgDtlMap 審査結果反映用マップ
	 * @return リクエストパラメータ
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editRetEKK1981E010(Map<?, ?> msgList, IRequestParameterReadWrite param,
		String fixedText, HashMap<String, Object> delJdgDtlMap) throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		
		// リターンコード取得
		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// エラー情報の設定
		editErrInfoEKK1981E010(param, template, (Integer)returnCode, fixedText, delJdgDtlMap);
		
		// エラー情報のマップを取得
		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 iparam リクエストパラメータ
	 * @param template テンプレートリスト
	 * @param returnCode リターンコード
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEKK1071B501(IRequestParameterReadWrite iparam, CAANMsg template,
			int returnCode, String fixedText)
	throws RequestParameterException
	{
		IRequestParameterReadWrite param = setControlMapErrInfo(iparam, template.getInt(EKK1071B501CBSMsg.STATUS), returnCode);
		
		HashMap dataMap = (HashMap)param.getData(fixedText);
		
		if (dataMap == null)
		{
			return param;
		}
		
		// プレフィックスの設定
		String prefix = "kk1071_";
		
		setErrInfo(dataMap, prefix, EKK1071B501CBSMsg.KEY_SVC_KEI_NO1_ERR, template);//ＫＥＹ＿サービス契約番号１
		setErrInfo(dataMap, prefix, EKK1071B501CBSMsg.KEY_SVC_KEI_NO2_ERR, template);//ＫＥＹ＿サービス契約番号２
		setErrInfo(dataMap, prefix, EKK1071B501CBSMsg.KEY_SVC_KEI_NO3_ERR, template);//ＫＥＹ＿サービス契約番号３
		setErrInfo(dataMap, prefix, EKK1071B501CBSMsg.KEY_SVC_KEI_NO4_ERR, template);//ＫＥＹ＿サービス契約番号４
		
		return param;
	}
	
	/**
	 * 審査結果反映のエラー情報マッピング処理を行います。
	 * <br>
	 * @param iparam リクエストパラメータ
	 * @param template CAANMsgクラス
	 * @param returnCode リターンコード
	 * @param fixedText ユーザ指定文字列
	 * @param trgtJdgsList 対象審査リスト
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrInfoEKK1071C010(IRequestParameterReadWrite iparam, CAANMsg template, int returnCode,
			String fixedText, ArrayList<HashMap<String, Object>> trgtJdgsList) throws RequestParameterException
	{
		IRequestParameterReadWrite param = setControlMapErrInfo(iparam, template.getInt(EKK1071C010CBSMsg.STATUS), returnCode);
		
		HashMap<String, Object> dataMap = (HashMap<String, Object>)param.getData(fixedText);
		if (dataMap == null)
		{
			dataMap = new HashMap<String, Object>();
			param.setData(fixedText, dataMap);
		}
		
		CAANMsg[] templateArray = template.getCAANMsgList(EKK1071C010CBSMsg.EKK1071C010CBSMSG1LIST);
		CAANMsg   childTemplate = null;
		HashMap<String, Object> childMap = null;
		String prefix = "kk1071_";
		
		if (templateArray != null)
		{
			for (int i = 0; i < templateArray.length; i++)
			{
				childTemplate = templateArray[i];
				childMap      = (HashMap)trgtJdgsList.get(i);
				
				setErrInfo(childMap, prefix, EKK1071C010CBSMsg1List.JUDGE_NO_ERR,            childTemplate);//審査番号
				setErrInfo(childMap, prefix, EKK1071C010CBSMsg1List.JUDGE_YMD_ERR,           childTemplate);//審査年月日
				setErrInfo(childMap, prefix, EKK1071C010CBSMsg1List.JUDGE_JUDGE_RSLT_CD_ERR, childTemplate);//審査判定結果コード
				setErrInfo(childMap, prefix, EKK1071C010CBSMsg1List.UPD_DTM_BF_ERR,          childTemplate);//更新年月日時分秒（更新前）
			}
		}
		if (!template.isNull(EKK1071C010CBSMsg.EKK1071C010CBSMSG1LIST_ERR))
		{
			if (!dataMap.containsKey("EKK1071C010CBSMsg1List_err"))
			{
				dataMap.put("EKK1071C010CBSMsg1List_err", template.getString(EKK1071C010CBSMsg.EKK1071C010CBSMSG1LIST_ERR));
			}
		}
		
		return param;
	}
	
	/**
	 * 審査詳細一覧照会（審査番号）のエラー情報マッピング処理を行います。
	 * <br>
	 * @param iparam リクエストパラメータ
	 * @param template CAANMsgクラス
	 * @param returnCode リターンコード
	 * @param fixedText ユーザ指定文字列
	 * @param delJdgMap 審査結果反映用マップ
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	private IRequestParameterReadWrite editErrInfoEKK1981B001(IRequestParameterReadWrite iparam, CAANMsg template, int returnCode,
			String fixedText, HashMap<String, Object> delJdgMap) throws RequestParameterException
	{
		IRequestParameterReadWrite param = setControlMapErrInfo(iparam, template.getInt(EKK1981B001CBSMsg.STATUS), returnCode);
		
		String prefix = "kk1981_";
		
		setErrInfo(delJdgMap, prefix, EKK1981B001CBSMsg.KEY_JUDGE_NO_ERR,       template);//ＫＥＹ＿審査番号
		setErrInfo(delJdgMap, prefix, EKK1981B001CBSMsg.KEY_JDG_DTL_SBT_CD_ERR, template);//ＫＥＹ＿審査詳細種別コード
		
		return param;
	}
	
	/**
	 * 審査詳細削除のエラー情報マッピング処理を行います。
	 * @param iparam      リクエストパラメータ
	 * @param template    CAANMsgクラス
	 * @param returnCode  リターンコード
	 * @param fixedText   ユーザ指定文字列
	 * @param delJdgDtlMap 審査結果反映用マップ
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	private IRequestParameterReadWrite editErrInfoEKK1981E010(IRequestParameterReadWrite iparam, CAANMsg template, int returnCode,
			String fixedText, HashMap<String, Object> delJdgDtlMap) throws RequestParameterException
	{
		IRequestParameterReadWrite param = setControlMapErrInfo(iparam, template.getInt(EKK1981E010CBSMsg.STATUS), returnCode);

		String prefix = "kk1981_";
		
		setErrInfo(delJdgDtlMap, prefix, EKK1981E010CBSMsg.JUDGE_NO_ERR,       template);//審査番号
		setErrInfo(delJdgDtlMap, prefix, EKK1981E010CBSMsg.JDG_DTL_SBT_CD_ERR, template);//審査詳細種別コード
		setErrInfo(delJdgDtlMap, prefix, EKK1981E010CBSMsg.UPD_DTM_BF_ERR,     template);//更新年月日時分秒(更新前)
		
		return param;
	}
	
	/**
	 * サービスコンポーネント実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 * @param param リクエストパラメータ
	 * @param templates テンプレート
	 * @param returnCode リターンコード
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, String fixedText)
			throws RequestParameterException
	{		
		HashMap inMap = (HashMap)param.getData(fixedText);

		// マップに値が設定されていない場合は処理を行わない。
		if (inMap == null)
		{
			return param;
		}

		return param;
	}
	
	/**
	 * CAANMsgに必要なデータのマッピング処理を行います。
	 * <br>
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return パラメータマップ
	 * @throws RequestParameterException
	 */
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
			throws RequestParameterException
	{		
		ArrayList<CAANMsg> msgList = new ArrayList<CAANMsg>();

		int msgCnt = msgList.size();
		CAANMsg[] templates = new CAANMsg[msgCnt];
		for (int i = 0; i < msgCnt; i++)
		{
			templates[i] = msgList.get(i);
		}
		
		HashMap<String, Object> paramMap = setSCInputCommonData(param, new HashMap<String, Object>());
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}
	
	/**
	 * CAANMsgに値を設定します。<br>
	 *  @inMap内にデータが存在する場合、inMap内のデータを設定します。<br>
	 *  A上記以外の場合、setNullを呼び出します。<br>
	 * @param template 値を設定するメッセージキャリア
	 * @param setKey 設定先メッセージキャリアのキー名
	 * @param inMap ユーザデータ情報
	 * @param prefix ユーザデータ情報より取得する場合に付加するプレフィックス
	 * @param getKey ユーザデータ情報より取得するキー名
	 */
	private void setTemplate(CAANMsg template, String setKey, HashMap<String, Object> inMap, String prefix, String getKey)
	{
		
		if (null == inMap || null == inMap.get(prefix + getKey) || 0 == ((String)inMap.get(prefix + getKey)).length())
		{
			template.setNull(setKey);
		}
		else
		{
			template.set(setKey, (String)inMap.get(prefix + getKey));
		}
	}
	
	/**
	 * CAANMsgに値を設定します。<br>
	 *  @inMap内にデータが存在する場合、inMap内のデータを設定します。<br>
	 *  A上記以外の場合、setNullを呼び出します。<br>
	 * @param template 値を設定するメッセージキャリア
	 * @param getSetKey 設定先メッセージキャリアのキー名
	 * @param inMap ユーザデータ情報
	 * @param prefix ユーザデータ情報より取得する場合に付加するプレフィックス
	 */
	private void setTemplate(CAANMsg template, String getSetKey, HashMap<String, Object> inMap, String prefix)
	{
		setTemplate(template, getSetKey, inMap, prefix, getSetKey);
	}
	
	/**
	 * ユーザデータ情報に値を設定します。<br>
	 * 　※CAANMsg内のデータがNullの場合、空文字を設定します。<br>
	 * @param dataMap ユーザデータ情報
	 * @param prefix ユーザデータ情報より取得する場合に付加するプレフィックス
	 * @param setKey ユーザデータ情報に設定するキー名
	 * @param template メッセージキャリア
	 * @param getKey メッセージキャリアより取得するキー名
	 */
	private void setDataMap(HashMap<String, Object> dataMap, String prefix, String setKey, CAANMsg template, String getKey)
	{
		if (template.isNull(getKey))
		{
			dataMap.put(prefix + setKey, "");
		}
		else
		{
			dataMap.put(prefix + setKey, template.getString(getKey));
		}
	}
	
	/**
	 * ユーザデータ情報に値を設定します。<br>
	 * 　※CAANMsg内のデータがNullの場合、空文字を設定します。<br>
	 * @param dataMap ユーザデータ情報
	 * @param prefix ユーザデータ情報より取得する場合に付加するプレフィックス
	 * @param getSetKey ユーザデータ情報に設定するキー名
	 * @param template メッセージキャリア
	 */
	private void setDataMap(HashMap<String, Object> dataMap, String prefix, String getSetKey, CAANMsg template)
	{
		setDataMap(dataMap, prefix, getSetKey, template, getSetKey);
	}
	
	/**
	 * ユーザデータ情報にエラー情報を設定します。<br>
	 * 　※ユーザデータ情報内にすでにキーが存在する場合、値は設定されません。<br>
	 * @param inMap	 ユーザデータ情報
	 * @param prefix ユーザデータ情報より取得する場合に付加するプレフィックス
	 * @param setKey ユーザデータ情報に設定するキー名
	 * @param template メッセージキャリア
	 * @param getKey メッセージキャリアより取得するキー名
	 */
	private void setErrInfo(HashMap<String, Object> inMap, String prefix, String setKey, CAANMsg template, String getKey)
	{
		if (!template.isNull(getKey))
		{
			inMap.put(prefix + setKey, template.getString(getKey));
		}
	}
	
	/**
	 * ユーザデータ情報にエラー情報を設定します。<br>
	 * 　※ユーザデータ情報内にすでにキーが存在する場合、値は設定されません。<br>
	 * @param inMap	 ユーザデータ情報
	 * @param prefix ユーザデータ情報より取得する場合に付加するプレフィックス
	 * @param getSetKey ユーザデータ情報に設定するキー名
	 * @param template メッセージキャリア
	 */
	private void setErrInfo(HashMap<String, Object> inMap, String prefix, String getSetKey, CAANMsg template)
	{
		setErrInfo(inMap, prefix, getSetKey, template, getSetKey);
	}
	
	/**
	 * 単一CAANMsgのマッピング処理を行います。
	 * <br>
	 * @param paramMap
	 * @param template
	 * @return パラメータマップ
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> putParamMap(HashMap<String, Object> paramMap, CAANMsg template) throws RequestParameterException
	{
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 * SCの実行ステータスの取得処理を行います。
	 * <br>
	 * @param param
	 * @return SCの実行ステータス
	 * @throws Exception
	 */
	private int getReturnCode(IRequestParameterReadWrite param) throws Exception
	{
		return Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
	}
	
	/**
	 * コントロールマップ情報をセットします。
	 * @param param
	 * @param className
	 * @param templateId
	 * @param funcCode
	 * @return CAANMsgクラス
	 * @throws RequestParameterException
	 */
	private CAANMsg setControlMapInInfo(IRequestParameterReadWrite param,
			String className, String templateId, String funcCode) throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(className);
		
		// テンプレートID
		template.set(EKK1981B001CBSMsg.TEMPLATEID, templateId);
		
		// 機能コード（デフォルト：１）
		template.set(EKK1981B001CBSMsg.FUNC_CODE, funcCode);
		
		// オペレータ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);
		
		return template;
	}
	
	/**
	 * コントロールマップエラー情報格納処理を行います。
	 * <br>
	 * @param param
	 * @param itemplateStatus
	 * @param returnCode
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	private IRequestParameterReadWrite setControlMapErrInfo(IRequestParameterReadWrite param, int itemplateStatus, int returnCode)
			throws RequestParameterException
	{
		int templateStatus = itemplateStatus;

		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);
		}
		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;
	}
}
