/*******************************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 ********************************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：JKKejbZM0321DBAccess
 *	ソースファイル名：JKKejbZM0321DBAccess.java
 *	作成者			：EK907442
 *	日付			：2011年06月27日
 *＜機能概要＞
 *   業務パラメータを取得する部品です。（EJB用）
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *  v1.00.00   2011/06/27   FJ          新規作成
 *
 ********************************************************************************/

package eo.ejb.common.db;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.common.check.DatetimeCheck;

import eo.ejb.cbm.entity.ZM0321ETMsg;
import eo.ejb.cbm.entity.ZM0321LE;
import eo.ejb.common.JKKModelCommon;
import eo.ejb.common.JPCModelCommon;

/**
 * 業務パラメータ取得部品です。（EJB用）<p>
 * 業務パラメータを取得する機能を提供します。<p>
 * <BR>
 * @author 富士通
 */
public class JKKejbZM0321DBAccess
{
	/**同日包含フラグ(同日含む)**/
	private static final String INCLUDE_FLG_INCLUDED = "1";

	/**
	 * <p>
	 * 業務パラメータ取得部品を生成します。
	 * </p>
	 */
	public JKKejbZM0321DBAccess()
	{
	}

	/**
	 * <p>
	 * 業務パラメータの設定値を取得します。
	 * </p>
	 * @param workParamId 取得する対象の業務パラメータID。
	 * @return 取得対象のシステムパラメータ設定値
	 */
	public String getParam(String workParamId)
	{
		CAANMsg inMsg = new CAANMsg(ZM0321ETMsg.class.getName());
		
		String baseDate = JKKModelCommon.getOpeDate(inMsg);

		// 当日に有効な業務パラメータ管理を取得
		return getWorkParam(workParamId, baseDate);

	}

	/**
	 * <p>
	 * 業務パラメータの設定値を取得します。
	 * </p>
	 * @param workParamId 取得する対象の業務パラメータID。
	 * @return 取得対象の業務パラメータ設定値
	 */
	public String getParamE(String workParamId)
	{
		CAANMsg inMsg = new CAANMsg(ZM0321ETMsg.class.getName());
		
		String baseDate = JKKModelCommon.getOpeDate(inMsg);

		// 当日に有効な業務パラメータ管理を取得
		String sSetteiValue = getWorkParam(workParamId, baseDate);

		if (null == sSetteiValue)
		{
			throw new CAANRuntimeException("引数の値に誤りがあるため、データを取得できませんでした。  sysParamId = " + workParamId);
		}

		return sSetteiValue;
	}

	/**
	 * <p>
	 * 業務パラメータ管理にアクセスし、一意照会をします。
	 * </p>
	 * @param workParamId 取得する対象の業務パラメータID。
	 * @param baseDate 業務パラメータ管理の適用基準日付。
	 * @return 取得対象の業務パラメータ設定値
	 */
	private String getWorkParam(String workParamId, String baseDate)
	{
		// 適用基準日付に日付以外の値が設定された場合
		// 例外をスロー
		if (!(DatetimeCheck.isDateCheck(baseDate)))
		{
			throw new CAANRuntimeException("適用基準日には日付形式の値を設定してください。 baseDate = " + baseDate);
		}

		CAANMsg inMsg = new CAANMsg(ZM0321ETMsg.class.getName());
		inMsg.set(ZM0321ETMsg.WORK_PARAM_ID, workParamId);
		ZM0321LE le = new ZM0321LE();

		// PK指定で検索
		CAANMsg outMsg = le.findByPrimaryKey(inMsg);

		if (null == outMsg)
		{
			// 該当するレコードが存在しない場合はnullを返却
			return null;
		}

		String sFirstAppliedDate = outMsg.getString(ZM0321ETMsg.WORK_PARAM_TSTAYMD);
		String sLastAppliedDate = outMsg.getString(ZM0321ETMsg.WORK_PARAM_TENDYMD);

		// 基準日が適用期間中（適用開始年月日以降で適用終了年月日以前）の日でなければnullを返却
		if (!(JPCModelCommon.isFutureDate(baseDate, sFirstAppliedDate, INCLUDE_FLG_INCLUDED) && JPCModelCommon.isPastDate(baseDate, sLastAppliedDate,
				INCLUDE_FLG_INCLUDED)))
		{
			return null;
		}

		// 指定された業務パラメータ設定値を返却
		return outMsg.getString(ZM0321ETMsg.WORK_PARAM_SETTE_VALUE);
	}
}
