/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JCHModelCommon
*   ソースファイル名：JCHModelCommon.java
*   作成者          ：富士通
*   日付            ：2011年05月24日
*＜機能概要＞
*   モデル共通アクセッサー部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/05/24   FJ          新規作成
*   v32.00.00   2017/05/29   FJ) 河邊    【OM-2017-0000488】オープンカーソルエラー
*
**********************************************************************/

package eo.ejb.common;

import java.sql.Connection;

import com.fujitsu.futurity.model.base.CAANConnectionMgr;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.JSYejbConnection;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.common.util.JCCGetSystemDateUtil;
import eo.common.util.JCCOracleSeqUtil;
import eo.common.util.JPCUtilCommon;

/**
 * モデル共通アクセッサー部品です。<p>
 * サービスインターフェイスで実装します。<p>
 * <BR>
 * @ author 富士通
 */
public class JACModelCommon extends JPCUtilCommon
{

	/**
	 * システム日時取得処理です。
	 * アプリケーションプロパティファイルの定義に基いて、
	 * OSの保持日時またはテスト用に擬似的に設定したテスト日時を返却します。
	 * 定義を省略した場合、OSの保持日時を返却します。
	 * 
	 * @return YYYYMMDDhhmmssSSS形式の日付
	 * @exception Exceptionがスローされます。
	 */
	public static String getSysDateTimeStamp() throws Exception
	{
		return JCCGetSystemDateUtil.getSystemDateTime().get(JCCGetSystemDateUtil.KEY_YYYYMMDDHHMMSS_SSS);
	}
	
	/**
	 * システム日時取得処理です。
	 * アプリケーションプロパティファイルの定義に基いて、
	 * OSの保持日時またはテスト用に擬似的に設定したテスト日時を返却します。
	 * 定義を省略した場合、OSの保持日時を返却します。
	 * 
	 * @return YYYYMMDDhhmmss形式の日付
	 * @exception Exceptionがスローされます。
	 */
	public static String getSysDateTime() throws Exception
	{
		return JCCGetSystemDateUtil.getSystemDateTime().get(JCCGetSystemDateUtil.KEY_YYYYMMDDHHMMSS);
	}
	
	/**
	 * システム日時取得処理です。
	 * アプリケーションプロパティファイルの定義に基いて、
	 * OSの保持日時またはテスト用に擬似的に設定したテスト日時を返却します。
	 * 定義を省略した場合、OSの保持日時を返却します。
	 * 
	 * @return YYYYMMDD形式の日付
	 * @exception Exceptionがスローされます。
	 */
	public static String getSysDate() throws Exception
	{
		return JCCGetSystemDateUtil.getSystemDateTime().get(JCCGetSystemDateUtil.KEY_YYYYMMDD);
	}
	
	/**
	 * <p>
	 * 料金システムのオンライン運用日時を取得します。
	 * </p>
	 * @param arg0 処理対象のメッセージキャリア
	 * @param arg1 Agentから渡されたAgentDispatchContext
	 * @return YYYYMMDDhhmmssSSS形式の共通オンライン運用日時
	 */
	public static Object getOpeDateTimeStamp(CAANMsg arg0, AgentDispatchContext arg1)
	{
		String opeDate = (String)JCCModelCommon.getOpeDate(arg0, arg1, null);
		if (null == opeDate)
		{
			return null;
		}
		String opeTimeStamp = JCCModelCommon.getSysDateTimeStamp();
		return opeDate + opeTimeStamp.substring(8, 17);
	}
	
	/**
	 * Oracleシーケンス取得処理です。
	 * Oracleのシーケンス採番値を返却します。
	 *
	 * @param arg0 シーケンス定義名
	 * @return 採番値
	 * @exception Exceptionがスローされます。
	 */
	public static String getNextSeq(String arg0) throws Exception
	{
// OM-2017-0000488 2017/05/29 MOD START
//		Connection con = JSYejbConnection.getConnection("DUAL");
//		return JCCOracleSeqUtil.getNextSeq(con, arg0);
		Connection con = null;
		try
		{
			con = JSYejbConnection.getConnection("DUAL");
			return JCCOracleSeqUtil.getNextSeq(con, arg0);
		}
		finally
		{
			if(con != null)
			{
				CAANConnectionMgr.getInstance().close(con);
			}
		}
// OM-2017-0000488 2017/05/29 MOD END
	}

	
	/**
	 * フォーマット化したOracleシーケンス取得処理です。
	 * フォーマット化したOracleのシーケンス採番値を返却します。
	 * Oracleシーケンスの採番値を取得し、引数の接頭辞の付与と接頭辞と採番値の間のゼロ埋めを行います。
	 * 
	 * @param arg0 シーケンス定義名
	 * @param arg1 接頭語
	 * @param arg2 桁数
	 * @return 採番値
	 * @exception Exceptionがスローされます。
	 */
	public static String getFormatedNextSeq(String arg0,String arg1,int arg2) throws Exception
	{
// OM-2017-0000488 2017/05/29 MOD START
//		Connection con = JSYejbConnection.getConnection("DUAL");
//		return JCCOracleSeqUtil.getFormatedNextSeq(con, arg0, arg1, arg2);
		Connection con = null;
		try
		{
			con = JSYejbConnection.getConnection("DUAL");
			return JCCOracleSeqUtil.getFormatedNextSeq(con, arg0, arg1, arg2);
		}
		finally
		{
			if(con != null)
			{
				CAANConnectionMgr.getInstance().close(con);
			}
		}
// OM-2017-0000488 2017/05/29 MOD END
	}

	/**
	 * 指定された機能コードで処理が呼び出されているか判定します。
	 * <br>
	 * @param arg0 処理対象のメッセージキャリア
	 * @param arg1 Agentから渡されたAgentDispatchContext
	 * @param arg2 判定対象の機能コード
	 * @return メッセージの機能コードと引数の機能コードが一致する場合はtrue、一致しない場合はfalse
	 */
	public static boolean isFuncCd(CAANMsg arg0, AgentDispatchContext arg1, Object arg2)
	{
		return JPCModelCommon.isFuncCd(arg0, arg1, (String)arg2);
	}
}
