/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JPCModelCommon
*   ソースファイル名：JPCModelCommon.java
*   作成者          ：富士通
*   日付            ：2011年04月01日
*＜機能概要＞
*   モデル共通アクセッサー部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/04/01   FJ）根本    新規作成
*
**********************************************************************/

package eo.ejb.common;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.common.convert.JPCejbStrChecker;
import eo.ejb.common.entity.JPCejbEntityChecker;
import eo.ejb.common.itemrelation.JPCejbFuncChecker;

/**
 * モデル共通アクセッサー部品です。<p>
 * サービスインターフェイスで実装します。
 * <BR>
 * @ author 富士通
 */
public class JPCModelCommon extends JCCModelCommon
{
	/** パッケージ名 */
	private static final String PACKAGE_NAME = "eo.ejb.cbm.entity.";

	/** ETメッセージ接尾辞 */
	private static final String SUFFIX_ETMSG = "ETMsg";

	/**
	 * 文字列の文字数を算出します。
	 * <br>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param arg0 文字数を算出する文字列
	 * @return 文字列の文字数
	 */
	public static Object getValueLength(CAANMsg inMsg, AgentDispatchContext inContext, Object value)
	{
		return Integer.toString(getLength((String)value));
	}

	/**
	 * システムパラメータの設定値を取得します。
	 * <br>
	 * @param sysParamBunruiCd 取得する対象のシステムパラメータ分類コード。
	 * @param sysParamId 取得する対象のシステムパラメータID。
	 * @param targetSetteiValue システムパラメータ設定値1、2、3のいずれを取得するかを指定するパラメータ。定数で指定する。
	 * @return 取得対象のシステムパラメータ設定値
	 */
	public static String getParam(String sysParamBunruiCd, String sysParamId, String targetSetteiValue)
	{
		// 当日に有効なシステムパラメータ管理を取得
		JPCejbSysParam ins = new JPCejbSysParam();
		return ins.getParam(sysParamBunruiCd, sysParamId, targetSetteiValue);
	}

	/**
	 * システムパラメータの設定値を取得します（例外処理あり）。
	 * <br>
	 * @param sysParamBunruiCd 取得する対象のシステムパラメータ分類コード。
	 * @param sysParamId 取得する対象のシステムパラメータID。
	 * @param targetSetteiValue システムパラメータ設定値1、2、3のいずれを取得するかを指定するパラメータ。定数で指定する。
	 * @return 取得対象のシステムパラメータ設定値
	 */
	public static String getParamE(String sysParamBunruiCd, String sysParamId, String targetSetteiValue)
	{
		// 当日に有効なシステムパラメータ管理を取得
		JPCejbSysParam ins = new JPCejbSysParam();
		return ins.getParamE(sysParamBunruiCd, sysParamId, targetSetteiValue);
	}

	/**
	 * 指定日付時点で有効なシステムパラメータの設定値を取得します。
	 * <br>
	 * @param sysParamBunruiCd 取得する対象のシステムパラメータ分類コード。
	 * @param sysParamId 取得する対象のシステムパラメータID。
	 * @param targetSetteiValue システムパラメータ設定値1、2、3のいずれを取得するかを指定するパラメータ。定数で指定する。
	 * @param baseDate 基準日付。
	 * @return 取得対象のシステムパラメータ設定値
	 */
	public static String getValidParamOnSpecificDate(String sysParamBunruiCd, String sysParamId, String targetSetteiValue, String baseDate)
	{
		// 基準日付時点で有効なシステムパラメータ管理を取得
		JPCejbSysParam ins = new JPCejbSysParam();
		return ins.getValidParamOnSpecificDate(sysParamBunruiCd, sysParamId, targetSetteiValue, baseDate);
	}

