package org.jboss.seam.ui.util;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.faces.component.UIParameter;
public class UrlBuilder
{
private static final String URL_ENCODING = "UTF-8";
private String url;
private String fragment;
private String characterEncoding;
private boolean urlEncodeParameters = true;
private Map<String, String> parameters;
protected UrlBuilder(String fragment, String characterEncoding)
{
this.fragment = fragment;
parameters = new LinkedHashMap<String, String>();
this.characterEncoding = characterEncoding;
}
public UrlBuilder(String fragment, String characterEncoding, boolean urlEncodeParameters)
{
this(fragment, characterEncoding);
this.urlEncodeParameters = urlEncodeParameters;
}
public UrlBuilder(String url, String fragment, String characterEncoding)
{
this(fragment, characterEncoding);
setUrl(url);
}
public UrlBuilder(String url, String fragment, String characterEncoding, boolean urlEncodeParameters)
{
this(url, fragment, characterEncoding);
this.urlEncodeParameters = urlEncodeParameters;
}
protected void setUrl(String url)
{
if (url == null)
{
throw new NullPointerException("url must not be null");
}
this.url = url;
}
protected String urlEncode(String value) throws UnsupportedEncodingException
{
return characterEncoding == null ? URLEncoder.encode(value, URL_ENCODING) : URLEncoder.encode(value,
characterEncoding);
}
protected String getFragment()
{
if (fragment != null && !"".equals(fragment))
{
return "#" + fragment;
}
else
{
return "";
}
}
public String getEncodedUrl()
{
String params = getParametersAsString();
if (!"".equals(params) && !url.contains("?"))
{
params = "?" + params.substring(1);
}
return url + params + getFragment();
}
protected String getParametersAsString()
{
String params = "";
for (String key : parameters.keySet())
{
params += "&" + key + "=" + parameters.get(key);
}
return params;
}
protected Map<String, String> getParameters()
{
return parameters;
}
public void addParameter(String name, String value) throws UnsupportedEncodingException
{
parameters.put(name, urlEncodeParameters ? urlEncode(value) : value);
}
public void addParameter(UIParameter parameter) throws UnsupportedEncodingException
{
String value = parameter.getValue() == null ? "" : parameter.getValue().toString();
String name = parameter.getName();
addParameter(name, value);
}
}