/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JCREditQueryValue
*	ソースファイル名：JCREditQueryValue.java
*	作成者			：富士通
*	日付			：2012年01月12日
*＜機能概要＞
*	顧客対応履歴管理 クエリ登録データ編集処理部品
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/01/12	富士通		新規作成
*	v5.00.00	2013/03/21	FJ)伊藤		ANK-1480-00-00_Symphonyの顧客管理からの情報移行
*	v5.01.00	2013/06/05	FJ)伊藤		ANK-1528-00-00_お客様個人情報の機種依存文字対応
*	v9.00.00	2014/08/08	FJ)伊藤		OM-2014-0002694 作成者、担当者、送信者ユーザー、マンション名の形式変更。氏名/住所 → 機種依存_氏名/住所
*	v29.00.00	2017/01/27	FJ)岸本		ANK-2919-00-00_(客B) クエリ条件への簡易メモの追加
*
**********************************************************************/

package eo.web.webview.common;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;

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.JCRStrConst;
import eo.common.util.JCRUtilCommon;


/**
 * 対応履歴管理システム クエリ登録データ編集処理部品<p>
 * <BR>
 * @author 富士通
 */

class JCREditQueryValue
{
	/**
	 * フィールドタイプコード
	 */
	
	/**
	 *  FIELD_TYPE_CD_HE1_10
	 */
	private static final String FIELD_TYPE_CD_HE1_10 = "HE1:10";
	
	/**
	 *  FIELD_TYPE_CD_HE8_10
	 */
	private static final String FIELD_TYPE_CD_HE8_10 = "HE8:10";
	
	/**
	 *  FIELD_TYPE_CD_MX1_20
	 */
	private static final String FIELD_TYPE_CD_MX1_20 = "MX1:20";
	
	/**
	 *  FIELD_TYPE_CD_MX1_40
	 */
	private static final String FIELD_TYPE_CD_MX1_40 = "MX1:40";
	
	/**
	 *  FIELD_TYPE_CD_YD1_4_2_2
	 */
	private static final String FIELD_TYPE_CD_YD1_4_2_2 = "YD1:4:2:2";
	
	/**
	 *  FIELD_TYPE_CD_NA_20
	 */
	private static final String FIELD_TYPE_CD_NA_20 = "NA:20";
	
	/**
	 *  FIELD_TYPE_CD_NA_40
	 */
	private static final String FIELD_TYPE_CD_NA_40 = "NA:40";
	
	/**
	 *  FIELD_TYPE_CD_KNA_20
	 */
	private static final String FIELD_TYPE_CD_KNA_20 = "KNA:20";
	
	/**
	 *  FIELD_TYPE_CD_KNA_40
	 */
	private static final String FIELD_TYPE_CD_KNA_40 = "KNA:40";
	
	/**
	 *  FIELD_TYPE_CD_EM1_40
	 */
	private static final String FIELD_TYPE_CD_EM1_40 = "EM1:40";
	
	/**
	 *  FIELD_TYPE_CD_ZEK_40 
	 */
	private static final String FIELD_TYPE_CD_ZEK_40 = "ZEK:40";
	
	/**
	 *  FIELD_TYPE_CD_HE2_12 
	 */
	private static final String FIELD_TYPE_CD_HE2_12 = "HE2:12";
	
	/**
	 *  FIELD_TYPE_CD_HS1_7
	 */
	private static final String FIELD_TYPE_CD_HS1_7 = "HS1:7";
	
	/**
	 *  FIELD_TYPE_CD_ZN_40
	 */
	private static final String FIELD_TYPE_CD_ZN_40 = "ZN:40";
	
	/**
	 *  FIELD_TYPE_CD_HE2_20
	 */
	private static final String FIELD_TYPE_CD_HE2_20 = "HE2:20";
	
	/**
	 *  FIELD_TYPE_CD_HE2_40
	 */
	private static final String FIELD_TYPE_CD_HE2_40 = "HE2:40";
	
	/**
	 *  FIELD_TYPE_CD_MT_20
	 */
	private static final String FIELD_TYPE_CD_MT_20 = "MT:20";
	
	/**
	 *  FIELD_TYPE_CD_MT_40
	 */
	private static final String FIELD_TYPE_CD_MT_40 = "MT:40";
	
	/**
	 *  FIELD_TYPE_CD_MH_40
	 */
	private static final String FIELD_TYPE_CD_MH_40 = "MH:40";


	/**
	 *  フィールドタイプ別リスト
	 */
	