	/**
	 * システムパラメータの設定値を取得します（例外処理あり）。
	 * <br>
	 * @param sysParamBunruiCd 取得する対象のシステムパラメータ分類コード。
	 * @param sysParamId 取得する対象のシステムパラメータID。
	 * @param targetSetteiValue システムパラメータ設定値1、2、3のいずれを取得するかを指定するパラメータ。定数で指定する。
	 * @param baseDate 基準日付。
	 * @return 取得対象のシステムパラメータ設定値
	 */
	public static String getValidParamOnSpecificDateE(String sysParamBunruiCd, String sysParamId, String targetSetteiValue, String baseDate)
	{
		// 基準日付時点で有効なシステムパラメータ管理を取得
		JPCejbSysParam ins = new JPCejbSysParam();
		return ins.getValidParamOnSpecificDateE(sysParamBunruiCd, sysParamId, targetSetteiValue, baseDate);
	}

	/**
	 * プライマリキーによる存在チェックを行います。
	 * <br>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param schemaID スキーマID
	 * @return データが存在する場合はtrue、存在しない場合はfalse
	 */
	public static boolean isExistingPrimaryKey(CAANMsg inMsg, AgentDispatchContext inContext, Object schemaID)
	{
		// プライマリキーによる存在チェックを行う
		JPCejbEntityChecker ins = new JPCejbEntityChecker(PACKAGE_NAME + schemaID + SUFFIX_ETMSG);
		return ins.isExistingPrimaryKey(inMsg, (String)schemaID);
	}

	/**
	 * 世代管理スキーマに対する、世代管理項目を除いたプライマリキーによる存在チェックを行います。
	 * <br>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param schemaID スキーマID
	 * @return データが存在する場合はtrue、存在しない場合はfalse
	 */
	public static boolean isExistingPrimaryKeyForGene(CAANMsg inMsg, AgentDispatchContext inContext, Object schemaID)
	{
		// 世代管理スキーマに対するプライマリキーによる存在チェックを行う
		JPCejbEntityChecker ins = new JPCejbEntityChecker(PACKAGE_NAME + schemaID + SUFFIX_ETMSG);
		return ins.isExistingPrimaryKeyForGene(inMsg, (String)schemaID);
	}

	/**
	 * タイムスタンプチェックを行います。
	 * <br>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param schemaID スキーマID
	 * @return データが存在する場合はtrue、存在しない場合はfalse
	 */
	public static boolean isNotUpdated(CAANMsg inMsg, AgentDispatchContext inContext, Object schemaID)
	{
		// タイムスタンプチェックを行う
		JPCejbEntityChecker ins = new JPCejbEntityChecker(PACKAGE_NAME + schemaID + SUFFIX_ETMSG);
		return ins.isNotUpdated(inMsg, (String)schemaID);
	}

	/**
	 * 世代管理スキーマに対するタイムスタンプチェックを行います。
	 * <br>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param schemaID スキーマID
	 * @return データが存在する場合はtrue、存在しない場合はfalse
	 */
	public static boolean isNotUpdatedForGene(CAANMsg inMsg, AgentDispatchContext inContext, Object schemaID)
	{
		// 世代管理スキーマに対するタイムスタンプチェックを行う
		JPCejbEntityChecker ins = new JPCejbEntityChecker(PACKAGE_NAME + schemaID + SUFFIX_ETMSG);
		return ins.isNotUpdatedForGene(inMsg, (String)schemaID);
	}

	/**
	 * 排他モードタイムスタンプチェックを行います。
	 * <br>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param schemaID スキーマID
	 * @return 排他処理が成功した場合はtrue、成功しなかった場合はfalse
	 */
	public static boolean succeededExclusiveLock(CAANMsg inMsg, AgentDispatchContext inContext, Object schemaID)
	{
		// 排他モードタイムスタンプチェックを行う
		JPCejbEntityChecker ins = new JPCejbEntityChecker(PACKAGE_NAME + schemaID + SUFFIX_ETMSG);
		return ins.succeededExclusiveLock(inMsg, (String)schemaID);
	}

