/*******************************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 ********************************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：JKKejbZM0171DBAccess
 *	ソースファイル名：JKKejbZM0171DBAccess.java
 *	作成者			：EK907442
 *	日付			：2011年06月27日
 *＜機能概要＞
 *   コード名称管理情報を取得する部品です。（EJB用）
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *  v1.00.00   2011/06/27   FJ          新規作成
 *
 ********************************************************************************/

package eo.ejb.common.db;

import java.util.ArrayList;

import com.fujitsu.futurity.model.base.CAANException;
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.ZM0171ETMsg;
import eo.ejb.cbm.entity.ZM0171LE;
import eo.ejb.common.JKKModelCommon;
import eo.ejb.common.JPCModelCommon;

/**
 * コード名称管理情報取得部品です。（EJB用）<p>
 * コード名称管理情報を取得する機能を提供します。<p>
 * <BR>
 * @author 富士通
 */
public class JKKejbZM0171DBAccess
{
	/**同日包含フラグ(同日含む)**/
	private static final String INCLUDE_FLG_INCLUDED = "1";

	/**
	 * <p>
	 * コード名称管理情報取得部品を生成します。
	 * </p>
	 */
	public JKKejbZM0171DBAccess()
	{
	}

	/**
	 * <p>
	 * コード名称管理情報の設定値を取得します。
	 * </p>
	 * @param cdSbtCd 取得する対象のコード種別コード
	 * @return 取得対象のコード区分名称の配列
	 */
	public String[] getCodeName(String cdSbtCd)
	{
		CAANMsg inMsg = new CAANMsg(ZM0171ETMsg.class.getName());
		
		String baseDate = JKKModelCommon.getOpeDate(inMsg);
		ArrayList<String> retList = new ArrayList<String>();

		// 当日に有効なコード名称管理を取得
		CAANMsg[] retMsgList = getCodeName(cdSbtCd, baseDate);

		//コード名称のみ返却する
		for (int i = 0; i < retMsgList.length; i++)
		{
			retList.add(retMsgList[i].getString(ZM0171ETMsg.CD_DIV_NM));
		}
		return (String[])retList.toArray(new String[0]);
	}

	/**
	 * <p>
	 * コード名称管理にアクセスし、一意照会をします。
	 * </p>
	 * @param cdSbtCd 取得する対象のコード種別コード。
	 * @param baseDate コード名称管理の適用基準日付。
	 * @return 取得対象のシステムパラメータ設定値
	 */
	private CAANMsg[] getCodeName(String cdSbtCd, String baseDate)
	{
		// 適用基準日付に日付以外の値が設定された場合
		// 例外をスロー
		if (!(DatetimeCheck.isDateCheck(baseDate)))
		{
			throw new CAANRuntimeException("適用基準日には日付形式の値を設定してください。 baseDate = " + baseDate);
		}

		CAANMsg inMsg = new CAANMsg(ZM0171ETMsg.class.getName());
		inMsg.set(ZM0171ETMsg.CD_SBT_CD, cdSbtCd);
		ZM0171LE le = new ZM0171LE();
		CAANMsg[] outMsgList = null;

		try
		{
			// PK指定で検索
			outMsgList = le.findByCondition(inMsg);
		}
		catch (CAANException e1)
		{
			throw new CAANRuntimeException(e1);
		}

		if (outMsgList.length == 0)
		{
			// 該当するレコードが存在しない場合はそのまま返却
			return outMsgList;
		}

		String sFirstAppliedDate = null;
		String sLastAppliedDate = null;
		ArrayList<CAANMsg> list = new ArrayList<CAANMsg>();

		for (int i = 0; i < outMsgList.length; i++)
		{
			sFirstAppliedDate = outMsgList[i].getString(ZM0171ETMsg.CD_TSTAYMD);
			sLastAppliedDate = outMsgList[i].getString(ZM0171ETMsg.CD_TENDYMD);

			// 基準日が適用期間中（適用開始年月日以降で適用終了年月日以前）の日の場合、返却対象とする
			if (JPCModelCommon.isFutureDate(baseDate, sFirstAppliedDate, INCLUDE_FLG_INCLUDED)
					&& JPCModelCommon.isPastDate(baseDate, sLastAppliedDate, INCLUDE_FLG_INCLUDED))
			{
				list.add(outMsgList[i]);
			}
		}

		// 指定された業務パラメータ設定値を返却
		return (CAANMsg[])list.toArray(new CAANMsg[]{});
	}

	/**
	 * <p>
	 * コード定義の設定値を取得します。
	 * </p>
	 * @param cdSbtCd 取得する対象の業務パラメータID。
	 * @return 取得対象のコード区分名称の配列
	 */
	public String[] getCodeNameE(String cdSbtCd)
	{
		CAANMsg inMsg = new CAANMsg(ZM0171ETMsg.class.getName());
		
		String baseDate = JKKModelCommon.getOpeDate(inMsg);
		ArrayList<String> retList = new ArrayList<String>();

		// 当日に有効なコード名称管理を取得
		CAANMsg[] retMsgList = getCodeName(cdSbtCd, baseDate);

		if (retMsgList.length == 0)
		{
			throw new CAANRuntimeException("引数の値に誤りがあるため、データを取得できませんでした。  cdSbtCd = " + cdSbtCd);
		}

		//コード名称のみ返却する
		for (int i = 0; i < retMsgList.length; i++)
		{
			retList.add(retMsgList[i].getString(ZM0171ETMsg.CD_DIV_NM));
		}

		return (String[])retList.toArray(new String[]{});

	}

}