	/**
	 *  SET_HE1_10
	 */
	private static final Set<String> SET_HE1_10 = new HashSet<String>();
	
	/**
	 *  SET_HE8_10
	 */
	private static final Set<String> SET_HE8_10 = new HashSet<String>();
	
	/**
	 *  SET_MX1_20
	 */
	private static final Set<String> SET_MX1_20 = new HashSet<String>();
	
	/**
	 *  SET_MX1_40
	 */
	private static final Set<String> SET_MX1_40 = new HashSet<String>();
	
	/**
	 *  SET_YD1_4_2_2
	 */
	private static final Set<String> SET_YD1_4_2_2 = new HashSet<String>();
	
	/**
	 *  SET_NA_20
	 */
	private static final Set<String> SET_NA_20 = new HashSet<String>();
	
	/**
	 *  SET_NA_40 
	 */
	private static final Set<String> SET_NA_40 = new HashSet<String>();
	
	/**
	 *  SET_KNA_20
	 */
	private static final Set<String> SET_KNA_20 = new HashSet<String>();
	
	/**
	 *  SET_NA_K40 
	 */
	private static final Set<String> SET_KNA_40 = new HashSet<String>();
	
	/**
	 *  SET_EM1_40
	 */
	private static final Set<String> SET_EM1_40 = new HashSet<String>();
	
	/**
	 *  SET_ZEK_40
	 */
	private static final Set<String> SET_ZEK_40 = new HashSet<String>();
	
	/**
	 *  SET_HE2_12
	 */
	private static final Set<String> SET_HE2_12 = new HashSet<String>();
	
	/**
	 *  SET_HS1_7
	 */
	private static final Set<String> SET_HS1_7 = new HashSet<String>();
	
	/**
	 *  SET_ZN_40
	 */
	private static final Set<String> SET_ZN_40 = new HashSet<String>();
	
	/**
	 *  SET_HE2_20
	 */
	private static final Set<String> SET_HE2_20 = new HashSet<String>();
	
	/**
	 *  SET_HE2_40
	 */
	private static final Set<String> SET_HE2_40 = new HashSet<String>();
	
	/**
	 *  SET_MT_20
	 */
	private static final Set<String> SET_MT_20 = new HashSet<String>();
	
	/**
	 *  SET_MT_40
	 */
	private static final Set<String> SET_MT_40 = new HashSet<String>();
	