	/**
	 * 世代管理スキーマに対する排他モードタイムスタンプチェックを行います。
	 * <br>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param schemaID スキーマID
	 * @return 排他処理が成功した場合はtrue、成功しなかった場合はfalse
	 */
	public static boolean succeededExclusiveLockForGene(CAANMsg inMsg, AgentDispatchContext inContext, Object schemaID)
	{
		// 世代管理スキーマに対する排他モードタイムスタンプチェックを行う
		JPCejbEntityChecker ins = new JPCejbEntityChecker(PACKAGE_NAME + schemaID + SUFFIX_ETMSG);
		return ins.succeededExclusiveLockForGene(inMsg, (String)schemaID);
	}

	/**
	 * システム日時取得処理です。
	 * アプリケーションプロパティファイルの定義に基いて、
	 * OSの保持日時またはテスト用に擬似的に設定したテスト日時を返却します。
	 * 定義を省略した場合、OSの保持日時を返却します。
	 * <br>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return YYYYMMDDhhmmss形式の日付
	 */
	public static String getSysDateTime(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		String value = null;
		try
		{
			value = getSysDateTime();
		}catch (Exception e)
		{
			throw new CAANRuntimeException();
		}
		
		return value;
	}

	/**
	 * 指定された機能コードで処理が呼び出されているか判定します。
	 * <br>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param funcCode 判定対象の機能コード
	 * @return boolean メッセージに指定されている機能コードと引数の機能コードが一致すればtrue。
	 * 一致しなければfalse。
	 */
	public static boolean isFuncCd(CAANMsg inMsg, AgentDispatchContext inContext, Object funcCode) 
	{
		// 指定された機能コードで処理が呼び出されているか判定
		JPCejbFuncChecker ins = new JPCejbFuncChecker();
		return ins.isFuncCd(inMsg, (String)funcCode);
	}

	/**
	 * 判定日が基準日と同日か判定します。
	 * <br>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param judgeDay 判定日
	 * @param baseDay 基準日
	 * @return boolean 同日：true、同日以外：false。
	 */
	public static boolean isEqualDate(CAANMsg inMsg, AgentDispatchContext inContext, Object judgeDay, Object baseDay) 
	{
		return isEqualDate((String)judgeDay, (String)baseDay);
	}

	/**
	 * 判定日が基準日より過去日か判定します。
	 * <br>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param judgeDay 判定日
	 * @param baseDay 基準日
	 * @param sameDayFlg 同日を含む／含まないの指定
	 * @return boolean 過去日：true、過去日以外：false。
	 */
	public static boolean isPastDate(CAANMsg inMsg, AgentDispatchContext inContext, Object judgeDay, Object baseDay, Object sameDayFlg) 
	{
		return isPastDate((String)judgeDay, (String)baseDay, (String)sameDayFlg);
	}

	/**
	 * 判定日が基準日より未来日か判定します。
	 * <br>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param judgeDay 判定日
	 * @param baseDay 基準日
	 * @param sameDayFlg 同日を含む／含まないの指定
	 * @return boolean 未来日：true、未来日以外：false。
	 */
	public static boolean isFutureDate(CAANMsg inMsg, AgentDispatchContext inContext, Object judgeDay, Object baseDay, Object sameDayFlg) 
	{
		return isFutureDate((String)judgeDay, (String)baseDay, (String)sameDayFlg);
	}

	/**
	 * 指定された文字列がNULL文字/空白文字か判定します。
	 * <br>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param strChar 判定対象の文字列
	 * @return boolean 指定された文字列がNULLまたは、空文字の場合はtrue。
	 */
	public static boolean isNullChk(CAANMsg inMsg, AgentDispatchContext inContext, Object strChar) 
	{
		JPCejbStrChecker ins = new JPCejbStrChecker();
		return ins.isNullChk((String)strChar);
	}
}
