/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：契約管理システム
*   モジュール名    ：他システム選択
*   ソースファイル名：KKW00146SFLogic
*   作成者          ：富士通
*   日付            ：2011年9月30日
*＜機能概要＞
*   
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/09/30   FJ          新規作成
*  v14.00.00    2015/04/07   FJ)鯵坂    【ANK-2434-00-00】eo顧客からのeSM画面リンク機能
*
**********************************************************************/

package eo.web.webview.KKW00146SF;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.common.JSYwebLog;
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.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JKKCommonConst;
import eo.web.webview.common.JKKPulldownUtil;
import eo.web.webview.common.JKKScreenConst;
import eo.web.webview.mapping.KKSV0326_KKSV0326OPDBMapper;

/**
 * <dd>クラス名：KKW00146SFLogic
 * <dd>クラス説明：他システム選択を行う。
 * <dd>備考：なし。
 * @version 1.00.00 2011/09/30
 * @author FJ
 */
@SuppressWarnings("serial")
public class KKW00146SFLogic extends JCCWebBusinessLogic {

	/** CATV顧客管理 操作者コード取得用キー */
	private static final String CATV_CUST_KANRI_SOSA_CD_KEY = "KK_CATV_CUST_KANRI_SOSA_CD";
	/** CATV顧客管理 パスワード取得用キー */
	private static final String CATV_CUST_KANRI_PWD_KEY = "KK_CATV_CUST_KANRI_PWD";
	/** ADSL顧客管理 操作者コード取得用キー */
	private static final String ADSL_CUST_KANRI_SOSA_CD_KEY = "KK_ADSL_CUST_KANRI_SOSA_CD";
	/** ADSL顧客管理 パスワード取得用キー */
	private static final String ADSL_CUST_KANRI_PWD_KEY = "KK_ADSL_CUST_KANRI_PWD";
// ▼▼ ANK-2434-00-00  2015.04.07  ADD START ▼▼
	/** マンション営業支援システム（参照機能） randStr取得用キー */
	private static final String ESM_RANDSTR_KEY = "KK_ESM_RANDSTR";
// ▲▲ ANK-2434-00-00  2015.04.07  ADD  END  ▲▲
	
	/**クエリ文字URLエンコーディング用の文字コード取得用キー*/
	private static final String URLENCODE_ENCTYPE_KEY = "KK_URLENCODE_ENCTYPE";
	
	/** CATV顧客管理 操作者コード置換え文字 */
	private static final String CATV_CUST_KANRI_SOSA_CD_EXCHANGE_WORD = "%CATV_CUST_KANRI_SOSA_CD%";
	/** CATV顧客管理 パスワード置換え文字 */
	private static final String CATV_CUST_KANRI_PWD_EXCHANGE_WORD = "%CATV_CUST_KANRI_PWD%";
	/** ADSL顧客管理 操作者コード置換え文字 */
	private static final String ADSL_CUST_KANRI_SOSA_CD_EXCHANGE_WORD = "%ADSL_CUST_KANRI_SOSA_CD%";
	/** ADSL顧客管理 パスワード置換え文字 */
	private static final String ADSL_CUST_KANRI_PWD_EXCHANGE_WORD = "%ADSL_CUST_KANRI_PWD%";
	/** サービス契約番号置換え文字 */
	private static final String SVC_KEI_NO_EXCHANGE_WORD = "%SVC_KEI_NO%";
	/** 申込書番号置換え文字 */
	private static final String MSKMSHO_NO_EXCHANGE_WORD = "%MSKMSHO_NO%";
	/** お客様名置換え文字 */
	private static final String CUST_NM_EXCHANGE_WORD = "%CUST_NM%";
// ▼▼ ANK-2434-00-00  2015.04.07  ADD START ▼▼
	/** ユーザーID置換え文字 */
	private static final String USER_ID_EXCHANGE_WORD = "%USER_ID%";
	/** P-ID置換え文字 */
	private static final String P_ID_EXCHANGE_WORD = "%P_ID%";
	/** マンションID置換え文字 */
	private static final String MANSION_ID_EXCHANGE_WORD = "%M_ID%";
	/** CAT-ID置換え文字 */
	private static final String CAT_ID_EXCHANGE_WORD = "%CAT_ID%";
	/** randStr置換え文字 */
	private static final String ESM_RANDSTR_EXCHANGE_WORD = "%randStr%";
// ▲▲ ANK-2434-00-00  2015.04.07  ADD  END ▲▲
	
	/**コードリストの定数*/
	private static final String CD_DIV_LIST = "コードリスト";
	/**コード名リストの定数*/
	private static final String CD_DIV_NM_LIST = "コード名リスト";
	
