View Javadoc

1   package org.seasar.cubby.util;
2   
3   import java.io.UnsupportedEncodingException;
4   import java.net.URLEncoder;
5   
6   import org.seasar.framework.exception.IORuntimeException;
7   
8   /**
9    * パラメータ文字列を作成します。
10   * <p>
11   * パラメータ名、値ともURLエンコードされます。デフォルトのエンコードはUTF-8です。
12   * 
13   * <pre>
14   * QueryStringBuilder query = new QueryStringBuilder();
15   * query.addParam(&quot;p1&quot;, &quot;v1&quot;);
16   * query.addParam(&quot;p2&quot;, null);
17   * query.addParam(&quot;p3&quot;, new String[] { &quot;v2&quot;, &quot;v3&quot; });
18   * assertEquals(&quot;p1=v1&amp;p2=&amp;p3=v2&amp;p3=v3&quot;, query.toString());
19   * </pre>
20   * 
21   * @author agata
22   * 
23   */
24  public class QueryStringBuilder {
25  
26  	/**
27  	 * パラメータ文字列
28  	 */
29  	private StringBuilder sb = new StringBuilder();
30  
31  	/**
32  	 * エンコード
33  	 */
34  	private String encode = "UTF-8";
35  
36  	/**
37  	 * エンコードをセットします。
38  	 * 
39  	 * @param encode
40  	 */
41  	public void setEncode(final String encode) {
42  		this.encode = encode;
43  	}
44  
45  	/**
46  	 * パラメータを追加します。
47  	 * 
48  	 * @param name
49  	 *            パラメータ名
50  	 * @param value
51  	 *            値。配列の場合、要素数分パラメータが追加されます。
52  	 */
53  	public void addParam(final String name, final Object value) {
54  		if (value != null && value.getClass().isArray()) {
55  			final Object[] values = (Object[]) value;
56  			for (final Object v : values) {
57  				appendParams(name, v);
58  			}
59  		} else {
60  			appendParams(name, value);
61  		}
62  	}
63  
64  	/**
65  	 * パラメータ文字列を取得します。
66  	 */
67  	@Override
68  	public String toString() {
69  		return sb.toString();
70  	}
71  
72  	/**
73  	 * パラメータ文字列を追加します。
74  	 * 
75  	 * @param name
76  	 *            パラメータ名
77  	 * @param value
78  	 *            値
79  	 */
80  	private void appendParams(final String name, final Object value) {
81  		if (sb.length() > 0) {
82  			sb.append("&");
83  		}
84  		try {
85  			sb.append(URLEncoder.encode(name, encode));
86  			sb.append("=");
87  			if (value != null) {
88  				sb.append(URLEncoder.encode(value.toString(), encode));
89  			}
90  		} catch (final UnsupportedEncodingException e) {
91  			throw new IORuntimeException(e);
92  		}
93  	}
94  }