/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKGetAddressCodeCC
*   ソースファイル名：JKKGetAddressCodeCC.java
*   作成者          ：富士通
*   日付            ：2011年11月11日
*＜機能概要＞
*   住所コード取得部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/11/11   FJ）川島    新規作成
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;

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.model.base.CAANMsg;

/**
 * 住所コード取得部品
 * <br>
 * @author 富士通
 */
public class JKKGetAddressCodeCC extends AbstractCommonComponent
{

	/**
	 * CAANMsgに必要なデータのマッピング処理を行います。
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText リクエストパラメータに設定されたHashMapのキー名
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
		throws Exception
	{
		return JKKBpCommon.createBpNotCheckParam();
	}

	/**
	 * 住所コード取得部品を使用し、住所コードの取得を行います。
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText リクエストパラメータに設定されたHashMapのキー名
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite getAddressCode(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		HashMap inMap = (HashMap)(param.getData(fixedText));
		if (inMap == null)
		{
			return param;
		}

		// 住所コード取得部品呼び出し
		JFUGetAddressCodeUtil addressCodeUtill = new JFUGetAddressCodeUtil();
		HashMap<?, ?> outMap = addressCodeUtill.getAddressCode(handle, param, inMap);
		
		param.setData(fixedText, outMap);

		return param;
	}
	
	/**
	 * サービスコンポーネント実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 * @param param リクエストパラメータ
	 * @param templates テンプレート
	 * @param returnCode リターンコード
	 * @param fixedText リクエストパラメータに設定されたHashMapのキー名
	 * @return リクエストパラメータ
	 * @throws RequestParameterException
	 */
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, String fixedText)
		throws RequestParameterException
	{
		return param;
	}

	/**
	 * 住所コード取得部品を使用し、住所コードの取得を行います（各登録画面用）。
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText リクエストパラメータに設定されたHashMapのキー名
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite getAddressCodeAddScreen(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		HashMap inMap = (HashMap)(param.getData(fixedText));
		if (inMap == null)
		{
			return param;
		}

		ArrayList addressList = (ArrayList)inMap.get("addressList");
		ArrayList addressListDtl = (ArrayList)inMap.get("addressListDtl");

		if (addressList == null && addressListDtl == null)
		{
			return param;
		}

		for (int i = 0; i < addressList.size(); i++)
		{
			HashMap<String, Object> mainMap = (HashMap<String, Object>)addressList.get(i);

			// 住所コード取得部品呼び出し
			JFUGetAddressCodeUtil addressCodeUtill = new JFUGetAddressCodeUtil();
			HashMap<?, ?> outMap = addressCodeUtill.getAddressCode(handle, param, mainMap);

			if (mainMap.containsKey("key_fixedText"))
			{
				HashMap ccMainMap = (HashMap)(param.getData(mainMap.get("key_fixedText")));

				ccMainMap.put(mainMap.get("key_ad_cd"), outMap.get("ad_cd"));
//				ccMainMap.put(mainMap.get("key_place_pcd"), outMap.get("pcd"));
				ccMainMap.put(mainMap.get("key_chge_state_nm"), outMap.get("state_nm"));
				ccMainMap.put(mainMap.get("key_chge_city_nm"), outMap.get("city_nm"));
				ccMainMap.put(mainMap.get("key_chge_oaztsu_nm"), outMap.get("oaztsu_nm"));
				ccMainMap.put(mainMap.get("key_chge_azcho_nm"), outMap.get("azcho_nm"));
				ccMainMap.put(mainMap.get("key_chge_before_bnchi"), outMap.get("after_bnchi"));
			}
		}

		if (addressListDtl == null)
		{
			return param;
		}

		for (int i = 0; i < addressListDtl.size(); i++)
		{
			HashMap<String, Object> mainMapDtl = (HashMap<String, Object>)addressListDtl.get(i);

			if (mainMapDtl.containsKey("key_fixedText_dtl"))
			{
				// 実際のＣＣを動かすためのマップ
				HashMap ccMainMap = (HashMap)(param.getData(mainMapDtl.get("key_fixedText_dtl")));

				if (mainMapDtl.containsKey("key_dtl_list"))
				{
					ArrayList subAddressList = (ArrayList)mainMapDtl.get("key_dtl_list");
					ArrayList ccSubAddressList = (ArrayList)ccMainMap.get(mainMapDtl.get("key_dtl_list_key"));

					for (int j = 0; j < subAddressList.size(); j++)
					{
						HashMap<String, Object> subMap = (HashMap<String, Object>)subAddressList.get(j);

						// 住所コード取得部品呼び出し
						JFUGetAddressCodeUtil addressCodeUtillSub = new JFUGetAddressCodeUtil();
						HashMap<?, ?> outMapSub = addressCodeUtillSub.getAddressCode(handle, param, subMap);

						HashMap ccSubMap = (HashMap)(ccSubAddressList.get(j));

						ccSubMap.put(subMap.get("key_ad_cd"), outMapSub.get("ad_cd"));
//						ccSubMap.put(subMap.get("key_place_pcd"), outMapSub.get("pcd"));
						ccSubMap.put(subMap.get("key_chge_state_nm"), outMapSub.get("state_nm"));
						ccSubMap.put(subMap.get("key_chge_city_nm"), outMapSub.get("city_nm"));
						ccSubMap.put(subMap.get("key_chge_oaztsu_nm"), outMapSub.get("oaztsu_nm"));
						ccSubMap.put(subMap.get("key_chge_azcho_nm"), outMapSub.get("azcho_nm"));
						ccSubMap.put(subMap.get("key_chge_before_bnchi"), outMapSub.get("after_bnchi"));
					}
				}
			}
		}

		return param;
	}
}
