/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：WCW02603SFLogic
*	ソースファイル名：WCW02603SFLogic.java
*	作成者			：富士通
*	日付			：2011年08月17日
*＜機能概要＞
*	グループＩＤマスタメンテ設定登録のビューロジッククラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/08/17	富士通		新規作成
*
**********************************************************************/
package eo.web.webview.WCW02603SF;

import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CMessageResult;
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.JPCOnlineMessageConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JWCCommonConst;
import eo.web.webview.common.JWCScreenConst;
import eo.web.webview.mapping.WCSV0022_WCSV0022OPDBMapper;
import eo.web.webview.mapping.WCSV0022_WCSV0022OP_01DBMapper;
import eo.web.webview.mapping.WCSV0023_WCSV0023OPDBMapper;
import eo.web.webview.mapping.WCSV0034_WCSV0034OPDBMapper;

/**
 * グループＩＤマスタメンテ設定の登録を行う。
 *
 * @ author 富士通
 */

public class WCW02603SFLogic extends JCCWebBusinessLogic
{
	
	/**
	 * 登録画面初期表示処理
	 * @author 富士通
	 * @return 
	 * @throws Exception 
	 */
	public boolean init() throws Exception
	{
		HashMap<String, Object> paramMap = null;
		HashMap<String, Object> inputMap = null;
		HashMap<String, Object> outputMap = null;
		paramMap = new HashMap<String, Object>();
		inputMap = new HashMap<String, Object>();
		outputMap = new HashMap<String, Object>();
		
		///// 共有フォームBean設定（遷移先画面） /////
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JWCScreenConst.SCREEN_ID_WC02603);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JWCScreenConst.SCREEN_NAME_WC02603);

		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// パラメータ作成
		X31SDataBeanAccess[] paramBean = {bean};

		// ◇ 業務ロジックの記述
		// ユースケースID格納用マップを生成。
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "WCSV0023");
		paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, "WCSV0023OP");
		
		///// サービス呼出処理 /////
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		} 

		// 下りマッピング定義
		mappingForDB_BP_WCSV0023_GET(paramBean, outputMap);
		
		return true;
	}
	
	/**
	 * 登録画面確定ボタン押下処理
	 * @return 
	 * @throws Exception 
	 */
	public boolean create() throws Exception 
	{
		HashMap<String, Object> paramMap = null;
		HashMap<String, Object> inputMap = null;
		HashMap<String, Object> outputMap = null;
		
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// パラメータ作成
		X31SDataBeanAccess[] paramBean = {bean};

		paramMap = new HashMap<String, Object>();
		inputMap = new HashMap<String, Object>();
		outputMap = new HashMap<String, Object>();
		
		// ◇ 業務ロジックの記述
		// ユースケースID格納用マップを生成。
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "WCSV0022");
		paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, "WCSV0022OP");

		mappingForDB_BP_WCSV0022_SET(paramBean, inputMap, JWCCommonConst.FUNC_CODE_1);
		
		///// サービス呼出処理 /////
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);

			// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}

		// 下りマッピング定義
		mappingForDB_BP_WCSV0022_GET(paramBean, outputMap);
		
		//グループＩＤ範囲チェック
		if(!checkGrpid(bean))
		{
			setErrMsg();
			return false;
		}
		
		// ◇ 業務ロジックの記述
		// ユースケースID格納用マップを生成。
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "WCSV0034");
		paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, "WCSV0034OP");
		
		X31SDataBeanAccess subbean = bean.getDataBeanArray(WCW02603SFConst.GRP_NO_INFO).getDataBean(0);
		int intslct = Integer.parseInt(subbean.sendMessageString(WCW02603SFConst.GRP_ID_RANGE_CD_01, X31CWebConst.DATABEAN_GET_VALUE));
		String strGrpIdRangeCd = subbean.sendMessageString(WCW02603SFConst.GRP_ID_RANGE_CD_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, intslct);
		bean.sendMessageString(WCW02603SFConst.GRP_ID_RANGE_CD, X31CWebConst.DATABEAN_SET_VALUE, strGrpIdRangeCd);
		bean.sendMessageString(WCW02603SFConst.STB_GRP_TSTAYMD, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getSysDate());
		
		mappingForDB_BP_WCSV0034_SET(paramBean, inputMap, JWCCommonConst.FUNC_CODE_2);

		///// サービス呼出処理 /////
		msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		} 
		
		///// 共有フォームBean設定（遷移先画面） /////
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();

		String MESSAGE_ID = "EKB0370--I";
		String[] stringArray;
		stringArray = new String[1];
		stringArray[0] = "グループIDマスタメンテ登録";

		// 共有フォームBeanからMESSAGE_LISTデータタイプBeanを取得する。
		X31SDataBeanAccessArray commonBeanArray = commonBean.getDataBeanArray(CommonInfoCFConst.MESSAGES_LIST);
		// MESSAGE_LISTをクリアする。
		commonBeanArray.clearArray();

		// 強調表示
		JCCWebCommon.setMessageAreaBackColor(this, "1");

		JCCWebCommon.setMessageInfo( this, MESSAGE_ID, stringArray, "");
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JWCScreenConst.SCREEN_ID_WC02604);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JWCScreenConst.SCREEN_NAME_WC02604);

		return true;
	}
	
	/**
	 * 登録確認画面確定ボタン押下処理
	 * @return 
	 * @throws Exception 
	 */
	public boolean fix() throws Exception
	{
		HashMap<String, Object> paramMap = null;
		HashMap<String, Object> inputMap = null;
		HashMap<String, Object> outputMap = null;
		
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// パラメータ作成
		X31SDataBeanAccess[] paramBean = {bean};

		paramMap = new HashMap<String, Object>();
		inputMap = new HashMap<String, Object>();
		outputMap = new HashMap<String, Object>();

		// ◇ 業務ロジックの記述
		// ユースケースID格納用マップを生成。
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "WCSV0034");
		paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, "WCSV0034OP");

		mappingForDB_BP_WCSV0034_SET(paramBean, inputMap, JWCCommonConst.FUNC_CODE_1);

		///// サービス呼出処理 /////
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		} 
		
		///// 共有フォームBean設定（遷移先画面） /////
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();

		String MESSAGE_ID = "EKB0380--I";
		String[] stringArray;
		stringArray = new String[1];
		stringArray[0] = "グループIDマスタメンテ登録";

		// 共有フォームBeanからMESSAGE_LISTデータタイプBeanを取得する。
		X31SDataBeanAccessArray commonBeanArray = commonBean.getDataBeanArray(CommonInfoCFConst.MESSAGES_LIST);
		// MESSAGE_LISTをクリアする。
		commonBeanArray.clearArray();
		
		JCCWebCommon.setMessageInfo( this, MESSAGE_ID, stringArray, "");
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JWCScreenConst.SCREEN_ID_WC02605);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JWCScreenConst.SCREEN_NAME_WC02605);

		return true;
	}
	
	/**
	 * 登録確認画面修正ボタン押下処理
	 * @return 
	 * @throws Exception 
	 */
	public boolean syusei() throws Exception
	{
		
		///// 共有フォームBean設定（遷移先画面） /////
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();

		String MESSAGE_ID = "EKB7030--I";
		String[] stringArray;
		stringArray = new String[1];
		stringArray[0] = "グループID設定欄";

		// 共有フォームBeanからMESSAGE_LISTデータタイプBeanを取得する。
		X31SDataBeanAccessArray commonBeanArray = commonBean.getDataBeanArray(CommonInfoCFConst.MESSAGES_LIST);
		// MESSAGE_LISTをクリアする。
		commonBeanArray.clearArray();
		
		JCCWebCommon.setMessageInfo( this, MESSAGE_ID, stringArray, "");
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JWCScreenConst.SCREEN_ID_WC02603);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JWCScreenConst.SCREEN_NAME_WC02603);

		return true;
	}
	

	/**
	 * 登録確認画面完了ボタン完了処理
	 * @return 
	 * @throws Exception 
	 */
	public boolean fin() throws Exception
	{
		
		///// 共有フォームBean設定（遷移先画面） /////
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		//commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JWCScreenConst.SCREEN_ID_WC02601);
		//commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JWCScreenConst.SCREEN_NAME_WC02601);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getScreenId(this));
		return true;
	}
		
	/**
	 * キャンセルボタン完了処理
	 * @return 
	 * @throws Exception 
	 */
	public boolean cancel() throws Exception
	{
		
		///// 共有フォームBean設定（遷移先画面） /////
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		//commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JWCScreenConst.SCREEN_ID_WC02601);
		//commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JWCScreenConst.SCREEN_NAME_WC02601);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getScreenId(this));
		return true;
	}		
	
	/**
	 * サービスフォームBean項目とサービス項目のマッピングを行う
	 * @param  paramBean  DataBean項目の配列
	 * @param  inputMap   上りデータマップ
	 * @param  func_code  機能コード
	 */
	private void mappingForDB_BP_WCSV0034_SET(X31SDataBeanAccess[] paramBean, HashMap<String, Object> inputMap, String func_code)
	{
		// DataBean-BPマッピングクラス生成
		WCSV0034_WCSV0034OPDBMapper mapper = new WCSV0034_WCSV0034OPDBMapper();
		
		mapper.setWCSV003402SC(paramBean, inputMap, func_code);
		return;
	}
	
	/**
	 * サービスフォームBean項目とサービス項目のマッピングを行う
	 * @param  paramBean  DataBean項目の配列
	 * @param  outputMap   下りデータマップ
	 * @param  func_code  機能コード
	 */
	private void mappingForDB_BP_WCSV0023_GET(X31SDataBeanAccess[] paramBean, HashMap<String, Object> outputMap)
	{
		// DataBean-BPマッピングクラス生成
		WCSV0023_WCSV0023OPDBMapper mapper = new WCSV0023_WCSV0023OPDBMapper();
		
		mapper.getWCSV002301SC(paramBean, outputMap);
		return;
	}
	

	/**
	 * サービスフォームBean項目とサービス項目のマッピングを行う
	 * @param  paramBean  DataBean項目の配列
	 * @param  outputMap   下りデータマップ
	 * @param  func_code  機能コード
	 */
	private void mappingForDB_BP_WCSV0022_SET(X31SDataBeanAccess[] paramBean, HashMap<String, Object> inputMap, String func_code)
	{
		// DataBean-BPマッピングクラス生成
		WCSV0022_WCSV0022OPDBMapper mapper = new WCSV0022_WCSV0022OPDBMapper();
		
		// 上りマッピング定義
		mapper.setWCSV002201SC(paramBean, inputMap,"1");
		return;
	}
	
	/**
	 * サービスフォームBean項目とサービス項目のマッピングを行う
	 * @param  paramBean  DataBean項目の配列
	 * @param  outputMap   下りデータマップ
	 * @param  func_code  機能コード
	 */
	private void mappingForDB_BP_WCSV0022_GET(X31SDataBeanAccess[] paramBean, HashMap<String, Object> outputMap)
	{
		// DataBean-BPマッピングクラス生成
		WCSV0022_WCSV0022OP_01DBMapper mapper = new WCSV0022_WCSV0022OP_01DBMapper();
		
		mapper.getWCSV002201SC(paramBean, outputMap);
		return;
	}
	
	private boolean checkGrpid(X31SDataBeanAccess Bean) 
	{
		// グループＩＤの値を取得
		String strGrpid = Bean.sendMessageString(WCW02603SFConst.STB_GRP_ID, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 16進数以外の入力の場合エラー
		if(!strGrpid.matches("[0-9A-F]+"))
		{
			return false;
		}
		
		// グループＩＤ値域コードを取得
		X31SDataBeanAccess subGrpNobean = Bean.getDataBeanArray(WCW02603SFConst.GRP_NO_INFO).getDataBean(0);
		int intslct = Integer.parseInt(subGrpNobean.sendMessageString(WCW02603SFConst.GRP_ID_RANGE_CD_01, X31CWebConst.DATABEAN_GET_VALUE));
		String strSlctGrpIdRangeCd = subGrpNobean.sendMessageString(WCW02603SFConst.GRP_ID_RANGE_CD_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, intslct);

		X31SDataBeanAccessArray subGrpIdArray = Bean.getDataBeanArray(WCW02603SFConst.GRP_ID_LIST);
		
		for(int i = 0; i < subGrpIdArray.getCount(); i++)
		{
			X31SDataBeanAccess subGrpIdbean = subGrpIdArray.getDataBean(i);
			String strGrpIdRangeCd = subGrpIdbean.sendMessageString(WCW02603SFConst.GRP_ID_TRITORY_CD_02, X31CWebConst.DATABEAN_GET_VALUE);
			
			// 選択したグループ値域コードと一致するものを取得
			if(strSlctGrpIdRangeCd.equals(strGrpIdRangeCd))
			{
				String strRangeUpplValue = subGrpIdbean.sendMessageString(WCW02603SFConst.GRP_ID_RANGE_UPPL_VALUE_02, X31CWebConst.DATABEAN_GET_VALUE);
				String strRangeLowlValue = subGrpIdbean.sendMessageString(WCW02603SFConst.GRP_ID_RANGE_LOWL_VALUE_02, X31CWebConst.DATABEAN_GET_VALUE);
				// 16進数を10進数に変換
				
				Long lngRangeUpplValue = Long.parseLong(strRangeUpplValue, 16);
				Long lngRangeLowlValue = Long.parseLong(strRangeLowlValue, 16);
				Long lngGrpId = Long.parseLong(strGrpid, 16);
			
				// グループIDが上限値、下限値の範囲内でない場合エラー
				if(lngRangeUpplValue >= lngGrpId && lngRangeLowlValue <= lngGrpId)
				{
					return true;
				}
				else
				{
					return false;
				}
			}
		}
		
		return false;
	}

	/**
	 * エラーメッセージを設定します。
	 * @param MESSAGE_ID
	 * @param stArray
	 */
	private void setErrMsg()
	{
		String MESSAGE_ID = JPCOnlineMessageConstant.EKB2100_NW;
		String[] stArray;
		stArray = new String[2];
		stArray[0] = "グループID";
		stArray[1] = "グループＩＤ値域マスタの設定値";
		
		///// 共有フォームBean設定/////
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();

		// 共有フォームBeanからMESSAGE_LISTデータタイプBeanを取得する。
		X31SDataBeanAccessArray commonBeanArray = commonBean.getDataBeanArray(CommonInfoCFConst.MESSAGES_LIST);
		// MESSAGE_LISTをクリアする。
		commonBeanArray.clearArray();
		JCCWebCommon.setMessageInfo( this, MESSAGE_ID, stArray, "");
	}
}