	/**
	 *  SET_MH_40
	 */
	private static final Set<String> SET_MH_40 = new HashSet<String>();
	
	
	static {
		Collections.addAll(SET_HE1_10
						, JCRStrConst.QUERY_ITEM_NM_TIAWS_ID
						, JCRStrConst.QUERY_ITEM_NM_TIAWS_CST
						, JCRStrConst.QUERY_ITEM_NM_SVC_KEI_NO
						, JCRStrConst.QUERY_ITEM_NM_KEIYKS_NO
						, JCRStrConst.QUERY_ITEM_NM_SEIKYSK_NO
						, JCRStrConst.QUERY_ITEM_NM_MNSHN_ID);
		Collections.addAll(SET_HE8_10
						, JCRStrConst.QUERY_ITEM_NM_MSKMS_NO);
		Collections.addAll(SET_YD1_4_2_2
						, JCRStrConst.QUERY_ITEM_NM_CALL_BACK_DATE
						, JCRStrConst.QUERY_ITEM_NM_ADD_DATE
						, JCRStrConst.QUERY_ITEM_NM_LAST_END_DATE
						, JCRStrConst.QUERY_ITEM_NM_MAIL_HEAD_RECEPT);
// v9.00.00 OM MOD START
//		Collections.addAll(SET_NA_20
//						, JCRStrConst.QUERY_ITEM_NM_ADD_OPE
//						, JCRStrConst.QUERY_ITEM_NM_CHARGE_OPE
//						, JCRStrConst.QUERY_ITEM_NM_SEND_USER);
//		Collections.addAll(SET_NA_40
//						, JCRStrConst.QUERY_ITEM_NM_MNSHN_NAME);
//		Collections.addAll(SET_KNA_20
//						, JCRStrConst.QUERY_ITEM_NM_NAME_KANJI);
//		Collections.addAll(SET_KNA_40
//						, JCRStrConst.QUERY_ITEM_NM_ADDRESS);
		Collections.addAll(SET_KNA_20
						, JCRStrConst.QUERY_ITEM_NM_ADD_OPE
						, JCRStrConst.QUERY_ITEM_NM_CHARGE_OPE
						, JCRStrConst.QUERY_ITEM_NM_NAME_KANJI
						, JCRStrConst.QUERY_ITEM_NM_SEND_USER);
		Collections.addAll(SET_KNA_40
						, JCRStrConst.QUERY_ITEM_NM_ADDRESS
						, JCRStrConst.QUERY_ITEM_NM_MNSHN_NAME);
// v9.00.00 OM MOD END
		Collections.addAll(SET_EM1_40
						, JCRStrConst.QUERY_ITEM_NM_MAIL_HEAD_SEND_MLAD);
		Collections.addAll(SET_ZEK_40
						, JCRStrConst.QUERY_ITEM_NM_NAME_KANA);
		Collections.addAll(SET_HE2_12
						, JCRStrConst.QUERY_ITEM_NM_TEL
						, JCRStrConst.QUERY_ITEM_NM_MOBILE_TEL);
		Collections.addAll(SET_HS1_7
						, JCRStrConst.QUERY_ITEM_NM_PDC);
		Collections.addAll(SET_ZN_40
						, JCRStrConst.QUERY_ITEM_NM_SVC_NAME);
		Collections.addAll(SET_HE2_20
						, JCRStrConst.QUERY_ITEM_NM_NINSHO_ID
						, JCRStrConst.QUERY_ITEM_NM_SEND_MLAD);
		Collections.addAll(SET_HE2_40
						, JCRStrConst.QUERY_ITEM_NM_EO_ID
						, JCRStrConst.QUERY_ITEM_NM_MLAD);
		Collections.addAll(SET_MT_20
						, JCRStrConst.QUERY_ITEM_NM_MAIL_HEAD_SBJ
						, JCRStrConst.QUERY_ITEM_NM_MAIL_HEAD_TITLE);
		Collections.addAll(SET_MT_40
						, JCRStrConst.QUERY_ITEM_NM_TITLE);
		Collections.addAll(SET_MH_40
						, JCRStrConst.QUERY_ITEM_NM_BIKO);
		// ANK-2919-00-00 20170127 岸本 ADD START
		Collections.addAll(SET_MX1_40
						, JCRStrConst.QUERY_ITEM_NM_EASY_MEMO);
		// ANK-2919-00-00 20170127 岸本 ADD END
	}

	/**
	 *  クエリ項目名別リスト
	 */
	private static final Set<String> SET_CTGR = new HashSet<String>();
	static {
		Collections.addAll(SET_CTGR
						, JCRStrConst.QUERY_ITEM_NM_CTGR_WKGRP
						, JCRStrConst.QUERY_ITEM_NM_CTGR_1
						, JCRStrConst.QUERY_ITEM_NM_CTGR_2
						, JCRStrConst.QUERY_ITEM_NM_CTGR_3
						, JCRStrConst.QUERY_ITEM_NM_CTGR_4
						, JCRStrConst.QUERY_ITEM_NM_CTGR_5
						, JCRStrConst.QUERY_ITEM_NM_CTGR_6
						, JCRStrConst.QUERY_ITEM_NM_CTGR_7
						, JCRStrConst.QUERY_ITEM_NM_CTGR_8
						, JCRStrConst.QUERY_ITEM_NM_CTGR_9
						, JCRStrConst.QUERY_ITEM_NM_CTGR_10);
	}

	/**
	 * フィールドタイプコード編集処理を行います。
	 * @param bean     フォームDataBean
	 * @param listNm   リスト名
	 * @param itemNm   項目名
	 * @param mapParam 対象マップ
	 */
	public static void setFieldTypeCd(X31SDataBeanAccess bean, String listNm, String itemNm, HashMap mapParam)
	{
		X31SDataBeanAccessArray list = bean.getDataBeanArray(listNm);
		ArrayList<Object> childList = null;
		if (mapParam.containsKey("ECR0151B010CBSMsg1List"))
		{
			childList = (ArrayList)mapParam.get("ECR0151B010CBSMsg1List");

			X31SDataBeanAccess subbean = null;

			if (list.getCount() - 1 >= 0)
			{
				subbean = list.getDataBean(0);
			}
			else
			{
				subbean = list.addDataBean();
			}

			for (int i = 0; i < childList.size(); i++)
			{
				HashMap childMap = (HashMap)childList.get(i);

				String queryKmkNm = (String)childMap.get("query_kmk_nm");
				String queryJokenCd = (String)childMap.get("query_joken_cd");
				String fieldTypeCd = null;

				if (!JCRUtilCommon.isNull(fieldTypeCd) && queryJokenCd.trim().equals(JCRStrConst.CD_DIV_QUERY_JOKEN_CD_C))
				{
					// コンボボックスの場合、フィールドタイプコードは設定しない
					fieldTypeCd = "";
				}
				else
				{
					fieldTypeCd = getFieldTypeCd(queryKmkNm);
				}

				subbean.sendMessageString(itemNm, X31CWebConst.DATABEAN_ADD_VALUE, fieldTypeCd);
			}
		}
	}

