/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JCKSV905501CC
*   ソースファイル名：JCKSV905501CC.java
*   作成者          ：富士通
*   日付            ：2015年09月23日
*＜機能概要＞
*   名寄せeo電気契約お客様変更を行います。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v16.00.00    2015/09/23   FJ）山岡    新規作成
*   v16.01.00    2015/10/07   FJ）山岡    IT1-2015-0000105
**********************************************************************/

package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.JKKSvcConst;
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.SCCallException;
import com.fujitsu.futurity.model.base.CAANMsg;
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.common.JCMAPLConstMgr;
import eo.common.constant.JKKStrConst;
import eo.ejb.cbs.cbsmsg.EKK0081B016CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B016CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0491B005CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0491B005CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2961B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2961B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKKA0040001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0040001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2961B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2961B001CBSMsg1List;



/**
 * 名寄せeo電気契約お客様変更を行う。
 * <BR>
 * @ author 富士通
 */
public class JCKSV905501CC extends AbstractCommonComponent 
{
	/** エラーメッセージ */
	public static final String ERR_MSG = "INVALID_RETURN_MESSAGE";

	/** eo電気サービス契約お客様変更CCマップのキー **/
	public static final String JKKEOELECTCUSTUPD = "JKKEoElecCustUpdCC";

	/**
	 * 名寄せeo電気契約お客様変更を行います。
	 * <br>
	 * 
	 * @param	handle		セッションハンドル
	 * @param	param		リクエストパラメータ
	 * @param	fixedText	サービスメッセージ
	 * @return	param		リクエストパラメータ
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite executeMain(
			SessionHandle				handle
		,	IRequestParameterReadWrite	param
		,	String						fixedText
	) throws Throwable
	{

		//* IT1-2015-0000105  20151007 MOD START *//
		
		
		// EKK0081B016 サービス契約一覧照会（料金グループコード）
		//ArrayList<HashMap<String, Object>> listMapEKK0081B016 = null;
		//listMapEKK0081B016 = callEKK0081B016(
		//		handle
		//	,	param
		//	,	fixedText
		//);
		
		// 照会結果判定:データなしの場合は処理終了
		//if (listMapEKK0081B016.size() <= 0) {
		//	return param;
		//}
		
		//eo電気サービス契約お客様変更CC呼出
		//callJKKEoElecCustUpd(
		//							 handle
		//							,param
		//							,fixedText
		//							,listMapEKK0081B016);
		callJKKEoElecCustUpd(
				 handle
				,param
				,fixedText);
		//* IT1-2015-0000105  20151007 MOD END *//


