/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：FUSV0213_FUSV0213OPDBMapper
*	ソースファイル名：FUSV0213_FUSV0213OPDBMapper.java
*	作成者			：FJ
*	日付			：2012年03月14日
*＜機能概要＞
*	BP（IPv6サービス申込(申込)）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v3.00		2012/03/14	FJ）南岡    新規作成【ANK-0046-00-00】 IPV6対応
*	v3.00		2012/08/21	FJ）山名    変更【ST1-2012-0000365】オーダ発行条件登録CC設定値修正
*   v4.00		2012/07/05	FJ）知識    変更【ANK-1163-00-00】変更系申込が可能となるタイミングについて
*	v4.00		2012/10/09	FJ）岡井    変更【ANK-1223-00-00】進捗補足事項編集対応
*   v14.00      2015/11/22  FJ）中谷    変更【OM-2015-0002670】IPv6解約時のSOD不具合対応
*   
**********************************************************************/
package eo.web.webview.mapping;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

import java.util.ArrayList;
import java.util.HashMap;

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.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.FUW10101SF.FUW10101SFConst;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;

/**
 * DataBean-BPマッピングをする。
 *
 * @author 富士通
 */
public class FUSV0213_FUSV0213OPDBMapper
{

	/** 申込内容承認登録.申込内容承認登録明細 */
	private static final String EKK0011D020_LIST = "EKK0011D020CBSMsg1List";
	/** 進捗登録.異動理由明細 */
	private static final String EKK1091D010_LIST = "EKK1091D010CBSMsg1List";
	/** IPv6アドレス一覧照会.IPv6アドレス一覧照会明細 */
	private static final String EZM0481B010_LIST = "EZM0481B010CBSMsg1List";
	/** サービス契約内訳一覧照会.サービス契約内訳一覧照会明細 */
	private static final String EKK0161B004_LIST = "EKK0161B004CBSMsg1List";
	/** サービス契約内訳一覧照会.サービス契約内訳一覧照会明細 */
	private static final String EKK0161B004_LIST_OLD = "EKK0161B004CBSMsg1List_OLD";
	
	/** アウトマップキー サービスIF申込内容承認登録 対象データ */
	private static final String FUSV021301SC = "FUSV021301SC";
	/** アウトマップキー サービスIFオプションサービス契約＜ISP＞登録 対象データ */
	private static final String FUSV021302SC = "FUSV021302SC";
	/** アウトマップキー サービスIFオプションサービス契約<ISP>照査 対象データ */
	private static final String FUSV021308SC = "FUSV021308SC";
	/** アウトマップキー サービスIFオプションサービス契約<ISP>照査締結 対象データ */
	private static final String FUSV021303SC = "FUSV021303SC";
	/** アウトマップキー サービスIFオプションサービス契約<ISP>開始 対象データ */
	private static final String FUSV021304SC = "FUSV021304SC";
	/** アウトマップキー サービスIFIPv6アドレス変更 対象データ */
	private static final String FUSV021305SC = "FUSV021305SC";
	/** アウトマップキー サービスIF進捗登録 対象データ */
	private static final String FUSV021306SC = "FUSV021306SC";
	/** アウトマップキー サービスIF申込明細照査・後続業務依頼 対象データ */
	private static final String FUSV021307SC = "FUSV021307SC";
	/** アウトマップキー サービスIFIPv6アドレス一覧照会 対象データ */
	private static final String FUSV021301CC = "FUSV021301CC";
	/** アウトマップキー サービスIF結果データ移送 対象データ */
	private static final String FUSV021302CC = "FUSV021302CC";
	/** アウトマップキー サービスオーダ発行 対象データ */
	private static final String FUSV021303CC = "FUSV021303CC";
	/** アウトマップキー サービスIF結果データ移送 対象データ */
	private static final String FUSV021304CC = "FUSV021304CC";

