/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JZMModelCommon
*   ソースファイル名：JZMModelCommon.java
*   作成者          ：富士通
*   日付            ：2011年05月23日
*＜機能概要＞
*   共通(マスタ)アクセッサー部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00		2011/05/23	FJ）山本	新規作成
*	v3.00		2012/02/27	FJ) 宮前	【ANK-0024-00-00】eoIDあいまい検索部品追加
*	v4.00		2013/01/09	FJ) 岩元	【ST1-2012-0001069】Oracleマイナーバージョン不一致障害 関連対応
*
**********************************************************************/

package eo.ejb.common;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.common.edit.JZMejbEoIdSearchKeySetEdit;
import eo.ejb.common.entity.JZMejbZM0171DELCRCK;

/**
 * 共通マスタモデル層共通部品アクセッサー<p>
 * 共通(マスタ)アクセッサー部品です。<p>
 * サービスインターフェイスで実装します。
 * <BR>
 * @author 富士通
 */
public class JZMModelCommon extends JCCModelCommon
{

	/** SQL用% */
	private static final String PERCENT = "%";
	
	/** パッケージ名 */
	private static final String PACKAGE_NAME = "eo.ejb.cbm.entity.";

	/** ETメッセージ接尾辞 */
	private static final String SUFFIX_ETMSG = "ETMsg";
	
	/** ワイルドカード文字列 */
	private static final String[] ESCAPE_TARGET = {"\\", "%", "_"};
	
	/** ワイルドカード置き換え文字列 */
	private static final String[] ESCAPE_TARGET_REPLACE_RESULT = {"\\\\", "\\%", "\\_"};
	
	/** エスケープ用SQL文 */
	public static final String ESCAPE_SQL_STRING = " ESCAPE '\\' ";

	/**
	 * 排他モードタイムスタンプチェックを行います。
	 * <br>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param schemaID スキーマID
	 * @return 排他処理が成功した場合はtrue、成功しなかった場合はfalse
	 */
	public static boolean succeededExclusiveLock(CAANMsg inMsg, AgentDispatchContext inContext, Object schemaID)
	{
		// 排他モードタイムスタンプチェックを行う
		JZMejbZM0171DELCRCK ins = new JZMejbZM0171DELCRCK(PACKAGE_NAME + schemaID + SUFFIX_ETMSG);
		return ins.succeededExclusiveLock(inMsg, inContext, (String)schemaID);
	}
	
	/**
	 * LIKE検索に設定する値に対して、ワイルドカードが含まれている場合、
	 * ESCAPE文字列を追加して値を返却します。
	 * 
	 * @param value ：設定値
	 * @return      : 変換後文字列
	 */
	public static String replaceLikeValue(Object value)
	{
		if(value == null)
		{
			return null;
		}
		
		String returnValue = value.toString();
		for(int index = 0; index < ESCAPE_TARGET.length; index++)
		{
			returnValue = returnValue.replace(ESCAPE_TARGET[index], ESCAPE_TARGET_REPLACE_RESULT[index]);
		}
		return returnValue;
	}
		
	/**
	 * 文字列を結合して返します。
	 * @param arg0 文字列１
	 * @param arg1 文字列２
	 * @param arg2 文字列３
	 * @return 結合した文字列
	 */
	public static String concatString(String arg0, String arg1, String arg2)
	{
		StringBuffer sb = new StringBuffer();
		return sb.append(arg0).append(arg1).append(arg2).toString();
	}
	
	/**
	 * 前方一致検索の検索文字列を取得します。。
	 * @param arg0 検索文字
	 * @return ワイルドカードをエスケープした検索文字 ＋ %
	 */
	public static String getPrefixSearchString(Object arg0)
	{
		if(arg0 == null)
		{
			return null;
		}
		return replaceLikeValue(arg0) + PERCENT;
	}
	
	/**
	 * 部分一致検索の検索文字列を取得します。
	 * @param arg0 検索文字
	 * @return % ＋ ワイルドカードをエスケープした検索文字 ＋ %
	 */
	public static String getPartSearchString(Object arg0)
	{
		if(arg0 == null)
		{
			return null;
		}
		return concatString(PERCENT, JZMModelCommon.replaceLikeValue(arg0), PERCENT);
	}

	/**
	 * 指定されたeoIDあいまい検索検索キーセットをSQL文の条件文に編集し、返却します。
	 * <BR>
	 * @param key_set 編集対象となる検索キーセット
	 * @param eo_id 検索条件となるeoID
	 * @return String 検索キーセットにあうSQL文の条件文を返します。
	 */
	public static String createSqlCondition(String key_set, String eo_id)
	{
		return JZMejbEoIdSearchKeySetEdit.createSqlCondition(key_set, eo_id);
	}

}