		return param;
	}


	
	/**
	 * 取得したeo電気契約データのサービス契約に対してeo電気契約お客様変更CCを行う
	 * @param listMapEKK0081B016 サービス契約一覧取得結果
	 * @return 
	 */
	private HashMap<String, Object> callJKKEoElecCustUpd(
			 SessionHandle				    handle
			,IRequestParameterReadWrite	    param
			,String							fixedText
			//* 20151007 IT1-2015-0000105   MOD START *//
			//,ArrayList<HashMap<String, Object>> listMapEKK0081B016
			//* 20151007 IT1-2015-0000105   MOD END *//
	) throws Throwable
	{
		HashMap<String, Object> ccMap = (HashMap<String, Object>)param.getData(fixedText);
		
		//* 20151007 IT1-2015-0000105   ADD START *//
		List listMapEKK0081B016 = (List)ccMap.get("EKK0081B016CBSMsg1List");
		//* 20151007 IT1-2015-0000105   ADD END *//
		
		int n1 = listMapEKK0081B016.size();
		for (int i=0; i < n1; i++)
		{
			//* 20151007 IT1-2015-0000105   MOD START *//
			//HashMap<String, Object> mapEKK0081     = listMapEKK0081B016.get(i);
			HashMap<String, Object> mapEKK0081     = (HashMap<String, Object>) listMapEKK0081B016.get(i);
			//* 20151007 IT1-2015-0000105   MOD END *//
			
			//eo電気契約お客様変更CCのパラメータ設定
			//サービス契約番号
			ccMap.put("svc_kei_no",mapEKK0081.get(EKK0081B016CBSMsg1List.SVC_KEI_NO));
			
			//名寄せ先SYSID
			ccMap.put("sysid",ccMap.get("dstsysid"));
			
			//eo電気契約お客様変更CCを呼出し
			param.setData(JKKEOELECTCUSTUPD, ccMap);
			(new JKKEoElecCustUpdCC()).execute(handle, param, JKKEOELECTCUSTUPD);
		}
		return null;
	}
	//* IT1-2015-0000105  20151007 DEL START *//
	/**
	 * サービス契約一覧照会（料金グループコード）SIFを呼び出します。
	 * @param	handle				セッションハンドル
	 * @param	param				リクエストパラメータ
	 * @param	fixedText			サービスメッセージ
	 * @return	result				処理結果
	 * @throws Throwable 
	 */
	//private ArrayList<HashMap<String, Object>> callEKK0081B016(
	//		SessionHandle				handle
	//	,	IRequestParameterReadWrite	param
	//	,	String						fixedText
	//) throws Throwable
	//{
		// ユーザ情報取得
		//HashMap<String, Object> ccMap = (HashMap<String, Object>)param.getData(fixedText);

		// テンプレート作成
		//CAANMsg template = new CAANMsg(EKK0081B016CBSMsg.class.getName());
		// テンプレートID
		//template.set(EKK0081B016CBSMsg.TEMPLATEID, "EKK0081B016");
		// 機能コード
		//template.set(EKK0081B016CBSMsg.FUNC_CODE, "2");
		// テンプレート共通情報設定処理
		//setTemplateCommon(param, template);
		// ＫＥＹ＿ＳＹＳＩＤ
		//template.set(EKK0081B016CBSMsg.KEY_SYSID, ccMap.get("orgsysid"));
		// ＫＥＹ＿料金グループコード
		//template.set(EKK0081B016CBSMsg.KEY_PRC_GRP_CD, JKKStrConst.CD00133_17);

		// SIF実行
		//Map<?, ?> mapSIFResult = null;
		//mapSIFResult = executeSIF(handle, param, fixedText, template);

		// ユーザ情報エラー設定
		//CAANMsg[] retTemplates = (CAANMsg[])mapSIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
		//CAANMsg retTemplate = retTemplates[0];
		//if (!retTemplate.isNull(EKK0081B016CBSMsg.KEY_SYSID_ERR)) {
		//	if (!ccMap.containsKey("sysid_err")) {
		//		ccMap.put("sysid_err", retTemplate.getString(EKK0081B016CBSMsg.KEY_SYSID_ERR));
		//	}
		//}
		//if (!retTemplate.isNull(EKK0081B016CBSMsg.EKK0081B016CBSMSG1LIST_ERR)) {
		//	if (!ccMap.containsKey("sysid_err")) {
		//		ccMap.put("sysid_err", retTemplate.getString(EKK0081B016CBSMsg.EKK0081B016CBSMSG1LIST_ERR));
		//	}
		//}

		// SIF実行エラーチェック
		//executeSIFErrCheck(mapSIFResult);

		// 処理結果リストを設定
		//ArrayList<HashMap<String, Object>> listResult = new ArrayList<HashMap<String,Object>>();
		//listResult.addAll(
		//	mappingCAANOutMsg(
		//			EKK0081B016CBSMsg.EKK0081B016CBSMSG1LIST
		//		,	(CAANMsg[])mapSIFResult.get(JCMConstants.TEMPLATE_LIST_KEY)
		//	)
		//);

		//return listResult;
	//}
	
	/**
	 * S/IF呼出時のテンプレート共通情報を設定します。
	 * @param	param		リクエストパラメータ
	 * @param	template	テンプレート
	 * @return	なし
	 * @throws RequestParameterException
	 */
	//public void setTemplateCommon(
	//		IRequestParameterReadWrite	param
	//	,	CAANMsg						template
	//) throws RequestParameterException
	//{
		// オペレータ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;
	//}

	/**
	 * SIFを呼び出します。
	 * @param	handle		セッションハンドル
	 * @param	param		リクエストパラメータ
	 * @param	fixedText	サービスメッセージ
	 * @param	template	テンプレート
	 * @return	処理結果リスト(ArrayListのハッシュマップ)
	 */
	//private Map<?, ?> executeSIF(
	//		SessionHandle				handle
	//	,	IRequestParameterReadWrite	param
	//	,	String						fixedText
	//	,	CAANMsg						template
	//) throws Throwable
	//{
		// リクエスト用クラスの設定
	//	HashMap<String, Object> mapSIFRequest = setSCInputCommonData(param);
	//	mapSIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		// SIF実行
	//	Map<?, ?> mapSIFResult = null;
	//	ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
	//	mapSIFResult = scCall.run(mapSIFRequest, handle);

		// コントロールマップエラー情報設定
	//	setCtlMapErrInfo(param, mapSIFResult);

	//	return mapSIFResult;
	//}

	/**
	 * SIF実行エラーチェックを行ないます。
	 * <br>
	 * @param	mapSIFResult	SIF戻り値マップ
	 * @return	なし
	 * @throws	Exception
	 */
	//private void executeSIFErrCheck(
	//		Map<?, ?> mapSIFResult
	//) throws Exception
	//{
	//	CAANMsg[] templates = (CAANMsg[])mapSIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
	//	CAANMsg template = templates[0];

		// リターンコード取得
		//Integer returnCode = (Integer)mapSIFResult.get(JCMConstants.RET_CD_INT_KEY);
		
		// ステータス取得
		//int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		//if ((0 != returnCode.intValue()) || (0 != templateStatus)) {
		//	String errMsg = ERR_MSG;
		//	throw new SCCallException(errMsg, String.valueOf(returnCode), templateStatus);
		//}
	//}

	/**
	 * CAANMsg[]の結果をHashとして抽出します（一覧照会用）。
	 * @param	mapKey		テンプレートリストのマップキー
	 * @param	scResult	SC処理結果
	 * @return	listResult	処理結果リスト(ArrayListのハッシュマップ)
	 */
	//private ArrayList<HashMap<String, Object>> mappingCAANOutMsg(
	//		String		mapKey
	//	,	CAANMsg[]	scResult
	//)
	//{
	//	ArrayList<HashMap<String, Object>> listResult =
	//		new ArrayList<HashMap<String, Object>>();		// 処理結果リスト
	//	CAANMsg[] caanMsg = null;							// SC実行結果

		// 結果の抽出
	//	caanMsg = scResult[0].getCAANMsgList(mapKey);

	//	if(caanMsg != null)
	//	{
	//		for(int i = 0 ; i < caanMsg.length ; i++)
	//		{
	//			listResult.add(caanMsg[i].getMsgData());
	//		}
	//	}

	//	return listResult;
	//}

	/**
	 * SCインプット共通データ設定処理を行います。
	 * <br>
	 * @param	param						リクエストパラメータ
	 * @return	なし
	 * @throws	RequestParameterException
	 */
	//private HashMap<String, Object> setSCInputCommonData(
	//		IRequestParameterReadWrite	param
	//) throws RequestParameterException
	//{
	//	HashMap<String, Object> mapSCInputCommon = new HashMap<String, Object>();

		// 電文ID
	//	mapSCInputCommon.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
	//	mapSCInputCommon.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
	//	mapSCInputCommon.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
	//	mapSCInputCommon.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());
		// 依頼先ホスト名
	//	mapSCInputCommon.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
	//	mapSCInputCommon.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
	//	mapSCInputCommon.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
	//	mapSCInputCommon.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

	//	return mapSCInputCommon;
	//}

	/**
	 * <pre>
	 * サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なエラー情報をマッピングする
	 * 
	 * </pre>
	 * @param	param			リクエストパラメータ
	 * @param	mapSIFResult	SIF戻り値マップ
	 * @return	なし
	 * @throws Throwable
	 */
	//private void setCtlMapErrInfo(
	//		IRequestParameterReadWrite	param
	//	,	Map<?, ?>					mapSIFResult
	//) throws Throwable 
	//{
		// SIF戻り値マップからCAANMsgを取得
	//	CAANMsg[] templates = (CAANMsg[])mapSIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
	//	CAANMsg template = templates[0];

		// ステータス決定
	//	Integer returnCode = (Integer)mapSIFResult.get(JCMConstants.RET_CD_INT_KEY);
	//	int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
	//	if (returnCode.intValue() != 0) {
	//		templateStatus = 9000;
	//	}
	//	if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null) {
	//		templateStatus = 0;
	//	}

		// BPステータス決定
	//	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));
	//	}

		// BPステータス設定
	//	if (templateStatus > bpStatus) {
	//		String formatStatus = String.format("%1$04d", templateStatus);
	//		String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
	//		param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
	//		param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
	//	}

		// コントロールマップにエラー情報を設定
	//	ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
	//	if(errList == null) {
	//		errList = new ArrayList<Object>();
	//	}
	//	param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(mapSIFResult, errList));

	//	return;
	//}
	//* IT1-2015-0000105  20151007 DEL END *//
}
