package com.bao.lc.common;
import java.net.URI;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.http.NameValuePair;
import org.apache.http.client.utils.URLEncodedUtils;
public class URI2NameBuilder implements Builder<String>
{
private static final String DEFAULT_DELIM = "_";
private URI uri;
private String uriString;
private Set<String> paramNameSet = null;
private String encoding = null;
private String delim = null;
private boolean autoClear = true;
public URI2NameBuilder()
{
reset();
}
private void reset()
{
if(autoClear)
{
clear();
}
uri = null;
uriString = null;
paramNameSet = null;
encoding = "UTF-8";
delim = DEFAULT_DELIM;
autoClear = true;
}
private URI getURI()
{
if(uri != null)
{
return uri;
}
if(uriString != null)
{
return URI.create(uriString);
}
return null;
}
public URI2NameBuilder uri(URI uri)
{
this.uri = uri;
return this;
}
public URI2NameBuilder uriStr(String uriString)
{
this.uriString = uriString;
return this;
}
public URI2NameBuilder encoding(String encoding)
{
this.encoding = encoding;
return this;
}
public URI2NameBuilder delim(String delim)
{
this.delim = delim;
return this;
}
public URI2NameBuilder addParamName(String paramName)
{
if(paramNameSet == null)
{
paramNameSet = new HashSet<String>();
}
paramNameSet.add(paramName);
return this;
}
public void clear()
{
if(paramNameSet != null)
{
paramNameSet.clear();
}
}
public String build()
{
String result = null;
try
{
URI targetURI = getURI();
if(targetURI == null)
{
throw new IllegalArgumentException("Target URI is null");
}
StringBuilder sb = new StringBuilder();
// Path part
String rawPath = targetURI.getRawPath();
if(rawPath != null && !rawPath.isEmpty())
{
int lastSlashIndex = rawPath.lastIndexOf('/');
if(lastSlashIndex >= 0 && (lastSlashIndex < rawPath.length() - 1))
{
sb.append(rawPath.substring(lastSlashIndex + 1));
}
}
// Query part
if(paramNameSet != null && !paramNameSet.isEmpty())
{
List<NameValuePair> queryList = URLEncodedUtils.parse(targetURI, encoding);
for(NameValuePair entry : queryList)
{
String name = entry.getName();
if(paramNameSet.contains(name))
{
if(sb.length() > 0)
{
sb.append(delim);
}
sb.append(entry.getValue());
}
}
}
if(sb.length() == 0)
{
sb.append("default");
}
sb.append(".html");
result = sb.toString();
}
finally
{
reset();
}
return result;
}
}