/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JTUDataBeanUtil
*	ソースファイル名：JTUDataBeanUtil.java
*	作成者			：FJ
*	日付			：2011年10月26日
*＜機能概要＞
*	DataBean情報へのアクセス部品を提供する。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v3.00.00	2011/10/26	FJ)楠神		新規作成
*	v4.00.00	2012/07/10	FJ)宮本		ANK-0398-00-00
*
**********************************************************************/
package eo.web.webview.common;

import java.text.ParseException;
import java.util.ArrayList;

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.JTUStrConst;
import eo.common.util.JPCUtilCommon;
import eo.common.util.JTUStringUtil;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;

/**
 * DataBean情報へのアクセス部品を提供する。
 * @author FJ
 *
 */
public class JTUDataBeanUtil 
{

	/**
	 * 遷移先の画面情報を設定
	 * @param commoninfoBean
	 * @param nextScreenId
	 * @param nextScreenName
	 */
	public static void setNextScreenInfo(X31SDataBeanAccess commoninfoBean, String nextScreenId, String nextScreenName)
	{
		// 遷移先の画面IDを共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID
								, X31CWebConst.DATABEAN_SET_VALUE, nextScreenId);
		
		// 遷移先の画面名を共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME
								, X31CWebConst.DATABEAN_SET_VALUE, nextScreenName);
	}

	/**
	 * 行スタイルを設定
	 * @param bean
	 * @param msgListName
	 * @param rowStyleName
	 */
	public static void setRowStyle(X31SDataBeanAccess bean, String msgListName, String rowStyleName)
	{
		X31SDataBeanAccessArray listDataBean = bean.getDataBeanArray(msgListName);
		int len = listDataBean.getCount();
		X31SDataBeanAccess childBean = null;
		for(int i = 0; i < len; i++)
		{
			childBean = listDataBean.getDataBean(i);
			childBean.sendMessageString(rowStyleName, X31CWebConst.DATABEAN_SET_VALUE
					, (i + 1) % 2 == 0 ? JTUStrConst.ROW_STYLE_EVEN : JTUStrConst.ROW_STYLE_ODD);
		}

	}
	
	/**
	 * プルダウンにNoを設定
	 * @param bean
	 * @param listName
	 * @param idxName
	 * @param codeName
	 * @return String
	 */
	public static void setListNo(X31SDataBeanAccess bean, String listName, String codeName)
	{
		X31SDataBeanAccess listDataBean = bean.getDataBeanArray(listName).getDataBean(0);

		int len = (Integer)listDataBean.sendMessage(codeName, X31CWebConst.DATABEAN_GET_COUNT);
		if(len == 0)
		{
			return;
		}
		
		int start = 0;

		//先頭行が空白の場合は2行目からNoを付与する
		if(JTUStringUtil.isNull(listDataBean.sendMessageString(codeName, X31CWebConst.DATABEAN_GET_VALUE, 0)))
		{
			start = 1;
		}
		
		for(int i = start; i < len; i++)
		{
			listDataBean.sendMessageString(codeName, X31CWebConst.DATABEAN_SET_VALUE, i
					, (i + 1 - start) + "." + listDataBean.sendMessageString(codeName, X31CWebConst.DATABEAN_GET_VALUE, i));
		}
		
	}

	
	
	/**
	 * 年、月、日に分かれた年月日を取得
	 * @param bean
	 * @param yyyyName
	 * @param mmName
	 * @param ddName
	 * @return String
	 */
	public static String getYMD(X31SDataBeanAccess bean, String yyyyName, String mmName, String ddName)
	{
		String yyyymmdd = "";
		yyyymmdd = bean.sendMessageString(yyyyName, X31CWebConst.DATABEAN_GET_VALUE)
				+ bean.sendMessageString(mmName, X31CWebConst.DATABEAN_GET_VALUE)
				+ bean.sendMessageString(ddName, X31CWebConst.DATABEAN_GET_VALUE);
		return yyyymmdd;
	}
	

	/**
	 * 年、月、日、時に分かれた年月日時を取得
	 * @param bean
	 * @param yyyyName
	 * @param mmName
	 * @param ddName
	 * @param hhName
	 * @return String
	 */
	public static String getYMDH(X31SDataBeanAccess bean, String yyyyName, String mmName, String ddName, String hhName)
	{
		String hh = "";
		
		if(JTUStringUtil.isNull(hhName))
		{
			hh = "00";
		}
		else
		{
			hh = bean.sendMessageString(hhName, X31CWebConst.DATABEAN_GET_VALUE);
		}

		String yyyymmddhh = "";
		yyyymmddhh = bean.sendMessageString(yyyyName, X31CWebConst.DATABEAN_GET_VALUE)
				+ bean.sendMessageString(mmName, X31CWebConst.DATABEAN_GET_VALUE)
				+ bean.sendMessageString(ddName, X31CWebConst.DATABEAN_GET_VALUE)
				+ hh;
		if (yyyymmddhh.length() != 10)
		{
			return "";
		}
		return yyyymmddhh;
	}

	/**
	 * 選択されているプルダウンに紐づくコードを取得
	 * @param bean
	 * @param listName
	 * @param idxName
	 * @param codeName
	 * @return String
	 */
	public static String getListSelectedValue(X31SDataBeanAccess bean, String listName, String idxName, String codeName)
	{
		X31SDataBeanAccess listDataBean = bean.getDataBeanArray(listName).getDataBean(0);
		String idx = listDataBean.sendMessageString(idxName, X31CWebConst.DATABEAN_GET_VALUE);
		if (JTUStringUtil.isNull(idx))
		{
			return "";
		}
		
		int len = (Integer)listDataBean.sendMessage(codeName, X31CWebConst.DATABEAN_GET_COUNT);
		if(len == 0 || len <= Integer.parseInt(idx))
		{
			return "";
		}
		
		return listDataBean.sendMessageString(codeName, X31CWebConst.DATABEAN_GET_VALUE, Integer.parseInt(idx));
	}
	
	

	/**
	 * 選択されているラジオボタンに紐づくコードを取得
	 * @param bean
	 * @param listName
	 * @param choiceName
	 * @param codeName
	 * @return String
	 */
	public static String getRadioSelectedValue(X31SDataBeanAccess bean, String listName, String choiceName, String codeName)
	{
		String idx = bean.sendMessageString(choiceName, X31CWebConst.DATABEAN_GET_VALUE);
		if (JTUStringUtil.isNull(idx))
		{
			return "";
		}
		
		int len = bean.getDataBeanArray(listName).getCount();
		if(len == 0 || len <= Integer.parseInt(idx))
		{
			return "";
		}
		
		X31SDataBeanAccess listRadio = bean.getDataBeanArray(listName).getDataBean(Integer.parseInt(idx));
		
		return listRadio.sendMessageString(codeName, X31CWebConst.DATABEAN_GET_VALUE);
	}

	
	/**
	 * 対象キーからリストのインデックスを取得
	 * @param bean
	 * @param listName
	 * @param keyName
	 * @param keyValue
	 * @return String
	 */
	public static String getListIndex(X31SDataBeanAccess bean, String listName, String keyName, String keyValue)
	{

		String selectedCd = bean.sendMessageString(keyValue, X31CWebConst.DATABEAN_GET_VALUE);
		X31SDataBeanAccess listDataBean = bean.getDataBeanArray(listName).getDataBean(0);
		int len = (Integer)listDataBean.sendMessage(keyName, X31CWebConst.DATABEAN_GET_COUNT);
		if(selectedCd != null && len > 0)
		{
			for(int i = 0; i < len; i++)
			{
				if(selectedCd.equals(listDataBean.sendMessageString(keyName, X31CWebConst.DATABEAN_GET_VALUE, i)))
				{
					return String.valueOf(i);
				}
			}
		}
		
		return "";
	}
	
	/**
	 * 配列にセットされたテキストボックスのキー情報を元にBeanをクリアする
	 * @param bean
	 * @param keyList
	 */
	public static void clearTxtBean(X31SDataBeanAccess bean, ArrayList<String> keyList)
	{
		for(int i = 0; i < keyList.size(); i++)
		{
			bean.sendMessage(keyList.get(i), X31CWebConst.DATABEAN_CLEAR);
		}
	}
	
	/**
	 * プルダウンのコードを「,」区切りでセットする
	 * @param bean
	 * @param listName
	 * @param codeName
	 * @param setName
	 */
	public static void setCdCodeList(X31SDataBeanAccess bean, String listName, String codeName, String setName)
	{
		X31SDataBeanAccess listDataBean = bean.getDataBeanArray(listName).getDataBean(0);
		String val = "";
		int len = (Integer)listDataBean.sendMessage(codeName, X31CWebConst.DATABEAN_GET_COUNT);
		if(len == 0)
		{
			return;
		}
		
		for(int i = 0; i < len; i++)
		{
			if(i != 0)
			{
				val = val + JTUStrConst.CODE_LIST_KUGIRI_CHAR;
			}
			
			val = val + listDataBean.sendMessageString(codeName, X31CWebConst.DATABEAN_GET_VALUE, i);
			
		}
		
		bean.sendMessageString(setName, X31CWebConst.DATABEAN_SET_VALUE, val);
	}
	
	
	/**
	 * ラジオボタンのコードを「,」区切りでセットする
	 * @param bean
	 * @param listName
	 * @param codeName
	 * @param setName
	 */
	public static void setCdRadioButtonList(X31SDataBeanAccess bean, String listName, String codeName, String setName)
	{
		String val = "";
		int len = bean.getDataBeanArray(listName).getCount();
		if(len == 0)
		{
			return;
		}
		
		X31SDataBeanAccess listRadio = null;
		
		for(int i = 0; i < len; i++)
		{
			if(!"".equals(val))
			{
				val = val + JTUStrConst.CODE_LIST_KUGIRI_CHAR;
			}
			listRadio = bean.getDataBeanArray(listName).getDataBean(i);
			val = val + listRadio.sendMessageString(codeName, X31CWebConst.DATABEAN_GET_VALUE);
		}
		
		bean.sendMessageString(setName, X31CWebConst.DATABEAN_SET_VALUE, val);
	}
	
	/**
	 * 住所項目のクリア処理
	 * @param bean
	 * @param clearFlgName
	 * @param manInputFlgName
	 * @param clearKomokuName
	 */
	public static void clearAd(X31SDataBeanAccess bean, String clearFlgName, String[] clearKomokuName)
	{
		String clear_flg  = bean.sendMessageString(clearFlgName, X31CWebConst.DATABEAN_GET_VALUE);
		if(JTUStrConst.AD_CLEAR_ON.equals(clear_flg))
		{
			for(String clrItem : clearKomokuName)
			{
				bean.sendMessage(clrItem, X31CWebConst.DATABEAN_CLEAR);
			}
			bean.sendMessageString(clearFlgName, X31CWebConst.DATABEAN_SET_VALUE, JTUStrConst.AD_CLEAR_OFF);
		}
	}
	
	/**
	 * 日付FROM-TO加減編集処理
	 * @param bean
	 * @param yyyymmddNameFrom
	 * @param yyyyNameFrom
	 * @param mmNameFrom
	 * @param ddNameFrom
	 * @param yyyymmddNameTo
	 * @param yyyyNameTo
	 * @param mmNameTo
	 * @param ddNameTo[
	 * @param prd
	 * @throws ParseException 
	 */
	public static void setDateFromTo(X31SDataBeanAccess bean, String yyyymmddNameFrom, String yyyyNameFrom, String mmNameFrom, String ddNameFrom
			, String yyyymmddNameTo, String yyyyNameTo, String mmNameTo, String ddNameTo, int prd) throws ParseException 
	{
		String dateFrom = bean.sendMessageString(yyyymmddNameFrom, X31CWebConst.DATABEAN_GET_VALUE);
		String dateTo = bean.sendMessageString(yyyymmddNameTo, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 日付ＦＲＯＭが設定済で日付ＴＯが未設定
		if(!JTUWebCommon.isNull(dateFrom) && JTUWebCommon.isNull(dateTo))
		{
			// 指定の期間(日)を足した値をＴＯに設定
			dateTo = JPCUtilCommon.addDay(dateFrom, prd -1);
			bean.sendMessageString(yyyymmddNameTo, X31CWebConst.DATABEAN_SET_VALUE, dateTo);
			bean.sendMessageString(yyyyNameTo, X31CWebConst.DATABEAN_SET_VALUE, dateTo.substring(0, 4));
			bean.sendMessageString(mmNameTo, X31CWebConst.DATABEAN_SET_VALUE, dateTo.substring(4, 6));
			bean.sendMessageString(ddNameTo, X31CWebConst.DATABEAN_SET_VALUE, dateTo.substring(6, 8));
		}
		// 日付ＦＲＯＭが未設定で日付ＴＯが設定済
		else if(JTUWebCommon.isNull(dateFrom) && !JTUWebCommon.isNull(dateTo))
		{
			// 指定の期間(日)を引いた値をＦＲＯＭに設定
			dateFrom = JPCUtilCommon.addDay(dateTo, -prd +1);
			bean.sendMessageString(yyyymmddNameFrom, X31CWebConst.DATABEAN_SET_VALUE, dateFrom);
			bean.sendMessageString(yyyyNameFrom, X31CWebConst.DATABEAN_SET_VALUE, dateFrom.substring(0, 4));
			bean.sendMessageString(mmNameFrom, X31CWebConst.DATABEAN_SET_VALUE, dateFrom.substring(4, 6));
			bean.sendMessageString(ddNameFrom, X31CWebConst.DATABEAN_SET_VALUE, dateFrom.substring(6, 8));
		}
		
		// どちらも設定されていない、またはどちらも設定されている場合は編集なし
	}
}
