//********************************************************************************************
//* KKW01021SFConst.java                               COPYRIGHT   ＦＵＪＩＴＳＵ   2011     *
//********************************************************************************************
/*
 履歴：
 NO    日付            更新者                                    内容
 01    2011.08.08      データBean定数クラス作成ツール 1.0        新規作成
 02    2012.10.18      FJ                                        IT1-2012-0001482
 03    2018.07.14      FJ)藤本                                   【ANK-3383-09-00】標準工事費分割請求（STEP2）自治体特別キャンペーン登録/解約時チェック
 */

package eo.web.webview.KKW01021SF;

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.common.JKKCommonConst;
import eo.web.webview.common.JKKScreenConst;
import eo.web.webview.mapping.KKSV0229_KKSV0229OPDBMapper;

/**
 * <DL>
 * <DT>KKW01021SF定数クラス．
 * <p>
 * <DT>説明：
 * <DD>KKW01021SFアクセスで使用する定数クラス．
 * </DL>
 */
public class KKW01021SFConst
{

	/**
	 * <DL>
	 * <DT>コンストラクタ．
	 * </DL>
	 * <p>
	 */
	private KKW01021SFConst()
	{
	}

	/**
	 * 顧客契約引継リスト
	 */
	public static final String CUST_KEI_HKTGI_LIST = "顧客契約引継リスト";

	/**
	 * お客様
	 */
	public static final String CUST = "お客様";

	/**
	 * 選択番号
	 */
	public static final String SELECTED = "選択番号";

	/**
	 * キャンペーン一覧
	 */
	public static final String CAMPAIGN_ICRN = "キャンペーン一覧";

    /**
     * 選択割引サービスコード
     */
    public static final String SELECTED_WRIV_SVC_CD = "選択割引サービスコード";

	/**
	 * お客様 ＳＹＳＩＤ
	 */
	public static final String SYSID_02 = "ＳＹＳＩＤ";

	/**
	 * お客様 お客様名
	 */
	public static final String CUST_NM_02 = "お客様名";

	/**
	 * お客様 契約者都道府県名
	 */
	public static final String KEISHA_STATE_NM_02 = "契約者都道府県名";

	/**
	 * お客様 契約者市区町村名
	 */
	public static final String KEISHA_CITY_NM_02 = "契約者市区町村名";

	/**
	 * お客様 契約者大字通称名
	 */
	public static final String KEISHA_OAZTSU_NM_02 = "契約者大字通称名";

	/**
	 * お客様 契約者字丁目名
	 */
	public static final String KEISHA_AZCHO_NM_02 = "契約者字丁目名";

	/**
	 * お客様 契約者番地号
	 */
	public static final String KEISHA_BNCHIGO_02 = "契約者番地号";

	/**
	 * お客様 契約者住所補記・建物名
	 */
	public static final String KEISHA_ADRTTM_02 = "契約者住所補記・建物名";

	/**
	 * お客様 契約者住所補記・部屋番号
	 */
	public static final String KEISHA_ADRRM_02 = "契約者住所補記・部屋番号";

	/**
	 * お客様 契約者電話番号
	 */
	public static final String KEISHA_TELNO_02 = "契約者電話番号";

    /**
     * キャンペーン一覧 選択
     */
    public static final String CHOICE_03 = "選択";

    /**
     * キャンペーン一覧 番号
     */
    public static final String NO_03 = "番号";

    /**
     * キャンペーン一覧 契約種別
     */
    public static final String KEI_KIND_03 = "契約種別";

    /**
     * キャンペーン一覧 割引サービスコード
     */
    public static final String WRIB_SVC_CD_03 = "割引サービスコード";

    /**
     * キャンペーン一覧 ステータス
     */
    public static final String STAT_03 = "ステータス";

    /**
     * キャンペーン一覧 ステータス名称
     */
    public static final String STAT_NM_03 = "ステータス名称";

    /**
     * キャンペーン一覧 タイプコード
     */
    public static final String TYPE_CD_03 = "タイプコード";

    /**
     * キャンペーン一覧 タイプコード名称
     */
    public static final String TYPE_CD_NM_03 = "タイプコード名称";

    /**
     * キャンペーン一覧 キャンペーンコード
     */
    public static final String CAMPAIGN_CD_03 = "キャンペーンコード";

    /**
     * キャンペーン一覧 キャンペーン名
     */
    public static final String CAMPAIGN_NM_03 = "キャンペーン名";

    /**
     * キャンペーン一覧 申込年月日
     */
    public static final String MSKM_YMD_03 = "申込年月日";

    /**
     * キャンペーン一覧 開始年月日
     */
    public static final String STAYMD_03 = "開始年月日";

    /**
     * キャンペーン一覧 終了年月日
     */
    public static final String ENDYMD_03 = "終了年月日";

    // ANK-3383-09-00 ADD START
    /**
     * キャンペーン一覧 同一回線フラグ
     */
    public static final String SAME_KAISEN_FLG_03 = "同一回線フラグ";
    // ANK-3383-09-00 ADD END

    public static final int DEFAULT_ARRAY_SIZE=100;
    public static final int DEFAULT_HASH_SIZE=50;

