/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKUWebCommon
*	ソースファイル名：JKUWebCommon.java
*	作成者			：FJ
*	日付			：2012年02月15日
*＜機能概要＞
*	工事受付Ｗｅｂ共通アクセッサー部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/02/15	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 eo.common.constant.JKUStrConst;
import eo.common.util.JKUCommonUtil;
import eo.common.util.JKUSetsubiCodeCnvUtil;
import eo.common.constant.JKUStrConst;

/**
 * 工事受付システムWeb共通アクセッサー部品<p>
 * <BR>
 * @author 富士通
 */
public class JKUWebCommon extends JCCWebCommon
{
	
	/**
	 * リスト→インデックス
	 * 選択されているプルダウンに紐づくインデックスをセッションに設定する
	 * @param bean
	 * @param listName
	 * @param komokuIdx
	 * @throws Exception
	 */
	public static void setSelectListIdx(X31SDataBeanAccess bean, String listName, String komokuIdx) throws Exception
	{
		bean.sendMessageString(komokuIdx, X31CWebConst.DATABEAN_SET_VALUE, getSelectListIdx(bean, listName));
	}
	
	/**
	 * リスト→インデックス
	 * 選択されているプルダウンに紐づくインデックスを取得する
	 * @param bean
	 * @param listName
	 * @return selectIdx
	 * @throws Exception
	 */
	public static String getSelectListIdx(X31SDataBeanAccess bean, String listName) throws Exception
	{
		// リスト
		X31SDataBeanAccess listDataBean = bean.getDataBeanArray(listName).getDataBean(0);
		// 選択されたインデックス
		String selectIdx = listDataBean.sendMessageString(JKUStrConst.STC_INDEX, X31CWebConst.DATABEAN_GET_VALUE);
		// インデックスがNULL&空白ではなかった場合
		if(JKUCommonUtil.isNull(selectIdx))
		{
			return "";
		}
		int len = (Integer)listDataBean.sendMessage(JKUStrConst.STC_CD, X31CWebConst.DATABEAN_GET_COUNT);
		if(len == 0 || len <= Integer.parseInt(selectIdx))
		{
			return "";
		}
		
		return  selectIdx;
	}
	
	/**
	 * リスト→コード
	 * 選択されているプルダウンに紐づくコードをセッションに設定する
	 * @param bean
	 * @param listName 取得するリスト
	 * @param komokuCd コードセット先
	 * @throws Exception
	 */
	public static void setSelectListCd(X31SDataBeanAccess bean, String listName, String komokuCd) throws Exception
	{
		bean.sendMessageString(komokuCd, X31CWebConst.DATABEAN_SET_VALUE, getSelectListCd(bean, listName));
	}
	
	/**
	 * リスト→コード＆名称
	 * 選択されているプルダウンに紐づくコードとコード名称をセッションに設定する
	 * @param bean
	 * @param listName 取得するリスト
	 * @param komokuCd コードセット先
	 * @param komokuNm 名称セット先
	 * @throws Exception
	 */
	public static void setSelectListCdAndNm(X31SDataBeanAccess bean, String listName, String komokuCd, String komokuNm) throws Exception
	{
		bean.sendMessageString(komokuCd, X31CWebConst.DATABEAN_SET_VALUE, getSelectListCd(bean, listName));
		bean.sendMessageString(komokuNm, X31CWebConst.DATABEAN_SET_VALUE, getSelectListName(bean, listName));
	}
	
	/**
	 * リスト→コード
	 * 選択されているプルダウンに紐づくコードを取得する
	 * @param bean
	 * @param listName 取得するリスト
	 * @return 取得したコード
	 * @throws Exception
	 */
	public static String getSelectListCd(X31SDataBeanAccess bean, String listName) throws Exception
	{
		// リスト
		X31SDataBeanAccess listDataBean = bean.getDataBeanArray(listName).getDataBean(0);
		// 選択されたインデックス
		String selectIdx = listDataBean.sendMessageString(JKUStrConst.STC_INDEX, X31CWebConst.DATABEAN_GET_VALUE);
		// インデックスがNULL&空白ではなかった場合
		if(JKUCommonUtil.isNull(selectIdx))
		{
			return "";
		}
		int len = (Integer)listDataBean.sendMessage(JKUStrConst.STC_CD, X31CWebConst.DATABEAN_GET_COUNT);
		if(len == 0 || len <= Integer.parseInt(selectIdx))
		{
			return "";
		}
		
		return  listDataBean.sendMessageString(JKUStrConst.STC_CD, X31CWebConst.DATABEAN_GET_VALUE, Integer.parseInt(selectIdx));
	}
	