	/** マップキー データ移送 データ移送キー */
	private static final String KEY_CNT = "key_cnt";
	/** マップキー データ移送 データ移送数 */
	private static final String TRANCE_CNT = "2";
	/** マップキー データ移送 データ移送先名 */
	private static final String TRANCE_NM = "tranNm";
	/** マップキー データ移送 移送データキー１ */
	private static final String TRANCE_DT_1 = "key_1";
	/** マップキー データ移送 移送データキー２ */
	private static final String TRANCE_DT_2 = "key_2";
	/** マップキー データ移送 移送データ１ */
	private static final String TRANCE_DT_VAL_1 = "FUSV021302SC::op_svc_kei_no,trgt_data_list:opsvkei_info:chaf_opsvkei_no";
	/** マップキー データ移送 移送データ２ */
	private static final String TRANCE_DT_VAL_2 = "::kk0351_gene_add_dtm,trgt_data_list:opsvkei_info:chaf_opsvkei_gene_add_dtm";
	/** マップキー データ移送 移送データ３ */
	private static final String TRANCE_DT_VAL_3 = "FUSV021301CC:EKK0161B004CBSMsg1List:svc_kei_ucwk_no,trgt_data_list:0:svc_kei_ucwk_info:svc_kei_ucwk_no";
	/** 世代登録年月日時分秒(サービス契約内訳) */
	private static final String TRANS_KEY_3_1_VALUE = "FUSV021301CC:EKK0161B004CBSMsg1List:gene_add_dtm,trgt_data_list:0:svc_kei_ucwk_info:chaf_svc_kei_ucwk_gene_add_dtm";
	/** マップキー オーダ発行 SOD基本情報 */
	private static final String SOD_KIHON_INFO = "sod_kihon_info";
	/** マップキー オーダ発行 サービス契約情報 */
	private static final String SVC_KEI_INFO = "svc_kei_info";
	/** マップキー オーダ発行 オプションサービス契約情報 */
	private static final String OPSVKEI_INFO = "opsvkei_info";
	/** マップキー オーダ発行 変更前オプションサービス契約番号 */
	private static final String CHBF_OPSVKEI_NO = "chbf_opsvkei_no";
	/** マップキー オーダ発行 変更前オプションサービス契約 世代登録年月日時分秒 */
	private static final String CHBF_OPSVKEI_GENE_ADD_DTM = "chbf_opsvkei_gene_add_dtm";

	/** マップキー SYSID */
	private static final String SYSID = "sysid";
	/** マップキー サービス契約番号 */
	private static final String SVC_KEI_NO = "svc_kei_no";
	/** マップキー サービス契約内訳番号 */
	public static final String SVC_KEI_UCWK_NO = "svc_kei_ucwk_no";
	/** マップキー 請求契約番号 */
	private static final String SEIKY_KEI_NO = "seiky_kei_no";
	/** マップキー 異動区分 */
	private static final String IDO_DIV = "ido_div";
	/** マップキー 最終更新年月日 */
	private static final String UPD_DTM_BF = "upd_dtm_bf";
	/** マップキー オーダ発行リスト */
	private static final String TRGT_DATA_LIST = "trgt_data_list";
	/** マップキー 中心局コード */
	private static final String KEY_CHUSKK_CD = "key_chuskk_cd";
	/** マップキー 機能コード */
	private static final String FUNC_CODE = "func_code";
	/** マップキー 進捗特記事項1 */
	private static final String PRG_TKJK_1 = "prg_tkjk_1";

	/** 空文字 */
	private static final String STRING_EMPTY = JFUStrConst.EMPTY;
	/** 特記事項１要素を取得する際のid */
	private static final String PRGADD_ID = "0";

	/**
	 * アウトマップキー
	 */
	private static final HashMap<String, String> SC_MAPPING = new HashMap<String, String>();

	static{
		SC_MAPPING.put(JFUStrConst.CD00037_020, FUSV021308SC);
		SC_MAPPING.put(JFUStrConst.CD00037_030, FUSV021303SC);
		SC_MAPPING.put(JFUStrConst.CD00037_100, FUSV021304SC);
	}


	/**
	 * コンストラクタ
	 */
	public FUSV0213_FUSV0213OPDBMapper()
	{
	}