    /** 遷移対象となる画面の列挙 */
	enum Screen
	{
		KKW01021(JKKScreenConst.SCREEN_ID_KKW01021, JKKScreenConst.SCREEN_NAME_KKW01021), //
		KKW01022(JKKScreenConst.SCREEN_ID_KKW01022, JKKScreenConst.SCREEN_NAME_KKW01022), //
		KKW01023(JKKScreenConst.SCREEN_ID_KKW01023, JKKScreenConst.SCREEN_NAME_KKW01023), //
		KKW01024(JKKScreenConst.SCREEN_ID_KKW01024, JKKScreenConst.SCREEN_NAME_KKW01024), //
		KKW01027(JKKScreenConst.SCREEN_ID_KKW01027, JKKScreenConst.SCREEN_NAME_KKW01027), //
		KKW01030(JKKScreenConst.SCREEN_ID_KKW01030, JKKScreenConst.SCREEN_NAME_KKW01030), //
		KKW01031(JKKScreenConst.SCREEN_ID_KKW01031, JKKScreenConst.SCREEN_NAME_KKW01031), //
		KKW00145(JKKScreenConst.SCREEN_ID_KKW00145, JKKScreenConst.SCREEN_NAME_KKW00145), //
		KKW04201(JKKScreenConst.SCREEN_ID_KKW04201, JKKScreenConst.SCREEN_NAME_KKW04201), //
		KKW00121(JKKScreenConst.SCREEN_ID_KKW00121, JKKScreenConst.SCREEN_NAME_KKW00121), //
		KKW00126(JKKScreenConst.SCREEN_ID_KKW00126, JKKScreenConst.SCREEN_NAME_KKW00126), //
		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
	{
		KKSV0229("割引サービス契約一覧照会初期表示")
		{

			@Override
			public void mapDown(X31SDataBeanAccess paramBean, HashMap<String, Object> out)
			{
				KKSV0229_KKSV0229OPDBMapper mapper = new KKSV0229_KKSV0229OPDBMapper();
				mapper.getKKSV022902CCKKW01021(new X31SDataBeanAccess[] { paramBean },out);
				mapper.getKKSV022903CC(new X31SDataBeanAccess[] { paramBean },out);
			}

			@Override
			public HashMap<String, Object> mapUp(X31SDataBeanAccess paramBean,String funcCode)
			{
				HashMap<String, Object> in = new HashMap<String, Object>();
				KKSV0229_KKSV0229OPDBMapper mapper = new KKSV0229_KKSV0229OPDBMapper();
				mapper.setKKSV022901CCKKW01021(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()
		{
			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)
		{
			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);
			this.mapDown(paramBean, out);
			return result;
		}

		public HashMap<String, Object> invoke(JCCWebBusinessLogic logic, X31SDataBeanAccess paramBean,String funcCode)
		{
			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)
		{
			HashMap<String, Object> parameter = this.setUpParameter();
			return invoke(logic, parameter);
		}
	}

	/** SC/CCにて使用する機能コードの列挙 */
	enum FunctionCode
	{
		ICRN_SHOKAI("1"), ICI_SHOKAI_PK("1"), ICI_SHOKAI_CURENT("2"), 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;
		}
	}

	public 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 },
	};

	public static final Object[] DATATYPE02_CUST =
	{
		new Object[]{SYSID_02, String.class },
		new Object[]{CUST_NM_02, String.class },
		new Object[]{KEISHA_STATE_NM_02, String.class },
		new Object[]{KEISHA_CITY_NM_02, String.class },
		new Object[]{KEISHA_OAZTSU_NM_02, String.class },
		new Object[]{KEISHA_AZCHO_NM_02, String.class }, 
		new Object[]{KEISHA_BNCHIGO_02, String.class },
// ▽IT1-2012-0001482 Start
		new Object[]{KEISHA_ADRTTM_02, String.class },
		new Object[]{KEISHA_ADRRM_02, String.class },
// △IT1-2012-0001482 End
		new Object[]{KEISHA_TELNO_02, String.class },
	};

	public static final Object[] DATATYPE03_CAMPAIGN_ICRN =
	{ new Object[]
	{ CHOICE_03, Boolean.class }, new Object[]
	{ NO_03, String.class }, new Object[]
	{ WRIB_SVC_CD_03, String.class }, new Object[]
	{ KEI_KIND_03, String.class }, new Object[]
	{ STAT_03, String.class }, new Object[]
	{ STAT_NM_03, String.class }, new Object[]
	{ TYPE_CD_03, String.class }, new Object[]
	{ TYPE_CD_NM_03, String.class }, new Object[]
	{ CAMPAIGN_CD_03, String.class }, new Object[]
	{ CAMPAIGN_NM_03, String.class }, new Object[]
	{ MSKM_YMD_03, String.class }, new Object[]
	{ STAYMD_03, String.class }, new Object[]
	{ ENDYMD_03, String.class }, 
		// ANK-3383-09-00 ADD START
		new Object[]{SAME_KAISEN_FLG_03, String.class},
		// ANK-3383-09-00 ADD END
	};

	public static final Object[] SFBEAN =
	{ 
		new Object[]{ JKKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST, DATATYPE01_CUST_KEI_HKTGI_LIST },
		new Object[]{ CUST, DATATYPE02_CUST },
		new Object[]{ CAMPAIGN_ICRN, DATATYPE03_CAMPAIGN_ICRN },
		new Object[]{ SELECTED, String.class },
// ▽IT1-2012-0002298 システム日付と同時対応（ラジオボタン情報保持） Start
		new Object[]{ SELECTED_WRIV_SVC_CD, String.class },
// △IT1-2012-0002298 システム日付と同時対応（ラジオボタン情報保持）End
	};

}
