package org.displaytag.util;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.UnhandledException;
/**
* @author fgiust
* @version $Revision$ ($Author$)
*/
public class PostHref implements Href
{
/**
* D1597A17A6.
*/
private static final long serialVersionUID = 899149338534L;
private Href parent;
private String form;
public PostHref(Href parent, String form)
{
this.parent = parent;
this.form = form;
}
/**
* @param name
* @param value
* @return
* @see org.displaytag.util.Href#addParameter(java.lang.String, java.lang.Object)
*/
public Href addParameter(String name, Object value)
{
this.parent.addParameter(name, value);
return this;
}
/**
* @param name
* @param value
* @return
* @see org.displaytag.util.Href#addParameter(java.lang.String, int)
*/
public Href addParameter(String name, int value)
{
this.parent.addParameter(name, value);
return this;
}
/**
* @param parametersMap
* @see org.displaytag.util.Href#addParameterMap(java.util.Map)
*/
public void addParameterMap(Map<String, Object> parametersMap)
{
this.parent.addParameterMap(parametersMap);
}
/**
* @param object
* @return
* @see org.displaytag.util.Href#equals(java.lang.Object)
*/
public boolean equals(Object object)
{
return this.parent.equals(object);
}
/**
* @return
* @see org.displaytag.util.Href#getAnchor()
*/
public String getAnchor()
{
return this.parent.getAnchor();
}
/**
* @return
* @see org.displaytag.util.Href#getBaseUrl()
*/
public String getBaseUrl()
{
return this.parent.getBaseUrl();
}
/**
* @return
* @see org.displaytag.util.Href#getParameterMap()
*/
public Map<String, Object> getParameterMap()
{
return this.parent.getParameterMap();
}
/**
* @param name
* @see org.displaytag.util.Href#removeParameter(java.lang.String)
*/
public void removeParameter(String name)
{
this.parent.removeParameter(name);
}
/**
* @param name
* @see org.displaytag.util.Href#setAnchor(java.lang.String)
*/
public void setAnchor(String name)
{
this.parent.setAnchor(name);
}
/**
* @param url
* @see org.displaytag.util.Href#setFullUrl(java.lang.String)
*/
public void setFullUrl(String url)
{
this.parent.setFullUrl(url);
}
/**
* @param parametersMap
* @see org.displaytag.util.Href#setParameterMap(java.util.Map)
*/
public void setParameterMap(Map<String, Object> parametersMap)
{
this.parent.setParameterMap(parametersMap);
}
/**
* @return
* @see org.displaytag.util.Href#toString()
*/
public String toString()
{
StringBuffer buffer = new StringBuffer(30);
buffer.append("javascript:displaytagform('");
buffer.append(this.form);
buffer.append("',[");
Map<String, Object> parameters = getParameterMap();
Set parameterSet = parameters.entrySet();
Iterator<Map.Entry<Object, Object>> iterator = parameterSet.iterator();
while (iterator.hasNext())
{
// {f:'param1',v:'1'},
Map.Entry<Object, Object> entry = iterator.next();
Object key = entry.getKey();
Object value = entry.getValue();
buffer.append("{f:'");
buffer.append(esc(key));
buffer.append("',v:");
if (value != null && value.getClass().isArray())
{
Object[] values = (Object[]) value;
buffer.append("[");
for (int i = 0; i < values.length; i++)
{
if (i > 0)
{
buffer.append(",");
}
buffer.append("'");
buffer.append(esc(values[i]));
buffer.append("'");
}
buffer.append("]");
}
else
{
buffer.append("'");
buffer.append(esc(value));
buffer.append("'");
}
buffer.append("}");
if (iterator.hasNext())
{
buffer.append(",");
}
}
buffer.append("])");
return buffer.toString();
}
private String esc(Object value)
{
try
{
String param = URLDecoder.decode(ObjectUtils.toString(value), "utf-8");
param = StringUtils.replace(param, "'", "\\'");
param = StringUtils.replace(param, "\"", "%22");
return param;
}
catch (UnsupportedEncodingException e)
{
throw new UnhandledException(e);
}
}
/**
* @see java.lang.Object#clone()
*/
public Object clone()
{
final PostHref href;
try
{
href = (PostHref) super.clone();
}
catch (CloneNotSupportedException e)
{
throw new UnhandledException(e);
}
href.parent = (Href) parent.clone();
return href;
}
}