/////////////////////////////////////////////////////////////////
//Copyright (C) 2005 NTT CORPORATION.
//
//	URL文字列操作 Velcity Toolクラス
//
//		変更履歴
//			2005.02.19  新規作成  村上 靖征
//
//	機能
//
//	このクラスはURL文字列の操作を行うVelocity Toolクラスです。
//
////////////////////////////////////////////////////////////////

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

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

import jp.co.ntt.lms.xmo.Environment;

/**
 * URL文字列操作 Velocity Toolクラス
 * 
 * このクラスはURL文字列の操作を行う Velocity Toolクラスです。
 * 
 * @author 村上 靖征
 * @version 1.0
 */
public class URLTool
{

	/**
	 * 指定した文字列をデコードする。
	 * 
	 * @param strURL 文字列
	 * @return 変換後の文字列
	 * @throws UnsupportedEncodingException
	 */
	public String decodeURL(String strURL) throws UnsupportedEncodingException
	{
		// 初期メニューをURLデコードします

		strURL = URLDecoder.decode(strURL, "UTF-8");

		return strURL;
	}

	/**
	 * URLエンコードを行います。
	 * 
	 * @param strURL
	 *            変換対象文字列
	 * @return String URLエンコード文字列
	 */
	public String encodeURL(String strURL) throws UnsupportedEncodingException
	{
		// 初期メニューをURLエンコードします
		strURL = URLEncoder.encode(new String(strURL.getBytes("8859_1"),
				"Windows-31J"), "UTF-8");

		return strURL;
	}

	/**
	 * 指定した文字列を UTF-8文字列でURLエンコードする。
	 * 
	 * @param strURL 変換対象文字列
	 * @return 変換後の文字列
	 * @throws UnsupportedEncodingException
	 */
	public String encodeURLUTF8(String strURL)
			throws UnsupportedEncodingException
	{
		String result = URLEncoder.encode(strURL, "UTF-8");

		return result;
	}

	/**
	 * URLエンコードを行います。
	 * 
	 * @param strURL
	 *            変換対象文字列
	 * @return String URLエンコード文字列
	 */
	public String iniMenuUrlEncode(String strURL)
			throws UnsupportedEncodingException
	{
		// 初期メニューをURLエンコードします
		strURL = URLEncoder.encode(new String(strURL.getBytes("8859_1"),
				"UTF-8"), "UTF-8");

		return strURL;
	}

	/**
	 * URLエンコードを行います。
	 * 
	 * @param strURL
	 *            変換対象文字列
	 * @param charsetName
	 *            変換対象文字列の複合化に利用する文字セット
	 * @param enc
	 *            変換後の文字エンコーディング
	 * @return URLエンコード文字列
	 * @throws UnsupportedEncodingException
	 */
	public String encodeURL(String strURL, String charsetName, String enc)
			throws UnsupportedEncodingException
	{
		return URLEncoder.encode(new String(strURL.getBytes("8859_1"),
				charsetName), enc);
	}

	/**
	 * iniファイルのServerURLを取得します。
	 */
	public String getServerURL(String iniSERVER_URL, String tree_gif_icon_path)
	{
		// XMS2サーバのURLの取得
		Environment objEnv;
		String strServerURL;
		try
		{
			objEnv = new Environment();
			strServerURL = objEnv.getProperty(iniSERVER_URL);
			strServerURL = strServerURL + tree_gif_icon_path;
			return strServerURL;
		}
		catch (Exception e)
		{
			return "";
		}
	}

	/**
	 * 文字列を指定の文字セットで再生成する LoLogCommon_inc.charEncodeの移植
	 * 
	 * @param str
	 * @param charsetName
	 * @return 再生成された文字列
	 */
	public String reconstructString(String str, String charsetName)
	{
		if (str == null) { return str; }

		String rslt = "";
		try
		{
			rslt = new String(str.getBytes("ISO-8859-1"), charsetName);
		}
		catch (UnsupportedEncodingException e)
		{
			rslt = "";
		}
		return rslt;
	}

	/**
	 * 文字列を文字セット"Windows-31J"で再生成する LoLogCommon_inc.charEncodeの移植
	 * 
	 * @param str
	 * @return 再生成された文字列
	 */
	public String reconstructString(String str)
	{
		return reconstructString(str, "Windows-31J");
	}
	
	/**
	 * クエリパラメタの追加・変更
	 * 
	 * @param url
	 * @param key
	 * @param value
	 * @return
	 */
	public String addOrReplaceParameter(String url, String key, String value) {
		if (url.indexOf(key + "=") == -1) {
			url += "&" + key + "=" + value;
		} else {
			url = url.replaceAll(key + "=\\w*", key + "=" + value);
		}

		return url;
	}
}