	/**
	 * 初期表示処理
	 * 
	 * <dd>備考：なし。
	 * 
	 * @return true/false
	 * @throws Exception 
	 */
	public boolean actionInit() throws Exception {
		// 遷移元画面ID取得
		// 共有フォームビーンの取得
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		// 遷移元の画面IDを取得
		String screenId = commoninfoBean.sendMessageString( CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_GET_VALUE );
		
		// 遷移先画面ID確認
		if (JKKScreenConst.SCREEN_ID_KKW00146.equals(screenId))
		{
			actionTsysChoiceInit();
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
											JKKScreenConst.SCREEN_NAME_KKW00146);
		}
		
		return true;
	}
	
	/**
	 * 選択押下処理
	 * @return true/false
	 * @throws Exception
	 */
	public boolean actionFix() throws Exception {
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
// 2013-05-08 ADD_START
		//共有Bean アクセスクラスの取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
// 2013-05-08 ADD_END
		
		if (null == bean)
		{
			throw new Exception();
		}
		
		// 画面選択の選択システムコードの取得
		X31SDataBeanAccessArray tsysList = bean.getDataBeanArray(KKW00146SFConst.TSYS_LIST);
		X31SDataBeanAccess subbean = tsysList.getDataBean(0);
		String tsysListIndex = subbean.sendMessageString(KKW00146SFConst.INDEX_01, X31CWebConst.DATABEAN_GET_VALUE);
		String selTsysCd = subbean.sendMessageString(KKW00146SFConst.CD_DIV_LIST_01, X31CWebConst.DATABEAN_GET_VALUE,
								Integer.parseInt(tsysListIndex));
		
// 2013-05-08 EDIT_START 操作者コード → ログインユーザID、パスワード → 複合化
		//ユーザIDの取得
		String userID = getString(commonInfoBean, CommonInfoCFConst.USER_ID);
		
		// 連携先情報
		String selTsysJh = JCCWebCommon.getApplicationConst(JKKCommonConst.OTHER_SYS_KEY_PREFIX + selTsysCd);
		
		// 特定項目置換用の文字コード取得
		String encType = JCCWebCommon.getApplicationConst(URLENCODE_ENCTYPE_KEY);
		// 特定項目置換処理
		String selTsysRnksJh = selTsysJh.replaceAll(CATV_CUST_KANRI_SOSA_CD_EXCHANGE_WORD, encode(userID, encType))	// CATV顧客管理　操作者コード置換え
										.replaceAll(CATV_CUST_KANRI_PWD_EXCHANGE_WORD, encode(getPassword(CATV_CUST_KANRI_PWD_KEY), encType))	// CATV顧客管理　パスワード置換え
										.replaceAll(ADSL_CUST_KANRI_SOSA_CD_EXCHANGE_WORD, encode(userID, encType))	// ADSL顧客管理　操作者コード置換え
										.replaceAll(ADSL_CUST_KANRI_PWD_EXCHANGE_WORD, encode(getPassword(ADSL_CUST_KANRI_PWD_KEY), encType))	// ADSL顧客管理　パスワード置換え
										.replaceAll(SVC_KEI_NO_EXCHANGE_WORD, encode(getString(bean, KKW00146SFConst.SVC_KEI_NO), encType))		// サービス契約番号
										.replaceAll(MSKMSHO_NO_EXCHANGE_WORD, encode(getString(bean, KKW00146SFConst.MSKMSHO_NO), encType))		// 申込書番号
//										.replaceAll(CUST_NM_EXCHANGE_WORD, encode(getString(bean, KKW00146SFConst.CUST_NM), encType));			// お客様名
										// ▼▼ ANK-2434-00-00  2015.04.07  ADD START ▼▼
										.replaceAll(USER_ID_EXCHANGE_WORD, encode(userID, encType))												// ユーザーID
										.replaceAll(P_ID_EXCHANGE_WORD, encode(getString(bean, KKW00146SFConst.P_ID), encType))					// P-ID
										.replaceAll(MANSION_ID_EXCHANGE_WORD, encode(getString(bean, KKW00146SFConst.MANSION_ID), encType))		// マンションID
										.replaceAll(CAT_ID_EXCHANGE_WORD, encode(getString(bean, KKW00146SFConst.CAT_ID), encType))				// CAT-ID
										.replaceAll(ESM_RANDSTR_EXCHANGE_WORD, encode(getPassword(ESM_RANDSTR_KEY), encType));					// randStr（復号化した値）
										// ▲▲ ANK-2434-00-00  2015.04.07  ADD  END  ▲▲

// 2013-05-08 EDIT_END
		//DataBean格納処理
//		bean.sendMessageString(KKW00146SFConst.SEL_TSYS_RNKS_JH, X31CWebConst.DATABEAN_SET_VALUE, selTsysRnksJh);
		setString(bean, KKW00146SFConst.SEL_TSYS_RNKS_JH, selTsysRnksJh);
		
		// 遷移先の設定
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW00146);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW00146);
		
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);

		return true;
	}
	
	/**
	 * 他システム選択画面初期表示
	 * @return true/false
	 * @throws Exception
	 */
	private boolean actionTsysChoiceInit() throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess[] paramBean = { bean };
		if (null == bean)
		{
			throw new Exception();
		}
		
		// ----------------------
		// 遷移元情報取得
		// ----------------------
		HashMap<String, Object> dataMap = JCCWebCommon.getScreenInfo(this);
		if (null == dataMap)
		{
			throw new Exception();
		}

		// 顧客契約引継リスト
		ArrayList<HashMap<String, Object>> custKeiHktgiList =  (ArrayList<HashMap<String, Object>>)dataMap.get(KKW00146SFConst.CUST_KEI_HKTGI_LIST);
		HashMap<String, Object> custKeiHktgiInf = custKeiHktgiList.get(0);
		// サービス契約番号
		setString(bean, KKW00146SFConst.SVC_KEI_NO, (String)custKeiHktgiInf.get(KKW00146SFConst.SVC_KEI_NO));

		// 上りマッピング処理
		HashMap<String, Object> paramMap = new HashMap<String, Object>(); // パラメタ設定用マップ
		HashMap<String, Object> inputMap = new HashMap<String, Object>(); // 検索条件格納用マップ
		HashMap<String, Object> outputMap = new HashMap<String, Object>(); // 結果格納用マップ
		KKSV0326_KKSV0326OPDBMapper mapper = new KKSV0326_KKSV0326OPDBMapper(); // DataBean-BPマッパ
		
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JKKCommonConst.UCID_OTHER_SYS_SEL_SHK_DSP);   // ユースケースID
		paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, JKKCommonConst.OPID_OTHER_SYS_SEL_SHK_DSP); // オペレーションID

