/*********************************************************************
*	All Rights reserved,Copyright c Fujitsu, 2011
**********************************************************************
*＜プログラム内容＞
*	システム名		：プロジェクト共通
*	モジュール名	：JACejbEditString
*	ソースファイル名：JACejbEditString.java
*	作成者			：富士通
*	日付			：2011年06月13日
*＜機能概要＞
*	文字列を編集する共通処理を提供するクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/06/13	富士通		新規作成
*
**********************************************************************/
package eo.ejb.common.edit;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.common.util.JPCEditString;

/**
 * 文字列を編集する共通処理を提供するクラスです。<p>
 * <br>
 * @author 富士通
 */
public class JACejbEditString
{
	/**
	 * 半角空白充填処理<br>
	 * 指定された桁数まで半角スペースを充填する。
	 * <br>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param inEditString 編集対象の文字列
	 * @param inLength 文字列充填長
	 * @param inEditRight 左右判断フラグ true：右埋め、false：左埋め
	 * @return 編集結果
	 */
	public static String fillHalfSpace(CAANMsg inMsg, AgentDispatchContext inContext,
			Object inEditString, Object inLength, Object inEditRight)
	{
		// パラメータの取得
		String sEditString = inEditString.toString();
		int iLength = Integer.valueOf(inLength.toString());
		boolean bEditRight = Boolean.valueOf(inEditRight.toString());

		// JPCEditStringクラスのfillHalfSpaceメソッドを呼び出す。
		String sRet = JPCEditString.fillHalfSpace(sEditString, iLength, bEditRight);

		// JPCEditStringクラスのfillHalfSpaceメソッドの編集結果を返却する。
		return sRet;
	}

	/**
	 * NULL文字半角空白変換処理<br>
	 * NULLの場合、指定した桁数の半角スペースに変換する。
	 * <br>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param inEditString 編集対象の文字列
	 * @param inLength 文字列充填長
	 * @return 指定した桁数の半角スペースまたは編集対象文字列
	 */
	public static String nullToHalfSpace(CAANMsg inMsg, AgentDispatchContext inContext,
			Object inEditString, Object inLength)
	{
		// パラメータの編集対象文字列がnull以外の場合、パラメータの編集対象文字列を返却する。
		if (inEditString != null)
		{
			return (String)inEditString;
		}
		
		// パラメータの編集対象文字列がnullの場合、下記の処理を行う。
		// @同クラスのfillHalfSpaceメソッドを呼び出す。
		String sRet = fillHalfSpace(inMsg, inContext, " ", inLength, "true");
		
		// A同クラスのfillHalfSpaceメソッドの編集結果を返却する。
		return sRet;
	}

	/**
	 * 文字置換処理<br>
	 * 指定された文字列の指定された位置の文字を他の文字に置換する。
	 * <br>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param inEditString 編集対象文字列
	 * @param inEditStart 編集先頭位置(先頭は0を指定)
	 * @param inEditLength 編集文字数
	 * @param inSetChar 置換文字
	 * @return 編集結果
	 */
	public static String replaceMoji(CAANMsg inMsg, AgentDispatchContext inContext,
			Object inEditString, Object inEditStart, Object inEditLength,
			Object inSetChar)
	{
		// パラメータの取得
		String sEditString = (String)inEditString;
		int iEditStart = Integer.valueOf((String)inEditStart);
		int iEditLength = Integer.valueOf((String)inEditLength);
		String sSetChar = (String)inSetChar;
		
		// パラメータの編集対象文字列がnullの場合、空文字を返却する。
		if (sEditString == null)
		{
			return "";
		}

		// パラメータの編集文字数が0の場合、パラメータの編集対象文字列を返却する。
		if (iEditLength == 0)
		{
			return sEditString;
		}

		// パラメータの編集先頭位置がパラメータの編集対象文字列の長さ以上の場合、
		// パラメータの編集対象文字列を返却する。
		if (iEditStart >= sEditString.length())
		{
			return sEditString;
		}

		// パラメータの編集先頭位置と編集文字数を加算した値が
		// パラメータの編集対象文字列の長さ以上の場合、
		// パラメータの編集対象文字列を返却する。
		if ((iEditStart + iEditLength) > sEditString.length())
		{
			return sEditString;
		}

		// パラメータの置換文字と編集文字数から置換文字列を作成する。
		StringBuffer sbReplaceChars = new StringBuffer();
		for (int i = 0; i < iEditLength; i++)
		{
			sbReplaceChars.append(sSetChar);
		}

		// StringBuffer.replace処理を用いて編集対象文字列を置換する。
		StringBuffer sb = new StringBuffer(sEditString);
		int iStart = iEditStart;
		int iEnd = iEditStart + iEditLength;
		sb.replace(iStart, iEnd, sbReplaceChars.toString());
		String sRet = sb.toString();

		// 編集した結果を返却する。
		return sRet;
	}
}
