/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom, 2011
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：JKKSIFMapperBase
 *   ソースファイル名：JKKSIFMapperBase.java
 *   作成者          ：富士通
 *   日付            ：2014年01月06日
 *＜機能概要＞
 *   S-IF利用マッパーの基底クラス
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v8.00.00    2014/01/06   FJ）藤田    新規作成
 *   v8.01.00    2014/02/26   FJ）藤田    createSIFRequestMapメソッド追加、editTemplateCommon戻り値追加
 *
 **********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.HashMap;

import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadOnly;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.model.base.CAANMsg;

import eo.common.constant.JPCModelConstant;

public class JKKSIFMapperBase {

	/**************************************************************************/
	/** 機能コード                                                           **/
	/**************************************************************************/
	/** 機能コード 1 */
	protected static final String FUNC_CD_1 = JPCModelConstant.FUNC_CD_1;
	/** 機能コード 2 */
	protected static final String FUNC_CD_2 = JPCModelConstant.FUNC_CD_2;
	/** 機能コード 3 */
	protected static final String FUNC_CD_3 = JPCModelConstant.FUNC_CD_3;
	/** 機能コード 4 */
	protected static final String FUNC_CD_4 = JPCModelConstant.FUNC_CD_4;
	/** 機能コード 5 */
	protected static final String FUNC_CD_5 = JPCModelConstant.FUNC_CD_5;

	/**
	 * 共通初期処理
	 * @param template
	 */
	protected void init(CAANMsg template)
	{
	}
	
	/**
	 * 持ちうるフィールドにNullマッピングで埋める
	 * @param msg 対象クラス
	 * @param contents 対応クラスのフィールド列挙
	 */
	protected void fillCAANMSGNullMapping(CAANMsg msg, Object[][] contents)
	{
		
		//要素ごとのループ
		for(int i = 0 ; i < contents.length ; i++)
		{
			
			Object element = null;
			
			//キーに該当する箇所の取得
			element = contents[i][0];

			//Nullでマッピング
			msg.setNull((String)element);
			
		}
		
	}

	// 2014/2/26 藤田 ADD START
	/**
	 * 初期化されたサービスI/F実行用のリクエストマップ(共通部設定済み)を返します。<br>
	 * @param param
	 * @return サービスI/F実行用のリクエストマップ
	 * @throws RequestParameterException
	 */
	public HashMap<String, Object> createNewSIFRequestMap(IRequestParameterReadOnly param)
	throws RequestParameterException
	{
		return editInMsgCmn(param);
	}
	// 2014/2/26 藤田 ADD END
	
	/**
	 * サービスI/F実行用の共通部を設定します<br>
	 * <br>
	 * 
	 * @param param (I) 業務データ取得用I/F
	 * @return 入力メッセージマップ
	 * @throws RequestParameterException
	 * @exception RequestParameterExceptionがスローされます 。
	 */
	public HashMap<String, Object> editInMsgCmn(IRequestParameterReadOnly param) 
	throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		/* 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;
		
	}
	
	/**
	 * S/IF呼出時の共通情報を設定する
	 * @param param 業務データ取得用I/F
	 * @param template 条件の設定先
	 * @return template 共通部設定後のtemplate
	 * @throws RequestParameterException
	 */
	public CAANMsg editTemplateCommon(IRequestParameterReadOnly 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 template;
	}

}
