//********************************************************************************************
//* KKW01031SFConst.java                               COPYRIGHT   ＦＵＪＩＴＳＵ   2011     *
//********************************************************************************************
/*
 履歴：
 NO    日付            更新者                                    内容
 01    2011.08.08      データBean定数クラス作成ツール 1.0        新規作成
 18.00.00  2015.08.11  FJ) 河邊    								【ANK-2631-00-00】ワンストップ案件（ＳＴＥＰ１）※koptWebBからkoptWebAへコピー
 */

package eo.web.webview.commonOneStop;

import java.util.ArrayList;
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 eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.commonOneStop.JCKScreenConst;
import eo.web.webview.commonOneStop.JKKCommonConst;
import eo.web.webview.commonOneStop.JKKScreenConst;
import eo.web.webview.mapping.KKSV0239_KKSV0239OPDBMapper;
import eo.web.webview.mapping.KKSV0240_KKSV0240OPDBMapper;

/**
 * <DL>
 * <DT>KKW01031SF定数クラス．
 * <p>
 * <DT>説明：
 * <DD>KKW01031SFアクセスで使用する定数クラス．
 * </DL>
 */
public class KKW01031SFConst {

    /**
     * <DL>
     * <DT>コンストラクタ．
     * </DL>
     * <p>
     */
    private KKW01031SFConst() {
    }

    /**
     * 顧客契約引継リスト
     */
    public static final String CUST_KEI_HKTGI_LIST = "顧客契約引継リスト";

    /**
     * 契約番号リスト
     */
    public static final String KEI_NO_LIST = "契約番号リスト";

    /**
     * 契約種別リスト
     */
    public static final String KEI_KIND_LIST = "契約種別リスト";

    /**
     * 申込年月日
     */
    public static final String MSKM_YMD = "申込年月日";

    /**
     * 申込年月日＿年
     */
    public static final String MSKM_YMD_YEAR = "申込年月日＿年";

    /**
     * 申込年月日＿月
     */
    public static final String MSKM_YMD_MON = "申込年月日＿月";

    /**
     * 申込年月日＿日
     */
    public static final String MSKM_YMD_DAY = "申込年月日＿日";

    /**
     * キャンペーン一覧
     */
    public static final String CAMPAIGN_ICRN = "キャンペーン一覧";

    /**
     * ＳＹＳＩＤ
     */
    public static final String SYSID = "ＳＹＳＩＤ";

    /**
     * サービス契約番号
     */
    public static final String SVC_KEI_NO = "サービス契約番号";

    /**
     * 異動区分
     */
    public static final String IDO_DIV = "異動区分";

    /**
     * 異動理由コード
     */
    public static final String IDO_RSN_CD = "異動理由コード";

    /**
     * 異動理由メモ
     */
    public static final String IDO_RSN_MEMO = "異動理由メモ";

    /**
     * 申込番号
     */
    public static final String MSKM_NO = "申込番号";

    /**
     * 運用日付
     */
    public static final String OPE_DATE = "運用日付";

    /**
     * 顧客契約引継リスト ＳＹＳＩＤ
     */
    public static final String SYSID_01 = "ＳＹＳＩＤ";

    /**
     * 顧客契約引継リスト サービス契約番号
     */
    public static final String SVC_KEI_NO_01 = "サービス契約番号";

    /**
     * 顧客契約引継リスト 異動区分
     */
    public static final String IDO_DIV_01 = "異動区分";

    /**
     * 顧客契約引継リスト 異動理由コード
     */
    public static final String IDO_RSN_CD_01 = "異動理由コード";

    /**
     * 顧客契約引継リスト 異動理由メモ
     */
    public static final String IDO_RSN_MEMO_01 = "異動理由メモ";

    /**
     * 顧客契約引継リスト 申込番号
     */
    public static final String MSKM_NO_01 = "申込番号";

    /**
     * 顧客契約引継リスト 申込明細番号
     */
    public static final String MSKM_DTL_NO_01 = "申込明細番号";

    /**
     * キャンペーン一覧 番号／件数
     */
    public static final String NO_CNT_02 = "番号／件数";

    /**
     * キャンペーン一覧 番号
     */
    public static final String NO_02 = "番号";

    /**
     * キャンペーン一覧 契約種別
     */
    public static final String KEI_KIND_02 = "契約種別";

    /**
     * キャンペーン一覧 更新年月日時分秒更新前
     */
    public static final String UPD_DTM_BF_02 = "更新年月日時分秒更新前";

    /**
     * キャンペーン一覧 キャンペーン名称
     */
    public static final String CAMPAIGN_NM_02 = "キャンペーン名称";

    /**
     * キャンペーン一覧 ステータス
     */
    public static final String STAT_02 = "ステータス";

    /**
     * キャンペーン一覧 ステータス名称
     */
    public static final String STAT_NM_02 = "ステータス名称";

    /**
     * キャンペーン一覧 タイプコード
     */
    public static final String TYPE_CD_02 = "タイプコード";

    /**
     * キャンペーン一覧 タイプコード名称
     */
    public static final String TYPE_CD_NM_02 = "タイプコード名称";