	/**
	 * リスト→コード名称
	 * 選択されているプルダウンに紐づく名称を取得する
	 * @param bean
	 * @param listName 取得するリスト
	 * @return 取得したコード名称
	 * @throws Exception
	 */
	public static String getSelectListName(X31SDataBeanAccess bean, String listName) throws Exception
	{
		// リストから選択された名称を取得
		// リスト
		X31SDataBeanAccess listDataBean = bean.getDataBeanArray(listName).getDataBean(0);
		// 選択されたインデックス
		String selectIdx = listDataBean.sendMessageString(JKUStrConst.STC_INDEX, X31CWebConst.DATABEAN_GET_VALUE);
		// インデックスがNULの場合
		if(JKUCommonUtil.isNull(selectIdx))
		{
			return "";
		}
		
		int len = (Integer)listDataBean.sendMessage(JKUStrConst.STC_CD, X31CWebConst.DATABEAN_GET_COUNT);
		if(len == 0 || len <= Integer.parseInt(selectIdx))
		{
			return "";
		}
		String name = listDataBean.sendMessageString(JKUStrConst.STC_CD_NM, X31CWebConst.DATABEAN_GET_VALUE
				, Integer.parseInt(selectIdx));
		
		if(name.contains("."))
		{
			// コード名称を取得
			name = name.split("\\.")[1];
		}
		return name;
	}
	
	
	/**
	 * リストのインデックスを設定する
	 * @param bean
	 * @param listName
	 * @param keyValue
	 */
	public static void setListIndex(X31SDataBeanAccess bean, String listName, String keyValue)
	{
		X31SDataBeanAccess listDataBean = bean.getDataBeanArray(listName).getDataBean(0);
		listDataBean.sendMessageString(JKUStrConst.STC_INDEX, X31CWebConst.DATABEAN_SET_VALUE,
				keyValue);
	}
	
	/**
	 * コード→リストインデックス
	 * 対象キーからリストのインデックスを設定
	 * @param bean
	 * @param listName
	 * @param idxName
	 * @param keyName
	 * @param keyValue
	 */
	public static void setCdChangeListIndex(X31SDataBeanAccess bean, String listName, String keyValue)
	{
		X31SDataBeanAccess listDataBean = bean.getDataBeanArray(listName).getDataBean(0);
		listDataBean.sendMessageString(JKUStrConst.STC_INDEX, X31CWebConst.DATABEAN_SET_VALUE
				, getCdChangeListIndex(bean, listName, keyValue));
	}
	
	/**
	 * コード→リストインデックス
	 * 対象キーからリストのインデックスを取得
	 * @param bean
	 * @param listName
	 * @param keyName
	 * @param keyValue
	 * @return String
	 */	
	public static String getCdChangeListIndex(X31SDataBeanAccess bean, String listName, String keyValue)
	{
		String selectedCd = bean.sendMessageString(keyValue, X31CWebConst.DATABEAN_GET_VALUE);
		X31SDataBeanAccess listDataBean = bean.getDataBeanArray(listName).getDataBean(0);
		int len = (Integer)listDataBean.sendMessage(JKUStrConst.STC_CD, X31CWebConst.DATABEAN_GET_COUNT);
		if(selectedCd != null && len > 0)
		{
			for(int i = 0; i < len; i++)
			{
				if(selectedCd.equals(listDataBean.sendMessageString(JKUStrConst.STC_CD, X31CWebConst.DATABEAN_GET_VALUE, i)))
				{
					return String.valueOf(i);
				}
			}
		}
		return "";
	}
	
