/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JCCBPCommon
*   ソースファイル名：JCCBPCommon.java
*   作成者          ：富士通
*   日付            ：2011年04月01日
*＜機能概要＞
*   ＢＰ共通アクセッサー部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/04/01   富士通      新規作成
*
**********************************************************************/

package com.fujitsu.futurity.bp.custom.common;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;

import eo.common.util.JCCFrameworkException;
import eo.common.util.JCCGetSystemDateUtil;
import eo.common.util.JPCUtilCommon;
import eo.ejb.common.JCCejbGetOperationDateUtil;


/**
 * ＢＰ共通アクセッサー部品です。<p>
 * サービスで実装します。<p>
 * <BR>
 * @ author 富士通
 */
public class JCCBPCommon extends JPCUtilCommon
{
	
	/**
	 * 運用日付取得処理です。
	 * 
	 * バッチ呼び出し以外の場合はオンライン運用日付を返却します。
	 * バッチ呼び出しの場合のみバッチ運用日付を返却します。
	 * 
	 * @param arg0 システムコード　例)"KK"等、またはnull
	 * @return YYYYMMDD形式の運用日付
	 */
	public static String getOpeDate(String arg0)
	{
		try
		{
			CAANMsg msg = new CAANMsg();
			return JCCejbGetOperationDateUtil.getOpeDate(msg, arg0);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * 運用日時取得処理です。
	 * アプリケーションプロパティファイルの定義に基づいて
	 * アプリケーションプロパティファイルかシステムパラメータ管理テーブルに設定されている
	 * 運用日付にシステム日時取得処理の返す時分秒を付加して返却します。
	 * 
	 * バッチ呼び出し以外の場合はオンライン運用日付を返却します。
	 * バッチ呼び出しの場合のみバッチ運用日付を返却します。
	 * 
	 * @param arg0 システムコード　例)"KK"等、またはnull
	 * @return YYYYMMDDhhmmss形式の運用日時
	 */
	public static String getOpeDateTime(String arg0)
	{
		try
		{
			String opeDate = getOpeDate(arg0);
			if (null == opeDate)
			{
				return null;
			}
			String opeTime = getSysDateTime();
			return opeDate + opeTime.substring(8, 14);
		}	
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * 運用日時取得処理です。
	 * アプリケーションプロパティファイルの定義に基づいて
	 * アプリケーションプロパティファイルかシステムパラメータ管理テーブルに設定されている
	 * 運用日付にシステム日時取得処理の返す時分秒ミリ秒を付加して返却します。
	 * 
	 * バッチ呼び出し以外の場合はオンライン運用日付を返却します。
	 * バッチ呼び出しの場合のみバッチ運用日付を返却します。
	 * 
	 * @param arg0 システムコード　例)"KK"等、またはnull
	 * @return YYYYMMDDhhmmssSSS形式の運用日時
	 */
	public static String getOpeDateTimeStamp(String arg0)
	{
		try
		{
			String opeDate = getOpeDate(arg0);
			if (null == opeDate)
			{
				return null;
			}
			String opeTime = getSysDateTimeStamp();
			return opeDate + opeTime.substring(8, 17);
		}	
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}

// 2013/03/28 FST_mukuo)オンライン運用日付取得専用処理追加 start
	/**
	 * オンライン運用日付取得処理です。
	 * システムコードに対応するオンライン運用日付を返却します。
	 * システムコードにnullを指定した場合、共通のオンライン運用日付を返却します。
	 * システムコードに対応するオンライン運用日付が定義されていなければ、nullを返却します。
	 * 
	 * @param arg0 システムコード　例)"KK"等、またはnull
	 * @return YYYYMMDD形式の運用日付
	 */
	public static String getOnlineOpeDate(String arg0)
	{
		try
		{
			CAANMsg msg = new CAANMsg();
			return JCCejbGetOperationDateUtil.getOnlineOpeDate(msg, arg0);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * オンライン運用日時取得処理です。
	 * システムIDに対応するオンライン運用日時を返却します。
	 * システムIDにnullを指定した場合、共通のオンライン運用日時を返却します。
	 * システムIDに対応するオンライン運用日時が定義されていなければ、nullを返却します。
	 * アプリケーションプロパティファイルの定義に基づいて
	 * アプリケーションプロパティファイルかシステムパラメータ管理テーブルに設定されている
	 * 運用日付にシステム日時取得処理の返す時分秒を付加して返却します。
	 * 
	 * @param arg0 システムコード　例)"KK"等、またはnull
	 * @return YYYYMMDDhhmmss形式の運用日時
	 */
	public static String getOnlineOpeDateTime(String arg0)
	{
		try
		{
			String opeDate = getOnlineOpeDate(arg0);
			if (null == opeDate)
			{
				return null;
			}
			String opeTime = getSysDateTime();
			return opeDate + opeTime.substring(8, 14);
		}	
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * オンライン運用日時取得処理です。
	 * システムIDに対応するオンライン運用日時を返却します。
	 * システムIDにnullを指定した場合、共通のオンライン運用日時を返却します。
	 * システムIDに対応するオンライン運用日時が定義されていなければ、nullを返却します。
	 * アプリケーションプロパティファイルの定義に基づいて
	 * アプリケーションプロパティファイルかシステムパラメータ管理テーブルに設定されている
	 * 運用日付にシステム日時取得処理の返す時分秒ミリ秒を付加して返却します。
	 * 
	 * @param arg0 システムコード　例)"KK"等、またはnull
	 * @return YYYYMMDDhhmmssSSS形式の運用日時
	 */
	public static String getOnlineOpeDateTimeStamp(String arg0)
	{
		try
		{
			String opeDate = getOnlineOpeDate(arg0);
			if (null == opeDate)
			{
				return null;
			}
			String opeTime = getSysDateTimeStamp();
			return opeDate + opeTime.substring(8, 17);
		}	
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
// 2013/03/28 FST_mukuo)オンライン運用日付取得専用処理追加 end
	
	/**
	 * バッチ運用日付取得処理です。
	 * システムコードに対応するバッチ運用日付を返却します。
	 * システムコードにnullを指定した場合、共通のバッチ運用日付を返却します。
	 * システムコードに対応するバッチ運用日付が定義されていなければ、nullを返却します。
	 * 
	 * @param arg0 システムコード　例)"KK"等、またはnull
	 * @return YYYYMMDD形式の運用日付
	 */
	public static String getBatOpeDate(String arg0)
	{
		try
		{
			CAANMsg msg = new CAANMsg();
			return JCCejbGetOperationDateUtil.getBatOpeDate(msg, arg0);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}

	/**
	 * アプリケーションプロパティファイルから情報を取得する処理です。
	 * アプリケーションプロパティファイルからキーで指定された情報を返却します。
	 * 
	 * @param arg0 キー
	 * @return キーで取得された情報
	 */
	public static String getApplicationConst(String arg0)
	{
		return JCMAPLConstMgr.getString(arg0);
	}
	
	/**
	 * システム日時取得処理です。
	 * アプリケーションプロパティファイルの定義に基いて、
	 * OSの保持日時またはテスト用に擬似的に設定したテスト日時を返却します。
	 * 定義を省略した場合、OSの保持日時を返却します。
	 * 
	 * @return YYYYMMDDhhmmssSSS形式の日付
	 */
	public static String getSysDateTimeStamp()
	{
		try
		{
			return JCCGetSystemDateUtil.getSystemDateTime().get(JCCGetSystemDateUtil.KEY_YYYYMMDDHHMMSS_SSS);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * システム日時取得処理です。
	 * アプリケーションプロパティファイルの定義に基いて、
	 * OSの保持日時またはテスト用に擬似的に設定したテスト日時を返却します。
	 * 定義を省略した場合、OSの保持日時を返却します。
	 * 
	 * @return YYYYMMDDhhmmss形式の日付
	 */
	public static String getSysDateTime()
	{
		try
		{
			return JCCGetSystemDateUtil.getSystemDateTime().get(JCCGetSystemDateUtil.KEY_YYYYMMDDHHMMSS);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * システム日時取得処理です。
	 * アプリケーションプロパティファイルの定義に基いて、
	 * OSの保持日時またはテスト用に擬似的に設定したテスト日時を返却します。
	 * 定義を省略した場合、OSの保持日時を返却します。
	 * 
	 * @return YYYYMMDD形式の日付
	 */
	public static String getSysDate()
	{
		try
		{
			return JCCGetSystemDateUtil.getSystemDateTime().get(JCCGetSystemDateUtil.KEY_YYYYMMDD);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}

	/**
	 * JCCFrameworkExceptionオブジェクト生成処理です。
	 * ThrowableオブジェクトをJCCFrameworkExceptionオブジェクトに保持して返却します。
	 * ThrowableオブジェクトがJCCFrameworkExceptionオブジェクトの場合は、そのまま返却します。
	 * @param th Throwableオブジェクト
	 * @return JCCFrameworkExceptionオブジェクト
	 */
	private static JCCFrameworkException makeJCCFrameworkException(Throwable th)
	{	
		if (th instanceof JCCFrameworkException)
		{	
			return (JCCFrameworkException)th;
		}
		JCCFrameworkException fwe = new JCCFrameworkException();
		fwe.initCause(th);
		return fwe;
	}

}