/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：パスワード変更(量販・訪販)
*   ソースファイル名：FUW00903SFLogic.java
*   作成者          ：富士通
*   日付            ：2012年02月23日
*＜機能概要＞
*  パスワード変更(量販・訪販)のビューロジッククラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v4.00       2012/06/21   FJ）大塚    新規作成
*
**********************************************************************/
package eo.web.webview.FUW00903SF;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.web.x00.JCCBusinessException;
import com.fujitsu.futurity.web.x00.JCCWebServiceException;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;
import eo.web.webview.mapping.FUSV0250_FUSV0250OPDBMapper;
import eo.web.webview.mapping.FUSV0252_FUSV0252OPDBMapper;

/**
 * パスワード変更のビューロジッククラスです。<p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW00903SFLogic extends JCCWebBusinessLogic
{

	/** ユースケースID（FUSV0250） */
	private static final String USECASE_ID_FUSV0250 = "FUSV0250";

	/** ユースケースID（FUSV0252） */
	private static final String USECASE_ID_FUSV0252 = "FUSV0252";

	/** パスワード取得世代キー */
	private static final String PWD_GENE = "pwd_gene";

	/** エラー表示用項目ID */
	private static final String NEW_PW = "newPw";

	/** エラー表示用項目ID */
	private static final String NOW_PW = "nowPw";

	//
	/** エラー表示用項目ID */
	private static final String NOW_PW_MSG = "現在のパスワード";

	/**
	 * 初期表示処理
	 * <BR>
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean init() throws Exception
	{
		// 量販訪販ユーザーパスワード取得サービスを実行
		callFUSV0250Service();

		return true;
	}

	/**
	 *パスワード変更ボタン押下処理
	 * <BR>
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean change() throws Exception
	{
		// ●共有フォームBeanの取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();

		// ●WEB新規情報を取得
		X31SDataBeanAccess webNewInfoBean = getWebNewInfo(commonInfoBean);

		ArrayList<String> pwdList = new ArrayList<String>();

		//サービスInfoBean
		X31SDataBeanAccess serviceFormBean = getServiceFormBean();

		X31SDataBeanAccessArray tantoshaPwdList = serviceFormBean.getDataBeanArray(FUW00903SFConst.TANTOSHA_PWD_LIST);

		// DB上の現在のパスワード
		String currentPwd = "";
		currentPwd = serviceFormBean.sendMessageString(FUW00903SFConst.CHECK_NOW_PWD, X31CWebConst.DATABEAN_GET_VALUE);

		// 入力項目から入力された現在のパスワード
		String nowPwd = "";
		nowPwd = serviceFormBean.sendMessageString(FUW00903SFConst.NOW_PWD, X31CWebConst.DATABEAN_GET_VALUE);

		if (!nowPwd.equals(currentPwd))
		{
			// 存在しない場合エラー表示
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKF1040_TW, new String[] { NOW_PW_MSG }, NOW_PW);
			return true;
		}

		if (tantoshaPwdList.getCount() - 1 > 0)
		{
			for (int i = 0; i < tantoshaPwdList.getCount(); i++)
			{
				// 歴代パスワードを取得
				pwdList.add(tantoshaPwdList.getDataBean(i).sendMessageString(FUW00903SFConst.RH_VH_USER_PWD_01, X31CWebConst.DATABEAN_GET_VALUE));
			}

			// 新しいパスワード
			String newPwd = serviceFormBean.sendMessageString(FUW00903SFConst.NEW_PWD, X31CWebConst.DATABEAN_GET_VALUE);

			// 関連チェック X世代前までと同じパスワードが存在するか
			if (pwdList.contains(newPwd))
			{
				// 存在した場合エラー表示
				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKF1030_KW, NEW_PW);
				return true;
			}
		}
		// パスワード変更サービスを実行
		callFUSV0252Service();

		// 画面遷移モード
		webNewInfoBean.sendMessageString(CommonInfoCFConst.SCREEN_MODE_06, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.SCREEN_MODE_DEF);
		// パスワード変更完了(量販・訪販)FUW00904に遷移する。
		this.setNextScreenInfo(JFUScreenConst.SCREEN_ID_FUW00904, JFUScreenConst.SCREEN_NAME_FUW00904);

		return true;
	}

	/**
	 * WEB新規情報
	 * @param commonInfoBean
	 * @return webNewInfoBean
	 */
	private X31SDataBeanAccess getWebNewInfo(X31SDataBeanAccess commonInfoBean)
	{
		X31SDataBeanAccessArray array = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		if (array.getCount() == 0)
		{
			array.addDataBean();
		}
		X31SDataBeanAccess webNewInfoBean = array.getDataBean(0);

		return webNewInfoBean;
	}

	/**
	 * 量販訪販ユーザーパスワード取得サービスを呼び出す。
	 * @throws Exception 
	 */
	private void callFUSV0250Service() throws Exception
	{

		// 共有フォームBeanを取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();

		// WEB新規情報取得
		X31SDataBeanAccess cfWebNewInfo = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO).getDataBean(0);

		// その他情報取得
		X31SDataBeanAccess cfElseInfo = cfWebNewInfo.getDataBeanArray(CommonInfoCFConst.ELSE_INFO).getDataBean(0);

		//サービスInfoBean
		X31SDataBeanAccess serviceFormBean = getServiceFormBean();

		// 担当者ID取得
		String userId = cfElseInfo.sendMessageString(CommonInfoCFConst.TANTOSHA_ID_18, X31CWebConst.DATABEAN_GET_VALUE);

		// 担当者IDをサービスフォームBeanにセットする。
		serviceFormBean.sendMessageString(FUW00903SFConst.TANTOSHA_ID, X31CWebConst.DATABEAN_SET_VALUE, userId);

		HashMap<String, String> paramMap = new HashMap<String, String>();

		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0250);

		// 設定値格納用マップを生成。
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		X31SDataBeanAccess[] paramBean = { serviceFormBean };

		// DataBean-BPマッピング
		FUSV0250_FUSV0250OPDBMapper mapper = new FUSV0250_FUSV0250OPDBMapper();

		// サービスの入力値設定
		// 機能コード:"1"
		mapper.setFUSV025001SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);

		try
		{
			// サービス呼出 
			invokeService(paramMap, inputMap, outputMap);

		}
		catch (JCCWebServiceException jwse)
		{
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// パスワードを取得する世代(0が含まれるので-1を行う)
		String genePw = JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00903, PWD_GENE);

		int gene = Integer.parseInt(genePw);

		mapper.getFUSV025001SC(paramBean, outputMap, gene);

	}

	/**
	 * 量販訪販ユーザーパスワード変更サービスを呼び出す。
	 */
	private void callFUSV0252Service()
	{
		//サービスInfoBean
		X31SDataBeanAccess serviceFormBean = getServiceFormBean();

		String pwd = serviceFormBean.sendMessageString(FUW00903SFConst.NEW_PWD, X31CWebConst.DATABEAN_GET_VALUE);

		// ユーザーパスワードを暗号化してセットする。
		serviceFormBean.sendMessageString(FUW00903SFConst.NEW_PWD, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon.getEncryptResultPassword(pwd));

		HashMap<String, String> paramMap = new HashMap<String, String>();

		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0252);

		// 設定値格納用マップを生成。
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		X31SDataBeanAccess[] paramBean = { serviceFormBean };

		// DataBean-BPマッピング
		FUSV0252_FUSV0252OPDBMapper mapper = new FUSV0252_FUSV0252OPDBMapper();

		// サービスの入力値設定
		// 機能コード:"1"
		mapper.setFUSV025201SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);

		try
		{
			// サービス呼出 
			invokeService(paramMap, inputMap, outputMap);

		}
		catch (JCCWebServiceException jwse)
		{
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

	}

	/**
	 * 共有フォームBeanに遷移先情報を設定する。
	 * <BR>
	 * @param pstrNextScreenId 遷移先画面ID
	 * @param pstrNextScreenName 遷移先画面名
	 */
	private void setNextScreenInfo(String pstrNextScreenId, String pstrNextScreenName)
	{
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();

		// 遷移先画面ID
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, pstrNextScreenId);

		// 遷移先画面名
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, pstrNextScreenName);
	}

}