	/**
	 * フィールドタイプコード取得処理を行います。
	 * @param queryKmkNm クエリ項目名
	 * @return フィールドタイプコード
	 */
	public static String getFieldTypeCd(String queryKmkNm)
	{
		String fieldTypeCd = null;

		if (SET_HE1_10.contains(queryKmkNm))
		{
			fieldTypeCd = FIELD_TYPE_CD_HE1_10;
		}
		else if (SET_HE8_10.contains(queryKmkNm))
		{
			fieldTypeCd = FIELD_TYPE_CD_HE8_10;
		}
		else if (SET_MX1_20.contains(queryKmkNm))
		{
			fieldTypeCd = FIELD_TYPE_CD_MX1_20;
		}
		else if (SET_MX1_40.contains(queryKmkNm))
		{
			fieldTypeCd = FIELD_TYPE_CD_MX1_40;
		}
		else if (SET_YD1_4_2_2.contains(queryKmkNm))
		{
			fieldTypeCd = FIELD_TYPE_CD_YD1_4_2_2;
		}
		else if (SET_NA_20.contains(queryKmkNm))
		{
			fieldTypeCd = FIELD_TYPE_CD_NA_20;
		}
		else if (SET_NA_40.contains(queryKmkNm))
		{
			fieldTypeCd = FIELD_TYPE_CD_NA_40;
		}
		else if (SET_KNA_20.contains(queryKmkNm))
		{
			fieldTypeCd = FIELD_TYPE_CD_KNA_20;
		}
		else if (SET_KNA_40.contains(queryKmkNm))
		{
			fieldTypeCd = FIELD_TYPE_CD_KNA_40;
		}
		else if (SET_EM1_40.contains(queryKmkNm))
		{
			fieldTypeCd = FIELD_TYPE_CD_EM1_40;
		}
		else if (SET_ZEK_40.contains(queryKmkNm))
		{
			fieldTypeCd = FIELD_TYPE_CD_ZEK_40;
		}
		else if (SET_HE2_12.contains(queryKmkNm))
		{
			fieldTypeCd = FIELD_TYPE_CD_HE2_12;
		}
		else if (SET_HS1_7.contains(queryKmkNm))
		{
			fieldTypeCd = FIELD_TYPE_CD_HS1_7;
		}
		else if (SET_ZN_40.contains(queryKmkNm))
		{
			fieldTypeCd = FIELD_TYPE_CD_ZN_40;
		}
		else if (SET_HE2_20.contains(queryKmkNm))
		{
			fieldTypeCd = FIELD_TYPE_CD_HE2_20;
		}
		else if (SET_HE2_40.contains(queryKmkNm))
		{
			fieldTypeCd = FIELD_TYPE_CD_HE2_40;
		}
		else if (SET_MT_20.contains(queryKmkNm))
		{
			fieldTypeCd = FIELD_TYPE_CD_MT_20;
		}
		else if (SET_MT_40.contains(queryKmkNm))
		{
			fieldTypeCd = FIELD_TYPE_CD_MT_40;
		}
		else if (SET_MH_40.contains(queryKmkNm))
		{
			fieldTypeCd = FIELD_TYPE_CD_MH_40;
		}
		else
		{
			fieldTypeCd = "";
		}

		return fieldTypeCd;
	}

	/**
	 * 利用者タイプコードを返します。
	 * @param flg フラグ
	 * @return 利用者タイプコード
	 */
	public static boolean getUserTypeCd(String flg)
	{
		boolean userTypeCd = false;

		if (JCRStrConst.CD_DIV_USER_TYPE_CD_KYOYU.equals(flg))
		{
			userTypeCd = true;
		}

		return userTypeCd;
	}

	/**
	 * 利用者タイプコードを返します。
	 * @param flg フラグ
	 * @return 利用者タイプコード
	 */
	public static String getUserTypeCd(Boolean flg)
	{
		String userTypeCd = null;

		if (flg)
		{
			userTypeCd = JCRStrConst.CD_DIV_USER_TYPE_CD_KYOYU;
		}
		else
		{
			userTypeCd = JCRStrConst.CD_DIV_USER_TYPE_CD_KOJIN;
		}

		return userTypeCd;
	}

