/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKejbRule0088001
*	ソースファイル名：JKKejbRule0088001.java
*	作成者			：富士通
*	日付			：2012年12月11日
*＜機能概要＞
*	申込期間判定相関ルール部品
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/12/11	FJ)			新規作成
*
**********************************************************************/

package eo.ejb.common.rule;

import java.util.HashMap;

import com.fujitsu.futurity.model.base.CAANMsg;

/**
 * <p>
 * 申込期間判定相関ルール部品クラスです。
 * </p>
 * @author 富士通
 */
public class JKKejbRule0088001 extends JKKejbRuleBase
{
	/** ルールID */
	private static final String RULE_ID = "RULE0088001";
	
	/** 申込期間 */
	private static final String JUDGE_RSLT = "JUDGE_RSLT";	

	/** 申込日 */
	private static final String MSKM_YMD = "MSKM_YMD";

	/** サービス開始日 */
	private static final String SVC_STAYMD = "SVC_STAYMD";

	/** サービス課金開始日 */
	private static final String SVC_CHRG_STAYMD = "SVC_CHRG_STAYMD";

	/** 処理対象のCBSMsg */
	private CAANMsg inCBSMsg = null;

	/** 申込日 */
	private String mskm_ymd = null;

	/** サービス開始日 */
	private String svc_sta_ymd = null;

	/** サービス課金開始日 */
	private String svc_chrg_staymd = null;

	/**
	 * <p>
	 * JKKejbRule0088001クラスのコンストラクタです。
	 * </p>
	 * @param inMsg 処理対象のCBSMsg
	 */
	public JKKejbRule0088001(CAANMsg inMsg)
	{
		super();
		this.inCBSMsg = inMsg;
	}

	/**
	 * <p>
	 * 処理対象のCBSMsgを取得します。
	 * </p>
	 * @return 処理対象のCBSMsg
	 */
	protected CAANMsg getCBSMsg()
	{
		return this.inCBSMsg;
	}

	/**
	 * <p>
	 * ルールIDを取得します。
	 * </p>
	 * @return ルールID
	 */
	protected String getRuleId()
	{
		return RULE_ID;
	}

	/**
	 * <p>
	 * ルールエンジンを複数条件モードで実行するか設定します。
	 * </p>
	 * @return 複数条件モードで実行する場合はtrue
	 */
	protected boolean isMultiMode()
	{
		return true;
	}

	/**
	 * <p>
	 * 申込日を取得します。
	 * </p>
	 * @return 申込日
	 */
	private String getMskm_ymd()
	{
		return this.mskm_ymd;
	}

	/**
	 * <p>
	 * サービス開始日を取得します。
	 * </p>
	 * @return サービス開始日
	 */
	private String getSvc_sta_ymd()
	{
		return this.svc_sta_ymd;
	}

	/**
	 * <p>
	 * サービス課金開始日を取得します。
	 * </p>
	 * @return サービス課金開始日
	 */
	private String getSvc_chrg_staymd()
	{
		return this.svc_chrg_staymd;
	}

	/**
	 * <p>
	 * 申込日を設定します。
	 * </p>
	 * @param p_mskm_ymd 申込日
	 */
	public void setMskm_ymd(String p_mskm_ymd)
	{
		this.mskm_ymd = p_mskm_ymd;
	}

	/**
	 * <p>
	 * サービス開始日を設定します。
	 * </p>
	 * @param  p_svc_sta_ymd サービス開始日
	 */
	public void setSvc_sta_ymd(String p_svc_sta_ymd)
	{
		this.svc_sta_ymd = p_svc_sta_ymd;
	}

	/**
	 * <p>
	 * サービス課金開始日を設定します。
	 * </p>
	 * @param p_svc_chrg_staymd サービス課金開始日
	 */
	public void setSvc_chrg_staymd(String p_svc_chrg_staymd)
	{
		this.svc_chrg_staymd = p_svc_chrg_staymd;
	}

	/**
	 * <p>
	 * 申込期間判定の相関ルールにより申込期間を取得します。
	 * </p>
	 * @return 申込期間
	 */
	public String getMskmPeriodDef()
	{
		// 例外ルール判定
		this.setSvcChrgStaYmdEdit();
		
		// ルールエンジンパラメータの設定
		set(MSKM_YMD, getMskm_ymd());
		set(SVC_STAYMD, getSvc_sta_ymd());
		set(SVC_CHRG_STAYMD, getSvc_chrg_staymd());

		// ルールエンジンの実行
		super.execRuleEngine();

		if (!hasNext())
		{
			return null;
		}

		// ルールエンジン実行結果の申込期間を返却
		HashMap<String, Object> map = getResultMap();
		return (String)map.get(JUDGE_RSLT);
	}
	
	/**
	 * <p>
	 * サービス開始日よりサービス課金開始日が過去日の場合、サービス開始日と
	 * 同日とみなす
	 * </p>
	 */
	private void setSvcChrgStaYmdEdit()
	{
		// サービス開始日とサービス課金開始日を取得
		String svcStaYmd = getSvc_sta_ymd();
		String svcChrgStaYmd = getSvc_chrg_staymd();

		// サービス開始日またはサービス課金開始日が未設定の場合
		if (svcStaYmd == null || svcChrgStaYmd == null)
		{
			// 何もしない
			return;
		}
		
		// サービス開始日 ＞ サービス課金開始日の場合
		if(svcStaYmd.compareTo(svcChrgStaYmd) > 0) {
			// サービス課金開始日にサービス開始日を設定する（サービス開始日と同日とみなす）
			setSvc_chrg_staymd(svcStaYmd);
		}
		return;
	}
}
