/*
 * Copyright (C) 2005-2006 Kouji Sugisawa. All rights reserved.
 */

package jp.sourceforge.livez.util;

import java.io.UnsupportedEncodingException;

import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.net.URLCodec;

import jp.sourceforge.livez.lang.CharEncoding;

/**
 * HTML 形式を符号化/復号化する為のユーティリティクラスです。
 * 
 * @author 杉澤 浩二
 */
public final class URLUtils {

	/**
	 * インスタンス化できない事を強制します。
	 */
	private URLUtils() {}

	/**
	 * x-www-form-urlencoded 文字列を復号化します。
	 * シフトJISの符号化方式を使用して、「%xy」の形式の連続シーケンスが表す文字を決定します。
	 * 
	 * @param s 復号化対象の文字列
	 * @return 新しく復号化された文字列
	 * @throws IllegalArgumentException
	 */
	public static final String decode(final String s) throws IllegalArgumentException {
		if (s == null)
			return null;

		// org.apache.commons.httpclient.util.URIUtil#decode でも可
		URLCodec codec = new URLCodec();
		try {
			return codec.decode(s, CharEncoding.SHIFT_JIS);
		} catch (UnsupportedEncodingException e) {
			throw new RuntimeException(e.getMessage(), e);
		} catch (DecoderException e) {
			throw new IllegalArgumentException(e.getMessage(), e);
		}
	}

	/**
	 * 文字列を application/x-www-form-urlencoded 形式に変換します。
	 * このメソッドは、シフトJISの符号化方式を符号化方式として使用して、例外を発生されることなく処理します。
	 * 
	 * @param s 変換対象の文字列
	 * @return 変換後の文字列
	 */
	public static final String encode(final String s) {
		if (s == null)
			return null;

		// org.apache.commons.httpclient.util.URIUtil#encode でも可
		URLCodec codec = new URLCodec();
		try {
			return codec.encode(s, CharEncoding.SHIFT_JIS);
		} catch (UnsupportedEncodingException e) {
			throw new RuntimeException(e.getMessage(), e);
		}
	}

}
