/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：JKKPulldownUtil
 *   モジュール名    ：JKKWebCommon
 *   ソースファイル名：JKKWebCommon.java
 *   作成者          ：富士通
 *   日付            ：2011年04月01日
 *＜機能概要＞
 *   画面のプルダウン情報を設定する共通部品です。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v1.00.00    2011/05/16   FJ          新規作成
 *
 **********************************************************************/

package eo.web.webview.common;

import java.util.ArrayList;
import java.util.HashMap;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

/**
 * 画面のプルダウン情報を設定する共通部品です。
 * <br>
 * @author 富士通
 */
public class JKKPulldownUtil 
{
	/**コードリストの定数*/
	private static final String CD_DIV_LIST = "コードリスト";
	
	/**コード名リストの定数*/
	private static final String CD_DIV_NM_LIST = "コード名リスト";

    /**名称リストの定数*/
	private static final String NM_LIST = "名称リスト";

	// ST2-2012-0000706 2012/05/01 ADD START
	/** 添え字とラベルの区切り文字 */
	public static final String IDX_SEP = ".";
	// ST2-2012-0000706 2012/05/01 ADD END

	/**
	 * <dd>メソッド名	：setPulldownList
	 * <dd>メソッド説明	：下り情報Mapから取得したコードリスト、コード名リストを
	 *                    プルダウン情報Beanに設定します。
	 * 
	 * @param bean データBeanアクセスクラス
	 * @param outputMap 下り情報Map
	 * @param pulldownKey プルダウン情報取得キー
	 * @param outMapKey 下り情報Map取得キー
	 * @param blankFlag 1行目ブランク付与フラグ  true:付与する,false:付与しない
	 * @exception Exceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	public static void setPulldownList(X31SDataBeanAccess bean, HashMap<String, Object> outputMap, 
			String pulldownKey, String outMapKey, boolean blankFlag) throws Exception
	{
		
		//データ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 ;
		}
		//Mapにコード名称管理一覧照会明細が含まれているか判定します
		//コード明細情報リストにコード名称管理一意照会明細を設定します
		ArrayList childList = (ArrayList)parentMap.get("EZM0171B010CBSMsg1List");
		//コード明細情報リストがNULLか、空か判定します
		if (childList == null || 0 == childList.size())
		{
			//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);

		//先頭に空文字を設定するか判定します
		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("cd_div"));
			//対象のBeanにコード区分名を設定す	る
			String cd_div_nm = (String)childMap.get("cd_div_nm");
			// ST2-2012-0000706 2012/05/01 MOD START
			//添え字、"."、コードリスト名の順にプルダウン情報Beanに設定する
			pulldown_subbean.sendMessageString(CD_DIV_NM_LIST, X31CWebConst.DATABEAN_ADD_VALUE, (index) + IDX_SEP
					+ cd_div_nm);
			// ST2-2012-0000706 2012/05/01 MOD END
			//添え字のカウントアップ
			index++;
		}
	}

	/**
	 * <dd>メソッド名	：setPulldownList
	 * <dd>メソッド説明	：下り情報Mapから取得したコードリスト、コード名リストを
	 *                    プルダウン情報Beanに設定します。
	 * <br>
	 * <br>
	 * <dd>プルダウン情報Beanには、コード、コード名（添え字あり）、コード名（添え字なし）を設定します。
	 * <dd>初期値、最大値、増減値が設定されている場合には、プルダウン情報を制限して設定します。
	 * @param bean データBeanアクセスクラス
	 * @param outputMap 下り情報Map
	 * @param pulldownKey プルダウン情報取得キー
	 * @param outMapKey 下り情報Map取得キー
	 * @param blankFlag 1行目ブランク付与フラグ  true:付与する,false:付与しない
	 * @param shk プルダウンの初期値
	 * @param max プルダウンの最大値
	 * @param zougen プルダウンの増減値
	 * @exception Exceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	public static void setPulldownListNoIndex(X31SDataBeanAccess bean, HashMap<String, Object> outputMap, 
			String pulldownKey, String outMapKey, boolean blankFlag,
			int shk, int max, int zougen) throws Exception
	{
		
		//データ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 ;
		}
		//Mapにコード名称管理一覧照会明細が含まれているか判定します
		//コード明細情報リストにコード名称管理一意照会明細を設定します
		ArrayList childList = (ArrayList)parentMap.get("EZM0171B010CBSMsg1List");
		//コード明細情報リストがNULLか、空か判定します
		if (childList == null || 0 == childList.size())
		{
			//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);
		//プルダウン情報Beanの名称リスト領域のクリアを行います
		pulldown_subbean.sendMessage(NM_LIST, X31CWebConst.DATABEAN_CLEAR);

		//先頭に空文字を設定するか判定します
		if(blankFlag)
		{
			// 先頭に空文字を設定
			pulldown_subbean.sendMessageString(CD_DIV_LIST, X31CWebConst.DATABEAN_ADD_VALUE, "");
			pulldown_subbean.sendMessageString(CD_DIV_NM_LIST, X31CWebConst.DATABEAN_ADD_VALUE, "");
			pulldown_subbean.sendMessageString(NM_LIST, X31CWebConst.DATABEAN_ADD_VALUE, "");
		}

		//添え字
		int index = 1;

		// 増減値加算用
		int val_set = 0;
		// 初期値が設定されている場合
		if (shk > 0)
		{
			val_set = shk;
		}
		
		//コード明細情報リスト分コードリスト、コード名リストを取得します
		for (int i = 0; i < childList.size(); i++)
		{
			//コード明細情報リストをコード明細情報Mapに設定します
			HashMap childMap = (HashMap)childList.get(i);
			
			// コード区分を取得
			String cd_div = (String)childMap.get("cd_div");
			int cd_div_val = 0;

			// 初期値が設定されている場合
			if (shk > 0)
			{
				if (cd_div != null && !"".equals(cd_div))
				{
					cd_div_val = Integer.parseInt(cd_div);
				}
				
				// コード区分が初期値を超えるまでは何もしない
				if (cd_div_val < shk)
				{
					continue;
				}
			}

			// 最大値が設定されている場合
			if (max > 0)
			{
				if (cd_div != null && !"".equals(cd_div))
				{
					cd_div_val = Integer.parseInt(cd_div);
				}
				
				// コード区分が最大値を超えた場合は何もしない
				if (cd_div_val > max)
				{
					continue;
				}
			}
			
			// 初期値、最大値、増減値がセットされている場合
			if (shk > 0 && max > 0 && zougen > 0)
			{
				// 初期値と等しくない　かつ　最大値と等しくない場合
				if ( cd_div_val != shk && cd_div_val != max )
				{
					// 最大値まででコード区分＝初期値＋増減値とならなければ何もしない
					int val_comp = val_set + zougen;
					for (; val_comp <= max; val_comp = val_comp + zougen)
					{
						if (cd_div_val == val_comp)
						{
							break;
						}
					}
					
					// loopが最後まで回った場合は何もしない
					if (val_comp > max)
					{
						continue;
					}
				}
			}

			//プルダウン情報Beanにコード区分を設定する
			pulldown_subbean.sendMessageString(CD_DIV_LIST, X31CWebConst.DATABEAN_ADD_VALUE, cd_div);
			//対象のBeanにコード区分名を設定する
			String cd_div_nm = (String)childMap.get("cd_div_nm");
			//添え字、"."、コードリスト名の順にプルダウン情報Beanに設定する
			pulldown_subbean.sendMessageString(CD_DIV_NM_LIST, X31CWebConst.DATABEAN_ADD_VALUE, (index) + IDX_SEP + cd_div_nm);
			// ST2-2012-0000706 2012/05/01 MOD START
			//プルダウン情報Beanに名称リストを設定する
			pulldown_subbean.sendMessageString(NM_LIST, X31CWebConst.DATABEAN_ADD_VALUE, (String)childMap
					.get("cd_div_nm"));
			// ST2-2012-0000706 2012/05/01 MOD END
			//添え字のカウントアップ
			index++;
		}
	}
}
