/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JFUSearchAddress
*	ソースファイル名：JFUSearchAddress.java
*	作成者			：富士通
*	日付			：2014年09月04日
*＜機能概要＞
*	住所検索(住所表示)部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v10.00      2018/09/04  FJ)岡井     【ANK-2251-00-00】量販支援サイトマンション検索改善対応
*
**********************************************************************/
package eo.web.webview.common;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

import java.util.HashMap;

import com.fujitsu.futurity.web.x00.JCCWebServiceException;
import com.fujitsu.futurity.web.x31.X31BWebBusinessLogic;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.web.webview.mapping.FUSV0287_FUSV0287OPDBMapper;


public class JFUSearchAddress
{
	// ■サービス関係
	/** サービスID：FUSV0287 */
	private static final String USECASE_ID_FUSV0287 = "FUSV0287";

	// ■Bean項目(日本語名)
	/** 都道府県名 */
	private static final String BEAN_STATE_NM = "都道府県名（検索結果）";
	/** 市区町村名 */
	private static final String BEAN_CITY_NM = "市区町村名（検索結果）";
	/** 大字通称名 */
	private static final String BEAN_OAZTSU_NM = "大字通称名（検索結果）";
	/** 字丁目名 */
	private static final String BEAN_AZCHO_NM = "字丁目名（検索結果）";

	// ■その他
	/** DATABEAN_SET_VALUE */
	private static final String SET = X31CWebConst.DATABEAN_SET_VALUE;

	/**
	 * 部品呼出処理です。
	 * 
	 * <br>
	 * @param bl X31BWebBusinessLogic
	 */
	public static void execute(X31BWebBusinessLogic bl)
	{
		DEBUG_LOG.info("★★★JFUSearchAddress開始★★★");

		try
		{
			// 検索処理呼び出し
			search(bl);
		}
		catch (Exception e)
		{
			DEBUG_LOG.info("※検索処理中にエラー発生※");

			// 検索結果なしとして扱う
			X31SDataBeanAccess serviceFormBean = bl.getServiceFormBean();
			setNoResult(serviceFormBean);
		}

		DEBUG_LOG.info("★★★JFUSearchAddress終了★★★");
	}

	/**
	 * 検索処理です。
	 * 
	 * <br>
	 * @param bl X31BWebBusinessLogic
	 */
	private static void search(X31BWebBusinessLogic bl)
	{
		// サービスフォームBean取得
		X31SDataBeanAccess serviceFormBean = bl.getServiceFormBean();

		// 各Beanを配列に格納
		X31SDataBeanAccess[] beanArray = { serviceFormBean };

		// ユースケースIDを格納
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0287);

		// DBMapper呼び出し
		FUSV0287_FUSV0287OPDBMapper mapper = new FUSV0287_FUSV0287OPDBMapper();

		// ●上りマッピング
		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		// 住所検索情報一覧照会
		mapper.setFUSV028701SC(beanArray, dataMap, JPCModelConstant.FUNC_CD_1);

		// 検索結果格納用マップ
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// ●サービスの呼び出し
		try
		{
			bl.invokeService(paramMap, dataMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			DEBUG_LOG.info("※サービス(FUSV0287)実行中にエラー発生※");

			// 検索結果なしとして扱う
			setNoResult(serviceFormBean);
			return;
		}

		// ●下りマッピング
		// 住所検索情報一覧照会
		mapper.getFUSV028701SC(serviceFormBean, outputMap);
	}

	/**
	 * 検索結果無しの設定処理です。
	 * 
	 * <br>
	 * @param bean データBean
	 */
	private static void setNoResult(X31SDataBeanAccess bean)
	{
		// 都道府県名
		bean.sendMessageString(BEAN_STATE_NM, SET, JFUStrConst.EMPTY);
		// 市区町村名
		bean.sendMessageString(BEAN_CITY_NM, SET, JFUStrConst.EMPTY);
		// 大字通称名
		bean.sendMessageString(BEAN_OAZTSU_NM, SET, JFUStrConst.EMPTY);
		// 字丁目名
		bean.sendMessageString(BEAN_AZCHO_NM, SET, JFUStrConst.EMPTY);
	}
}