/////////////////////////////////////////////////////////////////
//Copyright (C) 2005 NTT CORPORATION.
//
//	共通関数クラス
//
//		変更履歴
//			2005.02.07  新規作成  梅原 浩司
//
//	機能
//
//	このクラスは共通関数のクラスです。
//
////////////////////////////////////////////////////////////////

package jp.co.ntt.lms.xmf.common;

import java.net.URLEncoder;
import java.util.Calendar;
import java.io.UnsupportedEncodingException;

/**
 *  共通関数クラス
 * 
 *  このクラスは共通関数のクラスです。
 * 
 *  @author 梅原 浩司
 *  @version 1.0
 */
public class CommonFunction {
	/**
	 * 引数で渡された文字列をURLエンコードし、エラーページへのURLを組み立てて返します
	 * @param strMessage メッセージ
	 * @param strDetail 詳細
	 * @param strReturnURL_o 戻りURL
	 * @return エラーページまでのURL
	 * @throws UnsupportedEncodingException
	 */
	public static String getParamErrURL( String strMessage, String strDetail, String strReturnURL_o )
		throws UnsupportedEncodingException
	{
		String strParam = "?";
		try{
			if( strMessage != null ) {
				strParam += "message=" + URLEncoder.encode(strMessage, "UTF-8" ) + "&";
			}
			if( strDetail != null ) {
				strParam += "detail=" + URLEncoder.encode(strDetail, "UTF-8" ) + "&";
			}
			if( strReturnURL_o != null ) {
				strParam += "returnURL=" + URLEncoder.encode(strReturnURL_o, "UTF-8" ) + "&";
			}
		} catch(UnsupportedEncodingException e) {
			throw e;
		}
		String strParamErrURL = "../Com/ComParamErr.vm" + strParam;

		return strParamErrURL;
	}


	/**
	 * 引数で渡された文字列をURLエンコードし、エラーページへのURLを組み立てて返します
	 * @param strMessage メッセージ
	 * @param strDetail 詳細
	 * @param isClose 閉じるボタン表示/非表示フラグ
	 * @return エラーページまでのURL
	 * @throws UnsupportedEncodingException
	 */
	public static String getParamErrURL( String strMessage, String strDetail, boolean isClose )
		throws UnsupportedEncodingException
	{
		String strParam = "?";
		try{
			if( strMessage != null ) {
				strParam += "message=" + URLEncoder.encode(strMessage, "UTF-8" ) + "&";
			}
			if( strDetail != null ) {
				strParam += "detail=" + URLEncoder.encode(strDetail, "UTF-8" ) + "&";
			}
		} catch(UnsupportedEncodingException e) {
			throw e;	
		}
		if( isClose ) {
			strParam += "close=on";
		}

		String strParamErrURL = "../Com/ComParamErr.vm" + strParam + "&";

		return strParamErrURL;
	}

	/**
	 * 文字エンコードを"ISO-8859-1"(ユニコード文字)から"Windows-31J"に変換します
	 * @param strTar 変換する文字列
	 * @return String 変換した文字列
	 */
	public static String encodeSJIS( String strTar ) {

		if( strTar == null ) {
			return "";
		}

		try {
			return new String( strTar.getBytes( "8859_1" ), "Windows-31J" );
		}
		catch( java.io.UnsupportedEncodingException ue ) {
		}

		// 例外発生時は元の文字列を返す
		return strTar;
	}

	/**
	 * nullをゼロスペースに変換します
	 * @param strValue 変換する文字列
	 * @return String 変換した文字列
	 */
	public static String null2blank( String strValue ) {
		if( strValue == null ) {
			return "";
		}
		else {
			return strValue;
		}
	}

	/**
	 * 引数がゼロスペースなら今日の日付に変換します
	 * @param strValue 変換する文字列
	 * @return String 変換した文字列
	 */
	public static String blank2today( String strValue ) {

		if(strValue.equals(""))
		{
			Calendar rightNow	= Calendar.getInstance();
			String strYYYY = String.valueOf(rightNow.get(Calendar.YEAR));
			String strMM   = String.valueOf(rightNow.get(Calendar.MONTH) + 1);
			String strDD   = String.valueOf(rightNow.get(Calendar.DATE));

			if( strYYYY.length() == 1 ) {
				strYYYY = "0" + strYYYY;
			}
			if( strMM.length() == 1 ) {
				strMM = "0" + strMM;
			}
			if( strDD.length() == 1 ) {
				strDD = "0" + strDD;
			}
			return strYYYY + "/" + strMM + "/" + strDD;
		}
		return strValue;
	}

	/**************************************************************************
	 * 
	 * 文字列置換<BR>
	 * 		指定された str 内にある全ての strTargetString を strChangeString に置換<BR>
	 * 		した結果、生成される新しい文字列を返します。<BR>
	 * 
	 * @param 		str					置換前の文字列<BR>
	 * @param 		strTargetString		str内の変換対象の文字列<BR>
	 * @param 		strChangeString		変更文字列<BR>
	 * 
	 * @return 		String				置換後の文字列<BR>
	 * 
	 **************************************************************************/
	public static	String replace(String str, String strTargetString, String strChangeString)
	{
		try
		{
			int intFromIndex = 0;		// 検索開始インデックスの定義
			int iLoop = 0;				// ループインデックスの定義

			String strRetString = str;	// 返却文字列

			for (;;)
			{
				// 変換対象文字列の位置を取得する
				int intIndex = strRetString.indexOf(strTargetString,intFromIndex);

				// 該当する文字列が見つからなければループを抜ける
				if (intIndex == -1)
				{
					break;
				}

				String strWork;

				// 指定された str 内に見つけた変換対象文字列の前までの部分文字列を取り出す
				strWork = strRetString.substring(intFromIndex,intIndex);

				// 取り出した文字列に変換後の文字列 strChangeString を連結し、さらに残りの部分を連結する
				strWork = strWork + strChangeString +
					strRetString.substring(intIndex+strTargetString.length());

				strRetString = strWork;
				break;
			}
			return( strRetString );
		}
		//---------------------------------------------------------------------
		// エラー処理
		//---------------------------------------------------------------------
		catch( Exception Ex )
		{
			// 例外発生時は元の文字列を返す
			return str;
		}
	}
}