	/**
	 * クエリ値編集処理を行います。
	 * @param bean        フォームDataBean
	 * @param beanIdArray 項目ID
	 * @param fieldTypeCd フィールドタイプコード
	 * @return クエリ値
	 */
	public static String editQueryValue(X31SDataBeanAccess bean, String[] beanIdArray, String fieldTypeCd)
	{
		String queryValue = null;

		if (FIELD_TYPE_CD_YD1_4_2_2.equals(fieldTypeCd))
		{
			// フィールドタイプコードが年月日の場合、スラッシュ編集（yyyy/MM/dd）
			queryValue = JCRUtilCommon.formatDate(
					bean.sendMessageString(beanIdArray[0], X31CWebConst.DATABEAN_GET_VALUE)
					+ bean.sendMessageString(beanIdArray[1], X31CWebConst.DATABEAN_GET_VALUE)
					+ bean.sendMessageString(beanIdArray[2], X31CWebConst.DATABEAN_GET_VALUE) , JCRStrConst.FMT_YMD, JCRStrConst.FMT_EDIT_YMD);
		}
		else
		{
			// フィールドタイプコードが上記以外の場合、未編集
			queryValue = bean.sendMessageString(beanIdArray[0], X31CWebConst.DATABEAN_GET_VALUE);
		}

		return queryValue;
	}

	/**
	 * 分割したクエリ値の設定処理を行います。
	 * @param bean        フォームDataBean
	 * @param queryValue  クエリ値
	 * @param beanIdArray 項目ID
	 * @param fieldTypeCd フィールドタイプコード
	 */
	public static void setSplitQueryValue(X31SDataBeanAccess bean, String queryValue, String[] beanIdArray, String fieldTypeCd)
	{

		if (JCRUtilCommon.isNull(fieldTypeCd))
		{
			// フィールドタイプコードがnullの場合、何もしない
			return;
		}
		else if (FIELD_TYPE_CD_YD1_4_2_2.equals(fieldTypeCd))
		{
			// フィールドタイプコードが年月日（yyyy/MM/dd）の場合、スラッシュで分割
			String[] splitQueryValue = queryValue.split(JCRStrConst.STR_HALF_SLASH);
			bean.sendMessageString(beanIdArray[0], X31CWebConst.DATABEAN_SET_VALUE, splitQueryValue[0]);
			bean.sendMessageString(beanIdArray[1], X31CWebConst.DATABEAN_SET_VALUE, splitQueryValue[1]);
			bean.sendMessageString(beanIdArray[2], X31CWebConst.DATABEAN_SET_VALUE, splitQueryValue[2]);
		}
		else
		{
			// フィールドタイプコードが上記以外の場合、未編集
			bean.sendMessageString(beanIdArray[0], X31CWebConst.DATABEAN_SET_VALUE, queryValue);
		}
	}

	/**
	 * クエリ値編集処理を行います。
	 * @param queryKmkNm クエリ項目名
	 * @param queryValue クエリ値
	 * @param editFlg    編集フラグ(true:編集あり false:編集なし)
	 * @return クエリ値
	 */
	public static String editQueryValue(String queryKmkNm, String queryValue, boolean editFlg)
	{
		String editValue = null;

		if (SET_YD1_4_2_2.contains(queryKmkNm))
		{
			if (editFlg)
			{
				// 年月日の場合、スラッシュ編集（yyyy/MM/dd）
				editValue = JCRUtilCommon.formatDate(queryValue, JCRStrConst.FMT_YMD, JCRStrConst.FMT_EDIT_YMD);
			}
			else
			{
				// 年月日の場合、スラッシュ編集削除
				editValue = JCRUtilCommon.formatDate(queryValue, JCRStrConst.FMT_EDIT_YMD, JCRStrConst.FMT_YMD);
			}
		}
		else
		{
			// 上記以外の場合、未編集
			editValue = queryValue;
		}

		return editValue;
	}

	/**
	 * クエリ項目がカテゴリーか判定します。
	 * @param queryKmkNm クエリ項目名
	 * @return true:カテゴリー false:カテゴリー以外
	 */
	public static boolean judgeCtgr(String queryKmkNm)
	{
		return SET_CTGR.contains(queryKmkNm);
	}
}
