/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUGetPplanKttankaCC
*   ソースファイル名：JFUGetPplanKttankaCC.java
*   作成者          ：富士通
*   日付            ：2013年04月03日
*＜機能概要＞
*   料金プラン固定単価取得コンポーネント部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v5.00       2013/04/03   FJ) 大塚    新規作成
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Arrays;

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 eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EKK0601B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0601B002CBSMsg1List;

/**
 * 料金プラン固定単価取得コモンコンポーネント部品
 * <br>
 * @author 富士通
 */
public class JFUGetPplanKttankaCC extends JFUBaseCC
{
	/** 料金プラン固定単価一覧照会（固定料金表示） */
	private static final String SIF_EKK0601B002 = "EKK0601B002";

	/** IN項目リスト */
	/** 料金プラン固定単価一覧照会（固定料金表示） */
	private static final List<String> IN_COLUMN_LIST_PPLAN;

	/** 料金プラン固定単価一覧照会（固定料金表示）テンプレート名 */
	private static final String EKK0601B002CBSMSG1LIST = "EKK0601B002CBSMsg1List";

	/**  料金プラン固定単価取得結果 */
	private static final String PPLANKTTANKALIST = "pPlanKttankaList";

	/** IN項目値 */
	static
	{
		IN_COLUMN_LIST_PPLAN = Arrays.asList(EKK0601B002CBSMsg.KEY_PPLAN_CD);
	}

	/**
	 * 料金プラン固定単価取得処理<br>
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Exception Exception
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite getPplanKttanka(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		HashMap<String, Object> pPlanMap = (HashMap<String, Object>)param.getData(fixedText);

		// マップが存在しない場合、処理を終了する。
		if ((pPlanMap == null) || (pPlanMap.isEmpty()))
		{
			return param;
		}

		HashMap<String, Object> srcPplanListMap = new HashMap();
		ArrayList srcPplanList = new ArrayList();

		srcPplanList = (ArrayList)pPlanMap.get("pplan_list");

		// 結果を詰めるリスト
		ArrayList pplan_kttanka_list = new ArrayList();

		// 取得したキャンペーンコードリストの件数分処理をループさせる
		for (int i = 0; i < srcPplanList.size(); i++)
		{
			srcPplanListMap = (HashMap)srcPplanList.get(i);
			// 料金プラン固定単価一覧照会（固定料金表示）

			// 上りマッピング
			setInMapEKK0601B002(param, fixedText, srcPplanListMap);
			// 機能コード設定
			setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

			// 検索エラーなし設定
			ignoreSearchError(param, fixedText);

			// サービスIF実行
			executeSC(handle, param, fixedText, SIF_EKK0601B002, EKK0601B002CBSMsg.EKK0601B002CBSMSG1LIST, IN_COLUMN_LIST_PPLAN, BLANK);

			// 下りマッピング
			setOutMapEKK0601B002(param, fixedText, srcPplanListMap, pplan_kttanka_list);
		}

		pPlanMap.put(PPLANKTTANKALIST, pplan_kttanka_list);

		return param;
	}

	/**
	 * 上りマッピング項目設定(料金プラン固定単価一覧照会（固定料金表示）)
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param addWribSvcListMap 割引サービスマップ
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0601B002(IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> srcPplanListMap)
			throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);

		// ＫＥＹ＿表示用サービスコード
		inMap.put(EKK0601B002CBSMsg.KEY_PPLAN_CD, srcPplanListMap.get("key_pplan_cd"));
	}

	/**
	 * 下りマッピング項目設定(料金プラン固定単価一覧照会（固定料金表示）)
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param srcPplanListMap
	 * @param pplan_kttanka_list 結果を詰めるリスト
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private ArrayList setOutMapEKK0601B002(IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> srcPplanListMap,
			ArrayList pplan_kttanka_list) throws RequestParameterException
	{
		// 結果を詰めるマップを取得
		HashMap<String, Object> dataMap = (HashMap<String, Object>)param.getData(fixedText);

		HashMap<String, Object> childMap = null;

		HashMap<String, Object> inMap = null;

		ArrayList<Object> inMapList = (ArrayList)dataMap.get(EKK0601B002CBSMSG1LIST);

		if (inMapList != null)
		{
			for (int i = 0; i < inMapList.size(); i++)
			{
				childMap = new HashMap<String, Object>();

				childMap = (HashMap)inMapList.get(i);

				if (childMap != null)
				{
					inMap = new HashMap<String, Object>();

					// 料金プランコード 料金プラン固定金額
					inMap.put((String)srcPplanListMap.get("key_pplan_cd"), childMap.get(EKK0601B002CBSMsg1List.PPLAN_KOTEI_AMNT));

					pplan_kttanka_list.add(inMap);
				}
			}
		}
		return pplan_kttanka_list;
	}

	/**
	 * チェック処理
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		return null;
	}

}
