package com.base.httpclient.core;
import java.io.File;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import android.util.Log;
import com.base.httpclient.core.ParameterList.Parameter;
/**
* Parameter map knows offers convenience methods for chaining add()s as well as
* URL encoding.
*
* @author David M. Chandler
*/
public class ParameterList extends ArrayList<Parameter> {
/**
*
*/
private static final long serialVersionUID = 1L;
public static abstract class Parameter {
public String name;
}
public static class StringParameter extends Parameter {
public String value;
public StringParameter(String name, String value) {
super();
if (name == null || value == null) {
throw new RuntimeException("args can not be null");
}
this.name = name;
this.value = value;
}
}
public static class InputStreamParameter extends Parameter {
public InputStream value;
public String fileName;
public InputStreamParameter(String name, InputStream value, String fileName) {
super();
if (name == null || value == null || fileName == null) {
throw new RuntimeException("args can not be null");
}
this.name = name;
this.value = value;
this.fileName = fileName;
}
}
public static class FileParameter extends Parameter {
public File value;
public FileParameter(String name, File value) {
super();
if (name == null || value == null) {
throw new RuntimeException("args can not be null");
}
this.name = name;
this.value = value;
}
}
public static class HeaderParameter extends Parameter {
public String value;
public HeaderParameter(String name, String value) {
super();
if (name == null || value == null) {
throw new RuntimeException("args can not be null");
}
this.name = name;
this.value = value;
}
}
/**
* Returns URL encoded data
*
* @return URL encoded String
*/
public String urlEncode() {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < size(); i++) {
Parameter param = get(i);
if (param instanceof StringParameter) {
StringParameter stringParam = (StringParameter) param;
if (i > 0) {
sb.append("&");
}
sb.append(stringParam.name);
sb.append("=");
try {
sb.append(URLEncoder.encode(stringParam.value, RequestHandler.UTF8));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
return sb.toString();
}
public String urlEncode(boolean isEncode) {
StringBuilder sb = new StringBuilder();
if (isEncode) {// 编码
for (int i = 0; i < size(); i++) {
Parameter param = get(i);
if (param instanceof StringParameter) {
StringParameter stringParam = (StringParameter) param;
if (i > 0) {
sb.append("&");
}
sb.append(stringParam.name);
sb.append("=");
try {
sb.append(URLEncoder.encode(stringParam.value, RequestHandler.UTF8));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
// return sb.toString().substring(1, sb.length());
return sb.toString();
} else {// 非编码
for (int i = 0; i < size(); i++) {
Parameter param = get(i);
if (param instanceof StringParameter) {
StringParameter stringParam = (StringParameter) param;
sb.append(stringParam.value);
}
}
return sb.toString();
}
}
/**
* Return a URL encoded byte array in UTF-8 charset.
*
* @return URL encoded bytes
*/
public byte[] urlEncodedBytes() {
byte[] bytes = null;
try {
bytes = urlEncode().getBytes(RequestHandler.UTF8);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return bytes;
}
public boolean hasMultiPart(){
for (int i = 0; i < size(); i++) {
Parameter param = get(i);
if((param instanceof InputStreamParameter)||(param instanceof FileParameter)){
return true;
}
}
return false;
}
public ArrayList<HeaderParameter> getHeaderParams() {
ArrayList<HeaderParameter> list = new ArrayList<HeaderParameter>();
for (int i = 0; i < size(); i++) {
Parameter param = get(i);
if (param instanceof HeaderParameter) {
list.add((HeaderParameter) param);
}
}
return list;
}
}