/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：JZMejbCMNOraSeqNm
 *	ソースファイル名：JZMejbCMNOraSeqNm.java
 *	作成者			：富士通
 *	日付			：2011年04月22日
 *＜機能概要＞
 *	Oracleシーケンスを取得します。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00		2011/04/22	FJ) 宮前	新規作成
 *
 **********************************************************************/

package eo.ejb.common.edit;

import java.math.BigDecimal;
import java.sql.SQLException;
import java.text.DecimalFormat;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANSQLFacility;
import com.fujitsu.futurity.model.ejb.common.JSYejbDBAccess;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbm.entity.ZM0081ETMsg;




/**
 * Oracleシーケンスを取得します。
 * @author FJ
 *
 */
public class JZMejbCMNOraSeqNm extends CAANSQLFacility 
{
	
	/** エラーメッセージ SQL Exception */
	private static final String ERR_MSG_SQL_EXP = ":採番値取得処理で例外が発生しました。";

	/**
	 * フォーマット化したOracleシーケンス取得処理です。
	 * フォーマット化したOracleのシーケンス採番値を返却します。
	 * Oracleシーケンスの採番値を取得し、引数の接頭辞の付与と接頭辞と採番値の間のゼロ埋めを行います。
	 * 
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param context Agentから渡されたAgentDispatchContext
	 * @param seqName シーケンス定義名
	 * @param objKana 桁数
	 * @return 採番値
	 */
	public static String getFormatedNextSeq(CAANMsg inMsg, AgentDispatchContext context, Object seqName, Object objKana)
	{
		
		// 返却シーケンス番号 フォーマット調整用
		StringBuffer sb = new StringBuffer();
		String strNextValue = null;
		
		// 桁数
		int intKana = Integer.parseInt((String)objKana);
		
		// 0埋め
		for (int iCnt = 0; iCnt < intKana; iCnt++)
		{
			sb.append("0");
		}
		
		// フォーマット調整用インスタンス		
		DecimalFormat df = new DecimalFormat(sb.toString());
		
		// SQL文作成
		StringBuffer sql = new StringBuffer();
		sql.append("SELECT ");
		sql.append(seqName);
		sql.append(".NEXTVAL ");
		sql.append("AS SEQ_NEXTVAL ");
		sql.append("FROM DUAL");

		
		// DBコネクション
		JSYejbDBAccess dba = null;

		try
		{
			
			// コネクション取得
			
			dba = new JSYejbDBAccess(ZM0081ETMsg.getTableName());
			dba.initialize();

			dba.prepareStatement(sql.toString());

			// SQLを発行
			dba.executeQuery();
			dba.next();

			// 値の取得
			strNextValue = dba.getString("SEQ_NEXTVAL");

			strNextValue = df.format(new BigDecimal(strNextValue));

			return strNextValue;

		}
		catch (SQLException se)
		{
			throw new RuntimeException(seqName + ERR_MSG_SQL_EXP, se);
		}
		finally
		{
			
			// 資源の解放
			if (dba != null)
			{
				dba.terminal();
			}
		}

	}
}
