/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：JPCMappingUtil
 *   ソースファイル名：JPCMappingUtil.java
 *   作成者          ：富士通
 *   日付            ：2011年07月14日
 *＜機能概要＞
 *   サービス層マッピング部品です。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v1.00.00    2011/07/14   鈴木          新規作成
 *
 **********************************************************************/

package com.fujitsu.futurity.bp.custom.common;


import com.fujitsu.futurity.model.base.CAANMsg;
import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadOnly;

import eo.common.util.JPCCommonUtil;


/**
 * サービス層マッピング部品です。<p>
 * <BR>
 * @author 富士通
 */
public class JPCMappingUtil extends JPCCommonUtil 
{
	
	/**
	 * <p>
	 * 新しいサービス層マッピング部品を生成します。
	 * </p>
	 */
	public JPCMappingUtil()
	{
	}

	/**
	 * <p>
	 * サービスの明細項目から値を取得し、String型で返却します。
	 * </p>
	 * @param param リクエストパラメータ
	 * @param scName 取得対象のSC名
	 * @param listName 取得対象のリスト名
	 * @param index 取得対象の明細番号
	 * @param itemName 取得対象の項目名
	 * @return 取得された値
	 * @throws RequestParameterException RequestParameter用例外クラス 
	 */
	public String getBPListValueString(IRequestParameterReadOnly param, String scName, String listName, Integer index, String itemName) 
	throws RequestParameterException
	{
		String value = (String)getBPListValueObject(param, scName, listName, index, itemName);
		if ("".equals(value))
		{
			return null;
		}
		return value;
	}


	
	/**
	 * <p>
	 * サービスIFの明細から値を取得し、String型で返却します
	 * </p>
	 * @param parentTemplate 取得対象のサービスインターフェイス
	 * @param listName 取得対象のリスト名
	 * @param index 取得対象の明細番号
	 * @param itemName 取得対象の項目名
	 * @return 取得された値
	 */
	public String getSCListValueString(CAANMsg parentTemplate, String listName, Integer index, String itemName)
	{
		String value = (String)getSCListValueObject(parentTemplate, listName, index, itemName);
		if ( value == null)
		{
			return new String();
		}
		return value;
	}

	
	
	/**
	 * <p>
	 * サービスの明細から値を取得します
	 * </p>
	 * @param param リクエストパラメータ
	 * @param scName 取得対象のSC名
	 * @param listName 取得対象のリスト名
	 * @param index 取得対象の明細番号
	 * @param itemName 取得対象の項目名
	 * @return 取得された値
	 * @exception RequestParameterException RequestParameter用例外クラス
	 */
	private Object getBPListValueObject(IRequestParameterReadOnly param, String scName, String listName, Integer index, String itemName)
	throws RequestParameterException
	{

		HashMap<Object, Object> inMap = null;
		ArrayList<HashMap<String, Object>> inList = null;

		/* ユーザデータ情報 */
		inMap = (HashMap<Object, Object>)param.getData(scName);
		
		inList = (ArrayList<HashMap<String, Object>>)inMap.get(listName);

		HashMap<String, Object> childMap = (HashMap<String, Object>)inList.get(index);

		return childMap.get(itemName);

	}


	
	/**
	 * <p>
	 * サービスIFの明細から値を取得します
	 * </p>
	 * @param parentTemplate 取得対象のサービスインターフェイス
	 * @param listName 取得対象のリスト名
	 * @param index 取得対象の明細番号
	 * @param itemName 取得対象の項目名
	 * @return 取得された値
	 */
	private Object getSCListValueObject(CAANMsg parentTemplate, String listName, Integer index, String itemName)
	{
		CAANMsg[] templateArray = null;
		templateArray = parentTemplate.getCAANMsgList(listName);
		CAANMsg childTemplate = templateArray[index];

		return 	childTemplate.getObject(itemName);
	}
	

}