/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：FUW01103SFLogic
*	ソースファイル名：FUW01103SFLogic.java
*	作成者			：富士通
*	日付			：2012年07月20日
*＜機能概要＞
*	eoID認証のビューロジッククラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00		2012/07/20	FJ)文元		【案件番号：ANK-0024-02-00】新規作成
*	v5.00		2012/03/12	FJ)文元		【障害番号：IT1-2013-0000452】SYSID暗号化をしないよう修正
*	v25.00		2016/06/06	FJ)西川		【ANK-2798-00-00】eoフロント　戻るボタンを利用した再ログインに伴う改修
*	v28.00.00   2016/10/12	FJ) 横山	【ANK-3032-00-00】AxM再構築対応
*	v28.00.01   2016/11/24	FJ) 横山	【ANK-3032-03-00】AxM再構築対応【案件内仕変3:フロントからアクセスするCMPログイン画面URLの変更対応】
*	v38.00      2018/09/19	FJ) 西川	【ANK-3508-00-00】パズル認証対応
*
**********************************************************************/
package eo.web.webview.FUW01103SF;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

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 com.fujitsu.futurity.web.x33.X33CUtil;
import com.fujitsu.futurity.web.x33.X33WSessionController;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
import eo.common.util.JFUCommonUtil;
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.FUSV0329_FUSV0329OPDBMapper;