    /**
     * キャンペーン一覧 即時適用フラグ
     */
    public static final String APLY_JUN_02 = "即時適用フラグ";

    /**
     * キャンペーン一覧 即時適用フラグ名称
     */
    public static final String APLY_JUN_NM_02 = "即時適用フラグ名称";

    /**
     * キャンペーン一覧 開始年月日
     */
    public static final String STAYMD_02 = "開始年月日";

    /**
     * キャンペーン一覧 終了年月日
     */
    public static final String ENDYMD_02 = "終了年月日";


    public static final int DEFAULT_ARRAY_SIZE=100;
    public static final int DEFAULT_HASH_SIZE=50;


    /** 遷移対象となる画面の列挙 */
	enum Screen
	{
		KKW01031(JKKScreenConst.SCREEN_ID_KKW01031,JKKScreenConst.SCREEN_NAME_KKW01031),//
		KKW01032(JKKScreenConst.SCREEN_ID_KKW01032,JKKScreenConst.SCREEN_NAME_KKW01032),//
		CKW00101(JCKScreenConst.SCREEN_ID_CKW00101,JCKScreenConst.SCREEN_NAME_CKW00101),//
		NULL("","")//
		;

		private String screenId;
		private String screenName;

		private Screen(String screenId, String screenName)
		{
			this.screenId = screenId;
			this.screenName = screenName;
		}

		public String getScreenId()
		{
			return screenId;
		}

		public String getScreenName()
		{
			return screenName;
		}
		public boolean isMatch(String screenId)
		{
			return this.screenId.equals(screenId);
		}

		static public Screen resolve(String screenId)
		{
			Screen[] screens = Screen.values();
			for (Screen enumScreen : screens)
			{
				if (enumScreen.isMatch(screenId))
				{
					return enumScreen;
				}
			}
			return Screen.NULL;
		}

	}

	/** 呼び出し対象となるサービスの列挙 */
	enum Service {
		KKSV0239("割引サービス契約解約キャンセル初期表示") {
			@Override
			public void mapDown(X31SDataBeanAccess paramBean,
					HashMap<String, Object> out) {
				KKSV0239_KKSV0239OPDBMapper mapper = new KKSV0239_KKSV0239OPDBMapper();
				mapper.getKKSV023902CC(new X31SDataBeanAccess[] { paramBean },
						out);
			}

			@Override
			public HashMap<String, Object> mapUp(X31SDataBeanAccess paramBean,
					String funcCode) {
				HashMap<String, Object> in = new HashMap<String, Object>();
				KKSV0239_KKSV0239OPDBMapper mapper = new KKSV0239_KKSV0239OPDBMapper();
				mapper.setKKSV023901CC(new X31SDataBeanAccess[] { paramBean },
						in, funcCode);
				return in;
			}
		},
		KKSV0240("割引サービス契約解約キャンセル更新確認") {
			@Override
			public void mapDown(X31SDataBeanAccess paramBean,
					HashMap<String, Object> out) {
			}

			@Override
			public HashMap<String, Object> mapUp(X31SDataBeanAccess paramBean,
					String funcCode) {
				HashMap<String, Object> in = new HashMap<String, Object>();
				KKSV0240_KKSV0240OPDBMapper mapper = new KKSV0240_KKSV0240OPDBMapper();
				mapper.setKKSV024001CC(new X31SDataBeanAccess[]{paramBean}, in, funcCode);
				mapper.setKKSV024002CC(new X31SDataBeanAccess[]{paramBean}, in, funcCode);
				return in;
			}
		},
		;

		private String serviceName;

		private Service(String serviceName) {
			this.serviceName = serviceName;
		}

		public String getServiceId() {
			return this.name();
		}

		public String getServiceName() {
			return serviceName;
		}

		public String getOperationId() {
			return this.name() + "OP";
		}