	/**
	 * 選択されているラジオボタンに紐づくコードを設定
	 * @param bean
	 * @param setKomoku
	 * @param listName
	 * @param choiceName
	 * @param codeName
	 */
	public static void setRadioSelectedValue(X31SDataBeanAccess bean, String setKomoku, String listName, String choiceName, String codeName)
	{
		bean.sendMessageString(setKomoku, X31CWebConst.DATABEAN_SET_VALUE, getRadioSelectedValue(bean, listName, choiceName, codeName));
	}

	/**
	 * 選択されているラジオボタンに紐づくコードを取得
	 * @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 (JKUCommonUtil.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 setKomoku
	 * @param yyyyName
	 * @param mmName
	 * @param ddName
	 */
	public static void setYMD(X31SDataBeanAccess bean, String setKomoku, String yyyyName, String mmName, String ddName)
	{
		bean.sendMessageString(setKomoku, X31CWebConst.DATABEAN_SET_VALUE, getYMD(bean, yyyyName, mmName, ddName));
	}
	
	/**
	 * 年、月、日に分かれた年月日を取得
	 * @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 setKomoku
	 * @param yyyyName
	 * @param mmName
	 * @param ddName
	 * @param hhName
	 */
	public static void setYMDH(X31SDataBeanAccess bean, String setKomoku, String yyyyName, String mmName, String ddName, String hhName)
	{
		bean.sendMessageString(setKomoku, X31CWebConst.DATABEAN_SET_VALUE, getYMDH(bean, yyyyName, mmName, ddName, hhName));
	}
	
	/**
	 * 年、月、日、時に分かれた年月日時を取得
	 * @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(JKUCommonUtil.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;
	}
	
	/**
	 * 配列にセットされたテキストボックスのキー情報を元に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).toString(), X31CWebConst.DATABEAN_CLEAR);
		}
	}
	
	/**
	 * プルダウンリスト初期化
	 * @param bean
	 * @param listName
	 * @param keyCd
	 * @param keyNm
	 */
	public static void resetPull(X31SDataBeanAccess bean, String listName, ArrayList<String> keyCd, ArrayList<String> keyNm)
	{
		
		X31SDataBeanAccess listDataBean = bean.getDataBeanArray(listName).getDataBean(0);
		
		// リストの初期化
		listDataBean.sendMessageString(JKUStrConst.STC_CD, X31CWebConst.DATABEAN_REMOVE);
		listDataBean.sendMessageString(JKUStrConst.STC_CD_NM, X31CWebConst.DATABEAN_REMOVE);
		
		for(int i = 0; i < keyCd.size(); i++)
		{
			// リストの値設定
			listDataBean.sendMessageString(JKUStrConst.STC_CD, X31CWebConst.DATABEAN_ADD_VALUE, keyCd.get(i).toString());
			listDataBean.sendMessageString(JKUStrConst.STC_CD_NM, X31CWebConst.DATABEAN_ADD_VALUE, keyNm.get(i).toString());
		}
	}
	
	/**
	 * 設備コードマップを変換、取得します。
	 * @param eoKokyakuMap eo顧客システムコードマップ
	 * @return 連携システムコードマップ
	 */
	public static HashMap<String, String> getSetsubiCodeMap(HashMap<String, String> eoKokyakuMap)
	{
		return JKUSetsubiCodeCnvUtil.getSetsubiCodeMap(eoKokyakuMap);
	}
	
	/**
	 * 検索パターン取得処理
	 * @param screenId 画面ID
	 * @return searchPattern 検索パターン
	 */
	public static String getSearchPattern(String screenId)
	{
		String searchPattern = "";
		String lscreenId = "";
		
		// 遷移元画面IDを取得する
		if(!JKUCommonUtil.isNull(screenId))
		{
			lscreenId = screenId.substring(0, 3);
		}
		
		// 頭三文字が「KUW」の場合は自業務からの遷移、空白でなければ他業務からの遷移、空白はメニューからの遷移
		if("KUW".equals(lscreenId))
		{
			searchPattern = JKUStrConst.SEARCH_PATTERN_1;
		}
		else if(!"".equals(lscreenId))
		{
			searchPattern = JKUStrConst.SEARCH_PATTERN_2;
		}
		
		return searchPattern;
	}
}