//		bean.sendMessageString(KKW00146SFConst.SVC_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, (String)dataMap.get("SVC_KEI_NO")); // サービス契約番号
// 初期表示で取得する
		// bean.sendMessageString(KKW00146SFConst.MSKMSHO_NO, X31CWebConst.DATABEAN_SET_VALUE, (String)dataMap.get("MSKMSHO_NO")); // 申込書番号
//		bean.sendMessageString(KKW00146SFConst.CUST_NM, X31CWebConst.DATABEAN_SET_VALUE, (String)dataMap.get("CUST_NM")); // お客様名

		setString(bean, KKW00146SFConst.CD_SBT_CD, "CD01186");
		
//		mapper.setEZM0171B010(paramBean, inputMap, JKKCommonConst.FUNC_CODE_3);
		mapper.setTsysChoiceInit(paramBean, inputMap);
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		
		// ---------------
		// サービス実行
		// ---------------
		invokeService(paramMap, inputMap, outputMap);
		
		// 下りマッピング処理
//		mapper.getEZM0171B010(paramBean, outputMap);
		mapper.getTsysChoiceInit(paramBean, outputMap);
		
		setPulldownList(paramBean[0], outputMap, KKW00146SFConst.TSYS_LIST, "KKSV032602CC", 
				false, "EZM0171B010CBSMsg1List_CD01186", "cd_div", "cd_div_nm", true);
		
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		
		return true;
	}
	
	
	private String getPassword(String key)
	{
		return JCCWebCommon.getDecryptResultPassword(JCCWebCommon.getApplicationConst(key));
	}
	
	private String encode(String endVal, String encType) throws UnsupportedEncodingException
	{
		return URLEncoder.encode(endVal, encType);
	}
	
	private String getString(X31SDataBeanAccess bean, String key)
	{
		return bean.sendMessageString(key, X31CWebConst.DATABEAN_GET_VALUE);
	}

	private void setString(X31SDataBeanAccess bean, String key, String val)
	{
		bean.sendMessageString(key, X31CWebConst.DATABEAN_SET_VALUE, val);
	}
	

	/**
	 * <dd>メソッド名	：setPulldownList
	 * <dd>メソッド説明	：下り情報Mapから取得したコードリスト、コード名リストを
	 *                    プルダウン情報Beanに設定します。
	 * 
	 * @param bean データBeanアクセスクラス
	 * @param outputMap 下り情報Map
	 * @param pulldownKey プルダウン情報取得キー
	 * @param outMapKey 下り情報Map取得キー
	 * @param blankFlag 1行目ブランク付与フラグ  true:付与する,false:付与しない
	 * @param msgKey 取得Msgキー
	 * @param cdKey 取得コードキー
	 * @param nmKey 取得名称キー
	 * @param indexNoFlg 添え字フラグ
	 */
	@SuppressWarnings("unchecked")
	public static void setPulldownList(X31SDataBeanAccess bean, HashMap<String, Object> outputMap, 
			String pulldownKey, String outMapKey, boolean blankFlag,
			String msgKey, String cdKey, String nmKey, boolean indexNoFlg)
	{
		//データBeanアクセスクラスがNULLかどうか判定します
		if (bean == null)
		{
			//NULL、空の場合処理を終了します
			return ;
		}
		//下り情報MapがNULLか判定する
		if(outputMap == null)
		{
			//NULLの場合処理を終了します
			return ;
		}
		//プルダウンキーがNULLか空文字かどうか判定します
		if (pulldownKey == null || "".equals(pulldownKey))
		{
			//NULL、空文字の場合処理を終了します
			return ;
		}
		
		//下り情報Map取得キーがNULLか空文字かどうか判定します
		if (outMapKey == null || "".equals(outMapKey))
		{
			//NULL、空文字の場合処理を終了します
			return ;
		}
		//下り情報マップから対象の情報を取得します
		HashMap<String, Object> parentMap = (HashMap)outputMap.get(outMapKey);

		if(parentMap == null) 
		{
			//NULLの場合処理を終了します
			return ;
		}
		
		// 対象の発行ステータスDataBeanを取得し、データBeanアクセスクラスリストに設定します
		X31SDataBeanAccessArray pulldown_list = bean.getDataBeanArray(pulldownKey);

		//データBeanアクセスクラスに対象のプルダウン情報Beanを設定します
		X31SDataBeanAccess pulldown_subbean = pulldown_list.getDataBean(0);


		//プルダウン情報Beanのコードリスト領域のクリアを行います
		pulldown_subbean.sendMessage(CD_DIV_LIST, X31CWebConst.DATABEAN_CLEAR);
		//プルダウン情報Beanのコードリスト名領域のクリアを行います
		pulldown_subbean.sendMessage(CD_DIV_NM_LIST, X31CWebConst.DATABEAN_CLEAR);
		
		//Mapにコード名称管理一覧照会明細が含まれているか判定します
		//コード明細情報リストにコード名称管理一意照会明細を設定します
		ArrayList childList = (ArrayList)parentMap.get(msgKey);
		//コード明細情報リストがNULLか、空か判定します
		if (childList == null || 0 == childList.size())
		{
			//NULL、空の場合処理を終了します
			return ;
		}

		//先頭に空文字を設定するか判定します
		if(blankFlag)
		{
			// 先頭に空文字を設定
			pulldown_subbean.sendMessageString(CD_DIV_LIST, X31CWebConst.DATABEAN_ADD_VALUE, "");
			pulldown_subbean.sendMessageString(CD_DIV_NM_LIST, X31CWebConst.DATABEAN_ADD_VALUE, "");

		}

		//添え字
		int index = 1;

		//コード明細情報リスト分コードリスト、コード名リストを取得します
		for (int i = 0; i < childList.size(); i++)
		{
			//コード明細情報リストをコード明細情報Mapに設定します
			HashMap childMap = (HashMap)childList.get(i);
			//プルダウン情報Beanにコード区分を設定する
			pulldown_subbean.sendMessageString(CD_DIV_LIST, X31CWebConst.DATABEAN_ADD_VALUE, (String)childMap.get(cdKey));
			//対象のBeanにコード区分名を設定する
			String cd_div_nm = (String)childMap.get(nmKey);
			if (indexNoFlg)
			{
				// ST2-2012-0000706 2012/05/01 MOD START
				//添え字、"."、コードリスト名の順にプルダウン情報Beanに設定する
				pulldown_subbean.sendMessageString(CD_DIV_NM_LIST, X31CWebConst.DATABEAN_ADD_VALUE, (index)
						+ JKKPulldownUtil.IDX_SEP + cd_div_nm);
				// ST2-2012-0000706 2012/05/01 MOD END
			}
			else
			{
				//コードリスト名の順にプルダウン情報Beanに設定する
				pulldown_subbean.sendMessageString(CD_DIV_NM_LIST, X31CWebConst.DATABEAN_ADD_VALUE, cd_div_nm);	
			}
			//添え字のカウントアップ
			index++;
		}
	}
	
}