		public HashMap<String, Object> setUpParameter() throws Exception {
			HashMap<String, Object> parameter = new HashMap<String, Object>();
			parameter.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, this
					.getServiceId());
			parameter.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, this
					.getOperationId());
			return parameter;
		}

		abstract public HashMap<String, Object> mapUp(
				X31SDataBeanAccess paramBean, String funcCode);

		abstract public void mapDown(X31SDataBeanAccess paramBean,
				HashMap<String, Object> out);

		private X31CMessageResult invoke(JCCWebBusinessLogic logic,
				HashMap<String, Object> parameter, HashMap<String, Object> in,
				HashMap<String, Object> out) {
			return logic.invokeService(parameter, in, out);
		}

		private X31CMessageResult invoke(JCCWebBusinessLogic logic,
				HashMap<String, Object> parameter) {
			return logic.invokeService(parameter);
		}

		public X31CMessageResult invokeAndApplySFBean(
				JCCWebBusinessLogic logic, X31SDataBeanAccess paramBean,
				String funcCode) throws Exception {
			HashMap<String, Object> parameter = this.setUpParameter();
			HashMap<String, Object> in = this.mapUp(paramBean, funcCode);
			HashMap<String, Object> out = new HashMap<String, Object>();
			X31CMessageResult result = invoke(logic, parameter, in, out);
			
			/* 割引サービス契約内訳：日付表示対応*/
			if(!(out.get("KKSV023902CC") == null)){
				HashMap<String, Object> wrilist_temp = (HashMap<String, Object>)out.get("KKSV023902CC");
				if(!(((ArrayList<HashMap<String, Object>>) wrilist_temp.get("view_list"))==null)){
					ArrayList <HashMap<String, Object>> wrilist_temp_temp2 = (ArrayList<HashMap<String, Object>>) wrilist_temp.get("view_list");
					for(HashMap<String, Object> temp_map: wrilist_temp_temp2){
						String staymd_tmp = (String)temp_map.get("staymd");
						String endymd_tmp = (String)temp_map.get("endymd");
						if(null == staymd_tmp || 8 != staymd_tmp.trim().length() || JKKCommonConst.MAX_YMD.equals(staymd_tmp.trim()))
						{
							temp_map.put("staymd","");
						}
						if(null == endymd_tmp || 8 != endymd_tmp.trim().length() || JKKCommonConst.MAX_YMD.equals(endymd_tmp.trim()))
						{
							temp_map.put("endymd","");
						}
					}
				}
			}
			this.mapDown(paramBean, out);
			return result;
		}

		public HashMap<String, Object> invoke(JCCWebBusinessLogic logic,
				X31SDataBeanAccess paramBean, String funcCode) throws Exception {
			HashMap<String, Object> parameter = this.setUpParameter();
			HashMap<String, Object> in = this.mapUp(paramBean, funcCode);
			HashMap<String, Object> out = new HashMap<String, Object>();
			invoke(logic, parameter, in, out);
			return out;
		}

		public X31CMessageResult invoke(JCCWebBusinessLogic logic,
				String funcCode) throws Exception {
			HashMap<String, Object> parameter = this.setUpParameter();
			return invoke(logic, parameter);
		}
	}

	/** SC/CCにて使用する機能コードの列挙 */
	enum FunctionCode {
		READ_FULL("1"), CHECK_ONLY("2"), CHECK_AND_CHANGE("1"), CHECK_API("1"), ;

		private String code;

		private FunctionCode(String code) {
			this.code = code;
		}

		public String getCode() {
			return code;
		}
	}

	static final Object[] DATATYPE01_CUST_KEI_HKTGI_LIST = {
		new Object[] { JKKCommonConst.HKTGI_SYSID, String.class },
		new Object[] { JKKCommonConst.HKTGI_SVC_KEI_NO, String.class },
		new Object[] { JKKCommonConst.HKTGI_IDO_DIV, String.class },
		new Object[] { JKKCommonConst.HKTGI_IDO_RSN_CD, String[].class },
		new Object[] { JKKCommonConst.HKTGI_IDO_RSN_MEMO, String.class },
		new Object[] { JKKCommonConst.HKTGI_MSKM_NO, String.class },
		new Object[] { JKKCommonConst.HKTGI_MSKM_DTL_NO, String.class }, };

	static final Object[] DATATYPE02_CAMPAIGN = {
		new Object[] { 	 NO_CNT_02 	, String.class },
		new Object[] { 	 NO_02 	, String.class },
		new Object[] { 	 KEI_KIND_02 	, String.class },
		new Object[] { 	 UPD_DTM_BF_02 	, String.class },
		new Object[] { 	 CAMPAIGN_NM_02 	, String.class },
		new Object[] { 	 STAT_02 	, String.class },
		new Object[] { 	 STAT_NM_02 	, String.class },
		new Object[] { 	 TYPE_CD_02 	, String.class },
		new Object[] { 	 TYPE_CD_NM_02 	, String.class },
		new Object[] { 	 APLY_JUN_02 	, String.class },
		new Object[] { 	 APLY_JUN_NM_02 	, String.class },
		new Object[] { 	 STAYMD_02 	, String.class },
		new Object[] { 	 ENDYMD_02 	, String.class }, };

	public static final Object[] SFBEAN = {
		new Object[] { JKKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST, DATATYPE01_CUST_KEI_HKTGI_LIST },
		new Object[] { 	 KEI_NO_LIST 	, String[].class },
		new Object[] { 	 KEI_KIND_LIST 	, String[].class },
		new Object[] { 	 MSKM_YMD 	, String.class },
		new Object[] { 	 MSKM_YMD_YEAR 	, String.class },
		new Object[] { 	 MSKM_YMD_MON 	, String.class },
		new Object[] { 	 MSKM_YMD_DAY 	, String.class },
		new Object[] { 	 CAMPAIGN_ICRN 	, DATATYPE02_CAMPAIGN },
		new Object[] { 	 SYSID 	, String.class },
		new Object[] { 	 SVC_KEI_NO 	, String.class },
		new Object[] { 	 IDO_DIV 	, String.class },
		new Object[] { 	 IDO_RSN_CD 	, String[].class },
		new Object[] { 	 IDO_RSN_MEMO 	, String.class },
		new Object[] { 	 MSKM_NO 	, String.class },
		new Object[] { 	 OPE_DATE 	, String.class },};
}
