/*********************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：CNSV0039_CNSV0039OPDBMapper
 *	ソースファイル名：CNSV0039_CNSV0039OPDBMapper.java
 *	作成者			：FJ
 *	日付			：2012年06月28日
 *＜機能概要＞
 *	BP（コンテンツ支払方法詳細照会(初期表示)）へのＤ−Ｂマッピングクラスです。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2012/06/28	FJ		新規作成
 *	v4.00.0		2012/09/21	FJ)小林		【巻き取りA】ANK-1210-00-00 整理番号編集対応
 *
 **********************************************************************/
package eo.web.webview.mapping;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.fujitsu.futurity.web.x31.X31BWebBusinessLogic;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CNW01601SF.CNW01601SFConst;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class CNSV0039_CNSV0039OPDBMapper {

	/**
	 * コンストラクタ
	 */
	public CNSV0039_CNSV0039OPDBMapper() {
	}

	/**
	 * 上りマッピングをする
	 * 
	 * @param bean
	 *            　[0]：コンテンツ支払方法詳細照会
	 * @param outputMap
	 * @param func_code
	 *            　機能コード
	 * @param bl
	 *            ビューロジックインスタンス
	 */
	@SuppressWarnings("unchecked")
	public HashMap setCNSV003901SC(X31SDataBeanAccess[] bean,
			HashMap outputMap, String func_code, X31BWebBusinessLogic bl) {

		if (bean == null) {
			return null;
		}

		if (bean.length != 1) {
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// ＩＳＰ決済サービス契約番号 → コンテンツ支払方法詳細取得マップ.ISP決済サービス契約番号
		parentMap.put("isp_kssai_svc_kei_no", bean[0].sendMessageString(
				"ＩＳＰ決済サービス契約番号", X31CWebConst.DATABEAN_GET_VALUE));
		
		outputMap.put("CNSV003901SC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * 
	 * @param outputMap
	 * @param func_code
	 *            　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setCNSV003902SC(HashMap outputMap, String func_code) {

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		outputMap.put("CNSV003902SC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * 
	 * @param bean
	 *            　[0]：コンテンツ支払方法詳細照会
	 * @param outputMap
	 * @param func_code
	 *            　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setCNSV003903SC(HashMap outputMap, String func_code) {

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		outputMap.put("CNSV003903SC", parentMap);

		return outputMap;
	}

	/**
	 * サービス契約に関する下りマッピングをする
	 * 
	 * @param bean
	 *            　[0]：コンテンツ支払方法詳細照会
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getCNSV003901SC(X31SDataBeanAccess[] bean,
			HashMap outputMap) {

		// サービスフォームBeanが設定されていない場合
		if (bean == null) {
			return null;
		}

		// 複数指定された場合
		if (bean.length != 1) {
			return bean;
		}

		// サービス契約一意照会
		HashMap cnsv003901Map = null;

		// サービス契約一意照会マップが格納されている場合
		if (outputMap.containsKey("CNSV003901SC")
				&& outputMap.get("CNSV003901SC") != null
				&& outputMap.get("CNSV003901SC") instanceof HashMap) {

			// サービス契約一意照会マップを取得
			cnsv003901Map = (HashMap) outputMap.get("CNSV003901SC");
		}

		// サービス契約一意照会マップが取得できなかった場合
		if (cnsv003901Map == null) {
			return bean;
		}

		// サービス契約一意照会明細が格納されている場合
		if (cnsv003901Map.containsKey("EKK0081A010CBSMsg1List")
				&& cnsv003901Map.get("EKK0081A010CBSMsg1List") != null
				&& cnsv003901Map.get("EKK0081A010CBSMsg1List") instanceof ArrayList) {

			// サービス契約一意照会明細
			ArrayList ekk0081A010CbsMsg1List = (ArrayList) cnsv003901Map
					.get("EKK0081A010CBSMsg1List");

			// サービス契約一意照会明細が0件の場合
			if (ekk0081A010CbsMsg1List.size() == 0) {
				return bean;
			}

			HashMap ekk0081A010CbsMsgMap = (HashMap) ekk0081A010CbsMsg1List
					.get(0);

			// 整理番号編集処理(【巻き取りA】ANK-1210-00-00)
			String seiriNo = (String) ekk0081A010CbsMsgMap.get("seiri_no");
			String seiriNoEdit = "";
			if(seiriNo != null)
			{
				if(!"".equals(seiriNo))
				{
					seiriNoEdit = seiriNo.substring(seiriNo.length() - 4, seiriNo.length());
					// ゼロサプレス
					Matcher mtc = Pattern.compile("^0+([0-9]+.*)").matcher(seiriNoEdit);
					if (mtc.matches())
					{
						seiriNoEdit = mtc.group(1);
					}
					seiriNo = seiriNo.substring(0, 10) + "-" + seiriNoEdit;
				}
			}
			
			// 整理番号をマッピング
//			bean[0].sendMessageString(CNW01601SFConst.SEIRI_NO,
//					X31CWebConst.DATABEAN_SET_VALUE,
//					(String) ekk0081A010CbsMsgMap.get("seiri_no"));
			
			bean[0].sendMessageString(CNW01601SFConst.SEIRI_NO,
					X31CWebConst.DATABEAN_SET_VALUE,
					seiriNo);
		}

		return bean;
	}

	/**
	 * 料金コースに関する下りマッピングをする
	 * 
	 * @param bean
	 *            　[0]：コンテンツ支払方法詳細照会
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getCNSV003902SC(X31SDataBeanAccess[] bean,
			HashMap outputMap) {

		// サービスフォームBeanが設定されていない場合
		if (bean == null) {
			return null;
		}

		// 複数設定された場合
		if (bean.length != 1) {
			return bean;
		}

		// 料金コース一意照会
		HashMap cnsv003902Map = null;

		// 料金コース一意照会マップが格納されている場合
		if (outputMap.containsKey("CNSV003902SC")
				&& outputMap.get("CNSV003902SC") != null
				&& outputMap.get("CNSV003902SC") instanceof HashMap) {

			// 料金コース一意照会マップを取得
			cnsv003902Map = (HashMap) outputMap.get("CNSV003902SC");
		}

		// 料金コース一意照会マップが取得できなかった場合
		if (cnsv003902Map == null) {
			return bean;
		}

		// サービス契約回線内訳一覧明細が格納されている場合
		if (cnsv003902Map.containsKey("EKK0791A010CBSMsg1List")
				&& cnsv003902Map.get("EKK0791A010CBSMsg1List") != null
				&& cnsv003902Map.get("EKK0791A010CBSMsg1List") instanceof ArrayList) {

			// 料金コース一意照会明細を取得
			ArrayList ekk0791A010CbsMsg1List = (ArrayList) cnsv003902Map
					.get("EKK0791A010CBSMsg1List");

			// 料金コース一意照会明細が0件の場合
			if (ekk0791A010CbsMsg1List.size() == 0) {
				return bean;
			}

			HashMap ekk0791A010CbsMsgMap = (HashMap) ekk0791A010CbsMsg1List
					.get(0);

			// 料金コース名をマッピング
			String prcGrp = (String) ekk0791A010CbsMsgMap.get("prc_grp_cd_nm");
			if(prcGrp != null)
			{
				prcGrp = prcGrp + " ";
			}
			else
			{
				prcGrp = "";
			}
			
			String prcCur = (String) ekk0791A010CbsMsgMap.get("prc_course_nm");
			if(prcCur == null)
			{
				prcCur = "";
			}
			
			
//			bean[0].sendMessageString(CNW01601SFConst.SVC_NM,
//					X31CWebConst.DATABEAN_SET_VALUE,
//					(String) ekk0791A010CbsMsgMap.get("prc_grp_cd_nm") + " " +
//					(String) ekk0791A010CbsMsgMap.get("prc_course_nm"));
			
			bean[0].sendMessageString(CNW01601SFConst.SVC_NM,
					X31CWebConst.DATABEAN_SET_VALUE,
					prcGrp +
					prcCur);
		}

		return bean;
	}

	/**
	 * サービス契約回線内訳に関する下りマッピングをする
	 * 
	 * @param bean
	 *            　[0]：コンテンツ支払方法詳細照会
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getCNSV003903SC(X31SDataBeanAccess[] bean,
			HashMap outputMap) {

		// サービスフォームBeanが設定されていない場合
		if (bean == null) {
			return null;
		}

		// 複数設定された場合
		if (bean.length != 1) {
			return bean;
		}

		// サービス契約回線内訳一覧照会
		HashMap cnsv003903Map = null;

		// サービス契約回線内訳一覧照会マップが格納されている場合
		if (outputMap.containsKey("CNSV003903SC")
				&& outputMap.get("CNSV003903SC") != null
				&& outputMap.get("CNSV003903SC") instanceof HashMap) {

			// サービス契約回線内訳一覧照会マップを取得
			cnsv003903Map = (HashMap) outputMap.get("CNSV003903SC");
		}

		// サービス契約回線内訳一覧照会マップが取得できなかった場合
		if (cnsv003903Map == null) {
			return bean;
		}

		// サービス契約回線内訳一覧明細が格納されている場合
		if (cnsv003903Map.containsKey("EKK0241B001CBSMsg1List")
				&& cnsv003903Map.get("EKK0241B001CBSMsg1List") != null
				&& cnsv003903Map.get("EKK0241B001CBSMsg1List") instanceof ArrayList) {

			// サービス契約回線内訳一覧照会明細を取得
			ArrayList ekk0241B001CbsMsg1List = (ArrayList) cnsv003903Map
					.get("EKK0241B001CBSMsg1List");

			// サービス契約回線内訳一覧照会明細が0件の場合
			if (ekk0241B001CbsMsg1List.size() == 0) {
				return bean;
			}

			// 先頭を取得
			HashMap ekk0241B001CbsMsgMap = (HashMap) ekk0241B001CbsMsg1List
					.get(0);

			// 都道府県をマッピング
			bean[0].sendMessageString(CNW01601SFConst.UEPC_STATE_NM,
					X31CWebConst.DATABEAN_SET_VALUE,
					(String) ekk0241B001CbsMsgMap.get("uepc_state_nm"));

			// 市区町村をマッピング
			bean[0].sendMessageString(CNW01601SFConst.UEPC_CITY_NM,
					X31CWebConst.DATABEAN_SET_VALUE,
					(String) ekk0241B001CbsMsgMap.get("uepc_city_nm"));

			// 大字通称をマッピング
			bean[0].sendMessageString(CNW01601SFConst.UEPC_OAZTSU_NM,
					X31CWebConst.DATABEAN_SET_VALUE,
					(String) ekk0241B001CbsMsgMap.get("uepc_oaztsu_nm"));

			// 字丁目をマッピング
			bean[0].sendMessageString(CNW01601SFConst.UEPC_AZCHO_NM,
					X31CWebConst.DATABEAN_SET_VALUE,
					(String) ekk0241B001CbsMsgMap.get("uepc_azcho_nm"));

			// 番地名をマッピング
			bean[0].sendMessageString(CNW01601SFConst.UEPC_BNCHIGO,
					X31CWebConst.DATABEAN_SET_VALUE,
					(String) ekk0241B001CbsMsgMap.get("uepc_bnchigo"));

			// 建物名をマッピング
			bean[0].sendMessageString(CNW01601SFConst.UEPC_ADRTTM,
					X31CWebConst.DATABEAN_SET_VALUE,
					(String) ekk0241B001CbsMsgMap.get("uepc_adrttm"));

			// 部屋番号をマッピング
			bean[0].sendMessageString(CNW01601SFConst.UEPC_ADRRM,
					X31CWebConst.DATABEAN_SET_VALUE,
					(String) ekk0241B001CbsMsgMap.get("uepc_adrrm"));

			// 利用場所結合用バッファ
			StringBuilder sb = new StringBuilder();

			sb.append((String) ekk0241B001CbsMsgMap.get("uepc_state_nm")); // 都道府県
			sb.append((String) ekk0241B001CbsMsgMap.get("uepc_city_nm")); // 市区町村
			sb.append((String) ekk0241B001CbsMsgMap.get("uepc_oaztsu_nm")); // 大字通称
			sb.append((String) ekk0241B001CbsMsgMap.get("uepc_azcho_nm")); // 字丁目
			sb.append((String) ekk0241B001CbsMsgMap.get("uepc_bnchigo")); // 番地名

			// 利用場所をマッピング
			bean[0].sendMessageString(CNW01601SFConst.USE_PLACE,
					X31CWebConst.DATABEAN_SET_VALUE, sb.toString());

		}

		return bean;
	}
}