/**
 * eoID認証のビューロジッククラスです。
 * <p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW01103SFLogic extends JCCWebBusinessLogic
{

	/** 認証画面制御定義ファイルパス取得キー */
	private static final String KEY_XML_FILE_PATH = "FUNINSHO_DISP_SETTING_FILE_PATH";
	/** 認証画面制御定義ファイル */
	private static final String XML_FILE_PATH = JCCWebCommon.getApplicationConst(KEY_XML_FILE_PATH);

	/** タグ名1 */
	private static final String QUERY_TAG_1 = "RDTID";
	/** タグ名2 */
	private static final String QUERY_TAG_2 = "GAMEN";
	/** タグ名3 */
	private static final String QUERY_TAG_3 = "COMMONSETTING";
	/** タグ名4 */
	private static final String QUERY_TAG_4 = "HEADER_TAG_TOP";
	/** タグ名5 */
	private static final String QUERY_TAG_5 = "HEADER_TAG_UND";
	/** 属性名 */
	private static final String QUERY_ATTR_NAME = "id";

	/** プロパティタグ ヘッダー表示有無 */
	private static final String HEADER_DSP_UM = "HEADER_DSP_UM";
	/** プロパティタグ 画面タイトル */
	private static final String DSP_TITLE = "DSP_TITLE";
	/** プロパティタグ ボタン区分 */
	private static final String BTN_KBN = "BTN_KBN";
	/** プロパティタグ 「eoIDリマインダ」リンク表示有無 */
	private static final String REMINDER_LINK_DSP_UM = "REMINDER_LINK_DSP_UM";
	/** プロパティタグ 「初期eoID照会」リンク表示有無 */
	private static final String SHK_EOID_LINK_DSP_UM = "SHK_EOID_LINK_DSP_UM";
	/** プロパティタグ 「※eoIDについて」リンク表示有無 */
	private static final String EOID_LINK_DSP_UM = "EOID_LINK_DSP_UM";
	/** プロパティタグ フッター表示有無 */
	private static final String FOOTER_DSP_UM = "FOOTER_DSP_UM";
	/** プロパティタグ 返却機能名 */
	private static final String RTN_KINO_NM = "RTN_KINO_NM";
	/** プロパティタグ SYSID返却要否 */
	private static final String RTN_SYSID_YH = "RTN_SYSID_YH";
	/** プロパティタグ eoID返却要否 */
	private static final String RTN_EOID_YH = "RTN_EOID_YH";
	/** プロパティタグ アカウントロック時の画面表示有無 */
	private static final String ACCOUNT_ROCK_DSP_UM = "ACCOUNT_ROCK_DSP_UM";
	/** プロパティタグ アカウントロック時のメッセージ */
	private static final String ACCOUNT_ROCK_MSG = "ACCOUNT_ROCK_MSG";
	/** プロパティタグ アカウントロック時のガイダンス */
	private static final String ACCOUNT_ROCK_GUIDNS = "ACCOUNT_ROCK_GUIDNS";

	/** プロパティタグ(結果) ヘッダー表示有無 */
	private static final String R_HEADER_DSP_UM = "HEADER_DSP_UM";
	/** プロパティタグ(結果) 画面タイトル */
	private static final String R_DSP_TITLE = "DSP_TITLE";
	/** プロパティタグ(結果) 認証OK文言 */
	private static final String R_NINSHO_FIN_MSG = "NINSHO_FIN_MSG";
	/** プロパティタグ(結果) ガイダンス文言 */
	private static final String R_NINSHO_AF_GUIDNS = "NINSHO_AF_GUIDNS";
	/** プロパティタグ(結果) フッター表示有無 */
	private static final String R_FOOTER_DSP_UM = "FOOTER_DSP_UM";
	/** プロパティタグ(結果) 閉じるボタン表示有無 */
	private static final String R_CLOSE_BTN_DSP_UM = "CLOSE_BTN_DSP_UM";

	/** 認証NG文言 */
	private static final String R_NINSHO_NG_MSG = "NINSHO_NG_MSG";
	/**戻るボタン表示有無 */
	private static final String R_BACK_BTN_DSP_UM = "BACK_BTN_DSP_UM";

	/** 置換文字 */
	private static final String[] REPLACE_CHAR_KIINID_PWD = { "マスター会員のeoID/パスワード", "入力" };
	/** 文字列"eo"(半角)*/
	private static final String EO_HAN = "eo";

	/** OSID（iDA認証画面） */
	private static final String OSID_OS004 = "OS004";

	/** ユースケースID（FUSV0329） */
	private static final String USECASE_ID_FUSV0329 = "FUSV0329";

	/** ボタン表示 非表示 */
	private static final String BTN_DSP_OFF = "0";
	/** ボタン表示 表示 */
	private static final String BTN_DSP_ON = "1";

	/**
	 * 初期処理
	 * <br/>
	 * 結果画面の初期処理を行います。
	 *
	 * @return 処理結果
	 * @throws Exception
	 */
	public boolean init() throws Exception
	{
		// ■初期処理
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// 共有フォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// ■リクエストURLから、リクエストURL画面IDを取得しサービスフォームBeanに設定する
		// リクエスト情報取得
		X33WSessionController sc = X33CUtil.getSession(this.getSessionId());
		HttpServletRequest req = sc.getServletRequest();

		// ＷＥＢ新規情報取得
		X31SDataBeanAccess webNewBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO).getDataBean(0);
		// iDA認証済のSYSIDはＷＥＢ新規情報.SYSIDに保存されている
		String headerSysId = webNewBean.sendMessageString(CommonInfoCFConst.SYSID_06, X31CWebConst.DATABEAN_GET_VALUE);
		headerSysId = JFUCommonUtil.nvl(headerSysId, JFUStrConst.EMPTY);
		bean.sendMessageString(FUW01103SFConst.URL_ID, X31CWebConst.DATABEAN_SET_VALUE, req.getParameter(JFUStrConst.GET_URLID_PRM));
		DEBUG_LOG.debug("headerSysId=[" + headerSysId + "]");

		// ■プロパティファイルより該当情報を取得し、サービスフォームBeanに設定する
		setPropInfo(bean);

		// ■サービスフォームBeanの編集
		setInitDispValue(bean);

		boolean checkOk = false;
		// ■eoID認証業務規制フラグの設定
		// 業務規制コード：FUGKW0580（FUW01103_eoID認証）→（業務規制不要のため廃止）
		// 認証結果を元に会員チェックを行う
		checkOk = fromIdaNinsho();
		if (checkOk)
		{
			// 返却機能名が設定されている場合、正常時は呼出元に戻るため、返却値を設定しておく
			setCfmDispValue(bean, headerSysId);
		}

		bean.sendMessageString(FUW01103SFConst.IDA_NINSHO_TRANS_FLG, X31CWebConst.DATABEAN_SET_VALUE, BTN_DSP_OFF);

		// ■遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW01104);
		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW01104);
		return true;
	}

	/**
	 * サービスフォームBeanクリア処理
	 * <br/>
	 * サービスフォームBeanをクリアします。
	 *
	 * @param bean DataBean
	 */
	private void clearBean(X31SDataBeanAccess bean)
	{
		// 返却用eoID
		bean.sendMessageString(FUW01103SFConst.RTN_EOID, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);

		// 返却用SYSID
		bean.sendMessageString(FUW01103SFConst.RTN_SYSID, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);

		// 認証状態
		bean.sendMessageString(FUW01103SFConst.NINSHO_STAT, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);

		// ガイダンス
		bean.sendMessageString(FUW01103SFConst.GUIDNS, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);

		// 確認画面表示用エラーメッセージ
		bean.sendMessageString(FUW01103SFConst.DSP_ERR_MSG, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);

		// 結果画面表示用エラーメッセージ
		bean.sendMessageString(FUW01103SFConst.R_DSP_ERR_MSG, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
	}

	/**
	 * サービスフォームBeanクリア処理(入力コントロールを保持する項目)
	 * <br/>
	 * 入力コントロールを保持するサービスフォームBeanをクリアします。
	 *
	 * @param bean DataBean
	 */
	private void clearInputBean(X31SDataBeanAccess bean)
	{
		// eoID
		bean.sendMessageString(FUW01103SFConst.EOID, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);

		// パスワード
		bean.sendMessageString(FUW01103SFConst.PWD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
	}

	/**
	 * サービスフォームBean設定(初期表示)
	 * <br/>
	 * サービスフォームBeanへの設定を行ないます。
	 *
	 * @param bean DataBean
	 * @exception Exception
	 */
	private void setInitDispValue(X31SDataBeanAccess bean) throws Exception
	{
		// 入力コントロールのクリア
		clearInputBean(bean);

		// 他クリア項目
		clearBean(bean);

		// 確認画面表示用タグ付画面タイトル
		X31SDataBeanAccessArray ninshoPropList = bean.getDataBeanArray(FUW01103SFConst.NINSHO_PROP_LIST);
		String title = ninshoPropList.getDataBean(0).sendMessageString(FUW01103SFConst.DSP_TITLE_01, X31CWebConst.DATABEAN_GET_VALUE);
		bean.sendMessageString(FUW01103SFConst.DSP_TAG_TITLE, X31CWebConst.DATABEAN_SET_VALUE, getTagAddTitle(title));

		// 結果画面表示用タグ付画面タイトル
		X31SDataBeanAccessArray ninshoResultPropList = bean.getDataBeanArray(FUW01103SFConst.NINSHO_RESULT_PROP_LIST);
		String rTitle = ninshoResultPropList.getDataBean(0).sendMessageString(FUW01103SFConst.R_DSP_TITLE_02, X31CWebConst.DATABEAN_GET_VALUE);
		bean.sendMessageString(FUW01103SFConst.R_DSP_TAG_TITLE, X31CWebConst.DATABEAN_SET_VALUE, getTagAddTitle(rTitle));
	}

	/**
	 * サービスフォームBean設定(正常終了時)
	 * <br/>
	 * サービスフォームBeanへの設定を行ないます。
	 *
	 * @param bean DataBean
	 * @param sysid SYSID
	 * @param authMap iDA認証返却情報
	 */
	private void setCfmDispValue(X31SDataBeanAccess bean, String sysid)
	{
		// 判定用項目取得
		// サービスフォームBean.認証画面プロパティ一覧.認証画面プロパティ一覧情報
		X31SDataBeanAccessArray ninshoPropList = bean.getDataBeanArray(FUW01103SFConst.NINSHO_PROP_LIST);
		X31SDataBeanAccess subbean = ninshoPropList.getDataBean(0);
		// SYSID返却要否
		String rtnSysidYh = subbean.sendMessageString(FUW01103SFConst.RTN_SYSID_YH_01, X31CWebConst.DATABEAN_GET_VALUE);
		// eoID返却要否
		String rtnEoidYh = subbean.sendMessageString(FUW01103SFConst.RTN_EOID_YH_01, X31CWebConst.DATABEAN_GET_VALUE);

		if (!JFUWebCommon.isNull(rtnEoidYh) && JFUStrConst.CD00001_1.equals(rtnEoidYh))
		{
			// 返却用eoID
			bean.sendMessageString(FUW01103SFConst.RTN_EOID, X31CWebConst.DATABEAN_SET_VALUE, bean.sendMessageString(FUW01103SFConst.EOID,
					X31CWebConst.DATABEAN_GET_VALUE));
		}

		if (!JFUWebCommon.isNull(rtnSysidYh) && JFUStrConst.CD00001_1.equals(rtnSysidYh))
		{
			// 返却用SYSID
			bean.sendMessageString(FUW01103SFConst.RTN_SYSID, X31CWebConst.DATABEAN_SET_VALUE, sysid);
		}

		// 認証状態
		bean.sendMessageString(FUW01103SFConst.NINSHO_STAT, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00001_1);
	}

	/**
	 * エラーメッセージの設定
	 * <br/>
	 * エラーメッセージの設定を行ないます。
	 *
	 * @param bean DataBean
	 * @param msgId メッセージID
	 * @param repString[] 置き換え文字列
	 * @param lockOutFlg "1":アカウントロックのエラーメッセージ
	 */
	private void setReturnErrMsg(X31SDataBeanAccess bean, String msgId, String[] repString, String lockOutFlg)
	{
		// 表示用エラーメッセージ初期設定
		bean.sendMessageString(FUW01103SFConst.DSP_ERR_MSG, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getMessage(msgId, repString));

		if (JFUStrConst.CD00001_1.equals(lockOutFlg))
		{
			//アカウントロックメッセージ
			X31SDataBeanAccessArray ninshoPropList = bean.getDataBeanArray(FUW01103SFConst.NINSHO_PROP_LIST);
			String accountRockMsg =
					ninshoPropList.getDataBean(0).sendMessageString(FUW01103SFConst.ACCOUNT_ROCK_MSG_01, X31CWebConst.DATABEAN_GET_VALUE);

			if (!JFUWebCommon.isNull(accountRockMsg))
			{
				// 表示用エラーメッセージに設定
				bean.sendMessageString(FUW01103SFConst.DSP_ERR_MSG, X31CWebConst.DATABEAN_SET_VALUE, accountRockMsg);
			}
		}

		// メッセージをメッセージエリアに設定
		JCCWebCommon.setMessageInfo(this, msgId, repString);
	}

	/**
	 * 画面タイトルタグ付加処理
	 * <br/>
	 * 画面タイトルタグ付加処理を行ないます。
	 *
	 * @param orgTitle タグ付加前のタイトル文言
	 * @return タグ付加後のタイトル文言
	 * @exception Exception
	 */
	private String getTagAddTitle(String orgTitle) throws Exception
	{
		String retTitle = orgTitle;

		if (JFUWebCommon.isNull(orgTitle))
		{
			return retTitle;
		}

		if (!orgTitle.substring(0, 2).equals(EO_HAN))
		{
			return retTitle;
		}

		// タグ情報取得
		HashMap<String, String> tagMap = getTitleTag();
		if (tagMap == null)
		{
			return retTitle;
		}

		String topTag = tagMap.get(QUERY_TAG_4);
		String undTag = tagMap.get(QUERY_TAG_5);

		if (JFUWebCommon.isNull(topTag) || JFUWebCommon.isNull(undTag))
		{
			return retTitle;
		}

		// タグ付加処理
		StringBuffer sb = new StringBuffer();

		sb.append(topTag);
		sb.append(orgTitle.substring(0, 2));
		sb.append(undTag);
		sb.append(orgTitle.substring(2, orgTitle.length()));

		return sb.toString();
	}

	/**
	 * 画面タイトルタグ取得処理
	 * <br/>
	 * 画面タイトルタグ取得処理を行ないます。
	 *
	 * @return 画面タイトルに付加するタグ
	 * @exception Exception
	 */
	private HashMap<String, String> getTitleTag() throws Exception
	{
		HashMap<String, String> retMap = new HashMap<String, String>();

		// XMLパース
		DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
		Document doc = builder.parse(new File(XML_FILE_PATH));
		Element root = doc.getDocumentElement();

		Element cRoot = getElement(root, QUERY_TAG_3, null, null);

		if (cRoot == null)
		{
			return null;
		}

		NodeList tempNodeList = null;
		Element tempElement = null;

		// 上タグ
		tempNodeList = cRoot.getElementsByTagName(QUERY_TAG_4);
		tempElement = (Element)tempNodeList.item(0);
		retMap.put(QUERY_TAG_4, getItemContent(tempElement));

		// 下タグ
		tempNodeList = cRoot.getElementsByTagName(QUERY_TAG_5);
		tempElement = (Element)tempNodeList.item(0);
		retMap.put(QUERY_TAG_5, getItemContent(tempElement));

		return retMap;
	}

	/**
	 * プロパティファイルより該当情報を取得
	 * <br/>
	 * プロパティファイルより該当情報取得を行ないます。
	 *
	 * @param bean DataBean
	 * @exception Exception
	 */
	private void setPropInfo(X31SDataBeanAccess bean) throws Exception
	{
		// URL画面ID
		String urlId = bean.sendMessageString(FUW01103SFConst.URL_ID, X31CWebConst.DATABEAN_GET_VALUE);

		// XMLパース
		DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
		Document doc = builder.parse(new File(XML_FILE_PATH));
		Element root = doc.getDocumentElement();

		// 機能単位の情報取得
		Element fRoot = getElement(root, QUERY_TAG_1, QUERY_ATTR_NAME, urlId);

		// 取得チェック
		throwElementNullError(fRoot);

		// 機能に紐づく画面情報の取得(認証画面)
		Element nRoot = getElement(fRoot, QUERY_TAG_2, QUERY_ATTR_NAME, JFUScreenConst.SCREEN_ID_FUW01103);

		// 取得チェック
		throwElementNullError(nRoot);

		// サービスフォームBean.認証画面プロパティ一覧へ設定
		setNinshoPropInfo(nRoot, bean);

		// 返却機能名なしの場合、結果画面用のプロパティ取得
		// →※返却機能名有りの場合もエラー時は結果画面を表示するため変更
		// 機能に紐づく画面情報の取得(結果画面)
		Element rRoot = getElement(fRoot, QUERY_TAG_2, QUERY_ATTR_NAME, JFUScreenConst.SCREEN_ID_FUW01104);

		// 取得チェック
		throwElementNullError(rRoot);

		// サービスフォームBean.認証結果画面プロパティ一覧へ設定
		setNinshoRtnPropInfo(rRoot, bean);
	}

	/**
	 * 認証画面プロパティ一覧情報設定
	 * <br/>
	 * 認証画面プロパティ一覧情報の設定を行ないます。
	 *
	 * @param root 設定元のプロパティファイル内容
	 * @param bean DataBean
	 */
	private void setNinshoPropInfo(Element root, X31SDataBeanAccess bean)
	{
		NodeList tempNodeList = null;
		Element tempElement = null;

		// サービスフォームBean.認証画面プロパティ一覧.認証画面プロパティ一覧情報
		X31SDataBeanAccessArray ninshoPropList = bean.getDataBeanArray(FUW01103SFConst.NINSHO_PROP_LIST);
		X31SDataBeanAccess subbean = ninshoPropList.getDataBean(0);

		// ヘッダー表示有無
		tempNodeList = root.getElementsByTagName(HEADER_DSP_UM);
		tempElement = (Element)tempNodeList.item(0);
		subbean.sendMessageString(FUW01103SFConst.HEADER_DSP_UM_01, X31CWebConst.DATABEAN_SET_VALUE, getItemContenNotGetErr(tempElement));

		// 画面タイトル
		tempNodeList = root.getElementsByTagName(DSP_TITLE);
		tempElement = (Element)tempNodeList.item(0);
		subbean.sendMessageString(FUW01103SFConst.DSP_TITLE_01, X31CWebConst.DATABEAN_SET_VALUE, getItemContenNotGetErr(tempElement));

		// ボタン区分
		tempNodeList = root.getElementsByTagName(BTN_KBN);
		tempElement = (Element)tempNodeList.item(0);
		subbean.sendMessageString(FUW01103SFConst.BTN_KBN_01, X31CWebConst.DATABEAN_SET_VALUE, getItemContenNotGetErr(tempElement));

		// 「eoIDリマインダ」リンク表示有無
		tempNodeList = root.getElementsByTagName(REMINDER_LINK_DSP_UM);
		tempElement = (Element)tempNodeList.item(0);
		subbean.sendMessageString(FUW01103SFConst.REMINDER_LINK_DSP_UM_01, X31CWebConst.DATABEAN_SET_VALUE, getItemContenNotGetErr(tempElement));

		// 「初期eoID照会」リンク表示有無
		tempNodeList = root.getElementsByTagName(SHK_EOID_LINK_DSP_UM);
		tempElement = (Element)tempNodeList.item(0);
		subbean.sendMessageString(FUW01103SFConst.SHK_EOID_LINK_DSP_UM_01, X31CWebConst.DATABEAN_SET_VALUE, getItemContenNotGetErr(tempElement));

		// 「※eoIDについて」リンク表示有無
		tempNodeList = root.getElementsByTagName(EOID_LINK_DSP_UM);
		tempElement = (Element)tempNodeList.item(0);
		subbean.sendMessageString(FUW01103SFConst.EOID_LINK_DSP_UM_01, X31CWebConst.DATABEAN_SET_VALUE, getItemContenNotGetErr(tempElement));

		// フッター表示有無
		tempNodeList = root.getElementsByTagName(FOOTER_DSP_UM);
		tempElement = (Element)tempNodeList.item(0);
		subbean.sendMessageString(FUW01103SFConst.FOOTER_DSP_UM_01, X31CWebConst.DATABEAN_SET_VALUE, getItemContenNotGetErr(tempElement));

		// 返却機能名
		tempNodeList = root.getElementsByTagName(RTN_KINO_NM);
		tempElement = (Element)tempNodeList.item(0);
		subbean.sendMessageString(FUW01103SFConst.RTN_KINO_NM_01, X31CWebConst.DATABEAN_SET_VALUE, getItemContenNotGetErr(tempElement));

		// SYSID返却要否
		tempNodeList = root.getElementsByTagName(RTN_SYSID_YH);
		tempElement = (Element)tempNodeList.item(0);
		subbean.sendMessageString(FUW01103SFConst.RTN_SYSID_YH_01, X31CWebConst.DATABEAN_SET_VALUE, getItemContenNotGetErr(tempElement));

		// eoID返却要否
		tempNodeList = root.getElementsByTagName(RTN_EOID_YH);
		tempElement = (Element)tempNodeList.item(0);
		subbean.sendMessageString(FUW01103SFConst.RTN_EOID_YH_01, X31CWebConst.DATABEAN_SET_VALUE, getItemContenNotGetErr(tempElement));

		// アカウントロック時の画面表示有無
		tempNodeList = root.getElementsByTagName(ACCOUNT_ROCK_DSP_UM);
		tempElement = (Element)tempNodeList.item(0);
		subbean.sendMessageString(FUW01103SFConst.ACCOUNT_ROCK_DSP_UM_01, X31CWebConst.DATABEAN_SET_VALUE, getItemContenNotGetErr(tempElement));

		// アカウントロック時のメッセージ
		tempNodeList = root.getElementsByTagName(ACCOUNT_ROCK_MSG);
		tempElement = (Element)tempNodeList.item(0);
		subbean.sendMessageString(FUW01103SFConst.ACCOUNT_ROCK_MSG_01, X31CWebConst.DATABEAN_SET_VALUE, getItemContenNotGetErr(tempElement));

		// アカウントロック時のガイダンス
		tempNodeList = root.getElementsByTagName(ACCOUNT_ROCK_GUIDNS);
		tempElement = (Element)tempNodeList.item(0);
		subbean.sendMessageString(FUW01103SFConst.ACCOUNT_ROCK_GUIDNS_01, X31CWebConst.DATABEAN_SET_VALUE, getItemContenNotGetErr(tempElement));
	}

	/**
	 * 認証結果画面プロパティ一覧情報
	 * <br/>
	 * 認証結果画面プロパティ一覧情報の設定を行ないます。
	 *
	 * @param root 設定元のプロパティファイル内容
	 * @param bean DataBean
	 */
	private void setNinshoRtnPropInfo(Element root, X31SDataBeanAccess bean)
	{
		NodeList tempNodeList = null;
		Element tempElement = null;

		// サービスフォームBean.認証結果画面プロパティ一覧.認証結果画面プロパティ一覧情報
		X31SDataBeanAccessArray ninshoResultPropList = bean.getDataBeanArray(FUW01103SFConst.NINSHO_RESULT_PROP_LIST);
		X31SDataBeanAccess subbean = ninshoResultPropList.getDataBean(0);

		// ヘッダー表示有無
		tempNodeList = root.getElementsByTagName(R_HEADER_DSP_UM);
		tempElement = (Element)tempNodeList.item(0);
		subbean.sendMessageString(FUW01103SFConst.R_HEADER_DSP_UM_02, X31CWebConst.DATABEAN_SET_VALUE, getItemContenNotGetErr(tempElement));

		// 画面タイトル
		tempNodeList = root.getElementsByTagName(R_DSP_TITLE);
		tempElement = (Element)tempNodeList.item(0);
		subbean.sendMessageString(FUW01103SFConst.R_DSP_TITLE_02, X31CWebConst.DATABEAN_SET_VALUE, getItemContenNotGetErr(tempElement));

		// 認証OK文言
		tempNodeList = root.getElementsByTagName(R_NINSHO_FIN_MSG);
		tempElement = (Element)tempNodeList.item(0);
		subbean.sendMessageString(FUW01103SFConst.R_NINSHO_FIN_MSG_02, X31CWebConst.DATABEAN_SET_VALUE, getItemContenNotGetErr(tempElement));

		// ガイダンス文言
		tempNodeList = root.getElementsByTagName(R_NINSHO_AF_GUIDNS);
		tempElement = (Element)tempNodeList.item(0);
		subbean.sendMessageString(FUW01103SFConst.R_NINSHO_AF_GUIDNS_02, X31CWebConst.DATABEAN_SET_VALUE, tempElement.getTextContent());

		// フッター表示有無
		tempNodeList = root.getElementsByTagName(R_FOOTER_DSP_UM);
		tempElement = (Element)tempNodeList.item(0);
		subbean.sendMessageString(FUW01103SFConst.R_FOOTER_DSP_UM_02, X31CWebConst.DATABEAN_SET_VALUE, getItemContenNotGetErr(tempElement));

		// 閉じるボタン表示有無
		tempNodeList = root.getElementsByTagName(R_CLOSE_BTN_DSP_UM);
		tempElement = (Element)tempNodeList.item(0);
		subbean.sendMessageString(FUW01103SFConst.R_CLOSE_BTN_DSP_UM_02, X31CWebConst.DATABEAN_SET_VALUE, getItemContenNotGetErr(tempElement));

		// 認証NG文言 
		tempNodeList = root.getElementsByTagName(R_NINSHO_NG_MSG);
		tempElement = (Element)tempNodeList.item(0);
		subbean.sendMessageString(FUW01103SFConst.R_NINSHO_NG_MSG_02, X31CWebConst.DATABEAN_SET_VALUE, getItemContenNotGetErr(tempElement));

		// 戻るボタン表示有無
		tempNodeList = root.getElementsByTagName(R_BACK_BTN_DSP_UM);
		tempElement = (Element)tempNodeList.item(0);
		subbean.sendMessageString(FUW01103SFConst.R_BACK_BTN_DSP_UM_02, X31CWebConst.DATABEAN_SET_VALUE, getItemContenNotGetErr(tempElement));
	}

	/**
	 * エレメント取得処理
	 * <br/>
	 * エレメント取得処理を行ないます。
	 *
	 * @param root エレメント
	 * @param tagName 要素
	 * @param attr 属性
	 * @param attrName 属性の値
	 * @return 取得したエレメント
	 */
	private Element getElement(Element root, String tagName, String attr, String attrName)
	{
		NodeList repairRootList = root.getElementsByTagName(tagName);
		Element repairRoot = null;

		for (int i = 0; i < repairRootList.getLength(); i++)
		{
			repairRoot = (Element)repairRootList.item(i);

			if (JFUWebCommon.isNull(attr))
			{
				break;
			}

			if (attrName.equals(repairRoot.getAttribute(attr)))
			{
				break;
			}

			// 一致する定義がない場合、NULLを設定
			repairRoot = null;
		}

		return repairRoot;
	}

	/**
	 * エレメントより値を取得
	 * <br/>
	 * エレメントより値を取得します。取得できない場合は空を返します。
	 *
	 * @param tempElement エレメント
	 * @return 取得した値
	 */
	private String getItemContent(Element tempElement)
	{
		if (tempElement == null)
		{
			return JFUStrConst.EMPTY;
		}

		return tempElement.getTextContent();
	}

	/**
	 * エレメントより値を取得
	 * <br/>
	 * エレメントより値を取得します。取得できない場合はシステムエラーとなります。
	 *
	 * @param tempElement エレメント
	 * @return 取得した値
	 */
	private String getItemContenNotGetErr(Element tempElement)
	{
		if (tempElement == null)
		{
			DEBUG_LOG.debug("★★★★★eoID認証(FUW01103) 認証画面制御定義ファイルの内容不正エラー(1)★★★★★");

			// "0002(システムエラー)
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		return tempElement.getTextContent();
	}

	/**
	 * エレメント取得エラー処理
	 * <br/>
	 * エレメント取得エラー処理を行ないます。
	 *
	 * @param chkElement エレメント
	 */
	private void throwElementNullError(Element chkElement)
	{
		if (chkElement == null)
		{
			DEBUG_LOG.debug("★★★★★eoID認証(FUW01103) 認証画面制御定義ファイルの内容不正エラー(2)★★★★★");

			// "0002(システムエラー)
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}
	}

	/**
	 * iDA認証画面へリダイレクトします。
	 * 
	 * @return boolean true(固定)
	 */
	public boolean redirectIdaNinsho()
	{
		DEBUG_LOG.debug("DEBUG： ●FUW01103_eoID認証（iDA認証画面へリダイレクト）：redirectIdaNinsho");
		// iDA認証画面へリダイレクト(他サイト連携)
		getCommonInfoBean().sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, OSID_OS004);

		return true;
	}

	/**
	 * iDAから本システムへの遷移時
	 * 
	 * @return boolean true(固定)
	 * @return true:正常、false:エラー
	 * @throws Exception 
	 */
	private boolean fromIdaNinsho() throws Exception
	{
		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBean取得
		X31SDataBeanAccess serviceFormBean = getServiceFormBean();
		
		// サービス検索条件格納用マップ
		HashMap<String, HashMap<String, String>> inputMap = new HashMap<String, HashMap<String, String>>();
		// サービス処理結果格納用マップ
		HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>> outputMap =
				new HashMap<String, HashMap<String, ArrayList<HashMap<String, String>>>>();
		
		// サービスパラメータ生成
		Map<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0329);
		
		// DataBean-BPマッピングクラス生成
		FUSV0329_FUSV0329OPDBMapper mapper = new FUSV0329_FUSV0329OPDBMapper();
		// 上り/下りマッピング用パラメータ生成
		X31SDataBeanAccess[] beanArray = new X31SDataBeanAccess[] { serviceFormBean, commonInfoBean };
		
		// 現顧客情報一覧照会SC上りマッピング
		mapper.setFUSV032901SC(beanArray, inputMap, JPCModelConstant.FUNC_CD_1);
		// サービス契約一覧照会（SYSID）3SC上りマッピング
		mapper.setFUSV032902SC(beanArray, inputMap, JPCModelConstant.FUNC_CD_1);
		// 督促情報取得CC上りマッピング
		mapper.setFUSV032901CC(beanArray, inputMap, JPCModelConstant.FUNC_CD_1);
		
		try
		{
			// 会員情報チェック(量販・訪販)サービス呼び出し
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// 業務共通例外クラス："0002"（システムエラー）
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}
		
		
		// 会員チェック処理
		return chkMember(outputMap, serviceFormBean);

	}
	/**
	 * 会員チェックを実施します。
	 *
	 * @param outputMap アウトマップ
	 * @param serviceFormBean サービスフォームBean
	 * @return true:正常、false:エラー
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private boolean chkMember(HashMap outputMap, X31SDataBeanAccess serviceFormBean) throws Exception
	{
		boolean isNormalEnd = true;

		String errMsg = JFUStrConst.EMPTY;
		// 会員種別コード
		String memberSbtCd = JFUStrConst.EMPTY;
		// ｅｏＩＤ
		String eoid = JFUStrConst.EMPTY;
		
		// 現顧客情報一覧照会マップ
		HashMap fusv032901scMap = null;
		// サービスフォームBean取得
		X31SDataBeanAccess svcFormBean = super.getServiceFormBean();
		
		if (outputMap.containsKey("FUSV032901SC"))
		{
			fusv032901scMap = (HashMap)outputMap.get("FUSV032901SC");
		}
		if (fusv032901scMap != null && fusv032901scMap.containsKey("ECK0011B504CBSMsg1List"))
		{
			ArrayList eck0011b504cbsList = (ArrayList)fusv032901scMap.get("ECK0011B504CBSMsg1List");
			if (eck0011b504cbsList != null && !eck0011b504cbsList.isEmpty())
			{
				HashMap<String, String> eck0011b504cbsMap = (HashMap)eck0011b504cbsList.get(0);
				
				// 会員種別コード
				memberSbtCd = eck0011b504cbsMap.get("member_sbt_cd");
				// ｅｏＩＤ
				eoid = eck0011b504cbsMap.get("eoid");
				
				// 「会員種別コードが"10"(マスター会員(個人))、"20"(マスター会員(法人))」以外の場合
				if (!JFUStrConst.CD00039_10.equals(memberSbtCd) && !JFUStrConst.CD00039_20.equals(memberSbtCd))
				{
					isNormalEnd = false;
					// エラーメッセージ設定
					setReturnErrMsg(serviceFormBean, JPCOnlineMessageConstant.EKF0420_TW, REPLACE_CHAR_KIINID_PWD, JFUStrConst.CD00001_0);
					errMsg = JCCWebCommon.getMessage(JPCOnlineMessageConstant.EKF0420_TW, REPLACE_CHAR_KIINID_PWD);
					// サービスフォームBean.認証結果画面プロパティ一覧.認証結果画面プロパティ一覧情報
					X31SDataBeanAccessArray ninshoResultPropList = svcFormBean.getDataBeanArray(FUW01103SFConst.NINSHO_RESULT_PROP_LIST);
					X31SDataBeanAccess subbean = ninshoResultPropList.getDataBean(0);
					// 認証NG文言 
					subbean.sendMessageString(FUW01103SFConst.R_NINSHO_NG_MSG_02, X31CWebConst.DATABEAN_SET_VALUE, errMsg);
					// 認証OK文言
					subbean.sendMessageString(FUW01103SFConst.R_NINSHO_FIN_MSG_02, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
					subbean.sendMessageString(FUW01103SFConst.R_CLOSE_BTN_DSP_UM_02, X31CWebConst.DATABEAN_SET_VALUE, BTN_DSP_OFF);
					subbean.sendMessageString(FUW01103SFConst.R_BACK_BTN_DSP_UM_02, X31CWebConst.DATABEAN_SET_VALUE, BTN_DSP_ON);
					// ガイダンス文言
					subbean.sendMessageString(FUW01103SFConst.R_NINSHO_AF_GUIDNS_02, X31CWebConst.DATABEAN_SET_VALUE,  JFUStrConst.EMPTY);
				}

			}
		}
		
		svcFormBean.sendMessageString(FUW01103SFConst.EOID, X31CWebConst.DATABEAN_SET_VALUE, eoid);
		return isNormalEnd;

	}

	/**
	 * iDA認証画面へリダイレクト設定。
	 * 
	 * @return boolean true(固定)
	 */
	public boolean redirectSettei()
	{
		DEBUG_LOG.debug("DEBUG： ●FUW01103_eoID認証（iDA認証画面へのリダイレクト設定）：redirectSettei");
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		// iDA認証画面へリダイレクト(他サイト連携)
		bean.sendMessageString(FUW01103SFConst.IDA_NINSHO_TRANS_FLG, X31CWebConst.DATABEAN_SET_VALUE, BTN_DSP_ON);

		return true;
	}

}