	/**
	 * 上りマッピングをする
	 *
	 * <br>
	 * @param bean IPv6サービス申込
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return HashMap 結果マップ
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV021301SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		// ＳＳＯ情報.ＳＹＳＩＤ → 申込内容承認登録SC.SYSID
		parentMap.put(SYSID, bean[1].sendMessageString(CommonInfoCFConst.SYSID_21, X31CWebConst.DATABEAN_GET_VALUE));

		// 明細
		ArrayList arrayList = new ArrayList<HashMap>();
		HashMap detailMap = new HashMap();

		arrayList.add(detailMap);
		parentMap.put(EKK0011D020_LIST, arrayList);

		outputMap.put(FUSV021301SC, parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 *
	 * <br>
	 * @param bean IPv6サービス申込
	 * @param outputMap
	 * @param func_code　機能コード
	 * @return HashMap 結果マップ
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV021302SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		// サービス契約情報.サービス契約番号 → オプションサービス契約＜ISP＞登録SC.サービス契約番号
		parentMap.put(SVC_KEI_NO, bean[1].sendMessageString(CommonInfoCFConst.SVC_KEI_NO_21, X31CWebConst.DATABEAN_GET_VALUE));

		// ＳＳＯ情報.ＳＹＳＩＤ → オプションサービス契約＜ISP＞登録SC.SYSID
		parentMap.put(SYSID, bean[1].sendMessageString(CommonInfoCFConst.SYSID_21, X31CWebConst.DATABEAN_GET_VALUE));

		// 請求契約情報.請求契約番号 → オプションサービス契約＜ISP＞登録SC.請求契約番号
		parentMap.put(SEIKY_KEI_NO, bean[3].sendMessageString(CommonInfoCFConst.SEIKY_KEI_NO_32, X31CWebConst.DATABEAN_GET_VALUE));

		// サービス契約情報.最終更新年月日時分秒 → オプションサービス契約＜ISP＞登録SC.更新年月日時分秒（更新前）
		parentMap.put(UPD_DTM_BF, bean[2].sendMessageString(CommonInfoCFConst.LAST_UPD_DTM_23, X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put(FUSV021302SC, parentMap);

		return outputMap;
	}

	/**
	 * SCの上りマッピングの処理です。
	 * <br>
	 * @param bean [0]:IPv6サービス申込、[1]:共有フォームBean.オプションサービス契約情報
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public HashMap<String, Object> setFUSV021308SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{
		if (bean == null)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		outputMap.put(FUSV021308SC, parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 *
	 * <br>
	 * @param bean IPv6サービス申込
	 * @param outputMap
	 * @param func_code　機能コード
	 * @return HashMap 結果マップ
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV021303SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		outputMap.put(FUSV021303SC, parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 *
	 * <br>
	 * @param bean IPv6サービス申込
	 * @param outputMap
	 * @param func_code　機能コード
	 * @return HashMap 結果マップ
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV021304SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		outputMap.put(FUSV021304SC, parentMap);

		return outputMap;
	}

	/**
	* 上りマッピングをする
	 *
	 * <br>
	* @param bean IPv6サービス申込
	* @param outputMap
	* @param func_code 機能コード
	* @return HashMap 結果マップ
	*/
	@SuppressWarnings("unchecked")
	public HashMap setFUSV021305SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		// 中心局コード → IPv6アドレス変更SC.中心局コード
		parentMap.put(KEY_CHUSKK_CD, bean[0].sendMessageString(FUW10101SFConst.CHUSKK_CD, X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put(FUSV021305SC, parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 *
	 * <br>
	 * @param bean IPv6サービス申込
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return HashMap 結果マップ
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV021306SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		// 請求契約情報.請求契約番号 → 進捗登録SC.請求契約番号
		parentMap.put(SEIKY_KEI_NO, bean[3].sendMessageString(CommonInfoCFConst.SEIKY_KEI_NO_32, X31CWebConst.DATABEAN_GET_VALUE));

		// サービス契約情報.サービス契約番号 → 進捗登録SC.サービス契約番号
		parentMap.put(SVC_KEI_NO, bean[1].sendMessageString(CommonInfoCFConst.SVC_KEI_NO_21, X31CWebConst.DATABEAN_GET_VALUE));

		// 進捗特記事項1
		try
		{
			String prgTkjk1 = JFUWebCommon.getPrgAddTkjkFst(JFUScreenConst.SCREEN_ID_FUW10102, PRGADD_ID);

			if(prgTkjk1 != null && prgTkjk1.length() > 0)
			{
				parentMap.put(PRG_TKJK_1, prgTkjk1);
			}
			else
			{
				DEBUG_LOG.debug("※進捗特記事項1がXMLから正常に取得できませんでした。処理は続行します。");
			}
		}
		catch (Exception e)
		{
			DEBUG_LOG.debug("※進捗特記事項1がXMLから正常に取得できませんでした。処理は続行します。");
		}

		// 異動理由明細
		ArrayList arrayList = new ArrayList<HashMap>();
		HashMap detailMap = new HashMap();
		arrayList.add(detailMap);
		parentMap.put(EKK1091D010_LIST, arrayList);

		outputMap.put(FUSV021306SC, parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 *
	 * <br>
	 * @param bean IPv6サービス申込
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return HashMap 結果マップ
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV021307SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		outputMap.put(FUSV021307SC, parentMap);

		return outputMap;
	}

	/**
	 * FUSV021301CC IPv6アドレス一覧照会の設定をします。
	 *
	 * <br>
	 * @param bean IPv6サービス申込
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return HashMap 結果マップ
	 */
	@SuppressWarnings("unchecked")
	public HashMap<String, Object> setFUSV021301CC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{
		if (bean == null)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 中心局コード
		parentMap.put(KEY_CHUSKK_CD, bean[0].sendMessageString(FUW10101SFConst.CHUSKK_CD, X31CWebConst.DATABEAN_GET_VALUE));
		// サービス契約情報.サービス契約番号
		parentMap.put(SVC_KEI_NO, bean[1].sendMessageString(CommonInfoCFConst.SVC_KEI_NO_21, X31CWebConst.DATABEAN_GET_VALUE));
		// 明細
		ArrayList arrayList = new ArrayList<HashMap>();
		HashMap detailMap = new HashMap();

		arrayList.add(detailMap);
		parentMap.put(EZM0481B010_LIST, arrayList);

		ArrayList arrayList2 = new ArrayList<HashMap>();
		HashMap detailMap2 = new HashMap();

		arrayList2.add(detailMap2);
		parentMap.put(EKK0161B004_LIST, arrayList2);
		
		ArrayList arrayList3 = new ArrayList<HashMap>();
		HashMap detailMap3 = new HashMap();

		arrayList3.add(detailMap3);
		parentMap.put(EKK0161B004_LIST_OLD, arrayList3);
		
		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		// 共通情報のマッピング
		outputMap.put(FUSV021301CC, parentMap);

		return outputMap;
	}

	/**
	 * FUSV021302CC データ移送の設定をします。
	 *
	 * <br>
	 * @param outputMap
	 * @param bl
	 * @return HashMap 結果マップ
	 */
	@SuppressWarnings("unchecked")
	public HashMap<String, Object> setFUSV021302CC(HashMap outputMap, X31BWebBusinessLogic bl)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// データ移送数
		parentMap.put(KEY_CNT, TRANCE_CNT);

		// データ移送先
		parentMap.put(TRANCE_NM, FUSV021303CC);

		// クエリ文字列の例
		// クエリキー：クエリ文字列
		// ※クエリキー → "key_"(固定) + 連番
		// ※クエリ文字列 → 取得元名:取得元リスト名:取得元項目名,移送先リスト名:移送先マップ名:移送先項目名
		parentMap.put(TRANCE_DT_1, TRANCE_DT_VAL_1);
		parentMap.put(TRANCE_DT_2, SC_MAPPING.get(JFUWebCommon.getSvcKeiStat(bl)) + TRANCE_DT_VAL_2);


		// 共通情報のマッピング
		outputMap.put(FUSV021302CC, parentMap);

		return outputMap;
	}
	
	/**
	 * サービスIF結果データ移送(JFUTransferCC)の上りマッピング処理です。
	 * <br>
	 * @param bean
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return 送信情報
	 */
	@SuppressWarnings("unchecked")
	public HashMap<String, Object> setFUSV021304CC(HashMap outputMap, X31BWebBusinessLogic bl)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// データ移送数
		parentMap.put(KEY_CNT, TRANCE_CNT);

		// データ移送先
		parentMap.put(TRANCE_NM, FUSV021303CC);

		parentMap.put(TRANCE_DT_1, TRANCE_DT_VAL_3);
		parentMap.put(TRANCE_DT_2, TRANS_KEY_3_1_VALUE);

		// 共通情報のマッピング
		outputMap.put(FUSV021304CC, parentMap);

		return outputMap;
	}

	/**
	 * FUSV021303CC サービスオーダ発行CC 上りマッピングをします。
	 *
	 * <br>
	 * @param bean IPv6サービス申込
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return HashMap 結果マップ
	 */
	@SuppressWarnings("unchecked")
	public HashMap<String, Object> setFUSV021303CC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		ArrayList<HashMap<String, Object>> arrayList = new ArrayList<HashMap<String, Object>>();

		HashMap<String, Object> childMap = new HashMap<String, Object>();

		// SOD基本情報
		HashMap<String, Object> sodKihonInfo = new HashMap<String, Object>();

		// SYSID
		sodKihonInfo.put(SYSID, bean[1].sendMessageString(CommonInfoCFConst.SYSID_21, X31CWebConst.DATABEAN_GET_VALUE));

		// 異動区分
		sodKihonInfo.put(IDO_DIV, JFUStrConst.CD00576_00031);
		childMap.put(SOD_KIHON_INFO, sodKihonInfo);

		// サービス契約情報
		HashMap<String, Object> svcKeiInfo = new HashMap<String, Object>();
		// サービス契約番号
		svcKeiInfo.put(SVC_KEI_NO, bean[1].sendMessageString(CommonInfoCFConst.SVC_KEI_NO_21, X31CWebConst.DATABEAN_GET_VALUE));
		childMap.put(SVC_KEI_INFO, svcKeiInfo);

		// オプションサービス契約情報
		HashMap<String, Object> opsvkeiInfo = new HashMap<String, Object>();

		// 空設定(変更前オプションサービス契約番号)
		opsvkeiInfo.put(CHBF_OPSVKEI_NO, STRING_EMPTY);
		// 空設定(変更前オプションサービス契約 世代登録年月日時分秒)
		opsvkeiInfo.put(CHBF_OPSVKEI_GENE_ADD_DTM, STRING_EMPTY);

		childMap.put(OPSVKEI_INFO, opsvkeiInfo);

		arrayList.add(childMap);

		parentMap.put(TRGT_DATA_LIST, arrayList);

		// ユーザデータに設定
		outputMap.put(FUSV021303CC, parentMap);

		return outputMap;
	}
}