package com.keju.maomao.internet;
import java.io.File;
import java.net.URLEncoder;
import java.util.List;
/**
* post 请求参数
* @author Zhoujun
*/
@SuppressWarnings("unchecked")
public class PostParameter implements java.io.Serializable, Comparable {
String name;
String value;
private File file = null;
private static final long serialVersionUID = -8708108746980739212L;
public PostParameter(String name, String value) {
this.name = name;
this.value = value;
}
public PostParameter(String name, double value) {
this.name = name;
this.value = String.valueOf(value);
}
public PostParameter(String name, int value) {
this.name = name;
this.value = String.valueOf(value);
}
public PostParameter(String name, File file) {
this.name = name;
this.file = file;
}
public String getName(){
return name;
}
public String getValue(){
return value;
}
public File getFile() {
return file;
}
public boolean isFile(){
return null != file;
}
private static final String JPEG = "image/jpeg";
private static final String GIF = "image/gif";
private static final String PNG = "image/png";
private static final String OCTET = "application/octet-stream";
/**
*
* @return content-type
*/
public String getContentType() {
if (!isFile()) {
throw new IllegalStateException("not a file");
}
String contentType;
String extensions = file.getName();
int index = extensions.lastIndexOf(".");
if (-1 == index) {
// no extension
contentType = OCTET;
} else {
extensions = extensions.substring(extensions.lastIndexOf(".") + 1).toLowerCase();
if (extensions.length() == 3) {
if ("gif".equals(extensions)) {
contentType = GIF;
} else if ("png".equals(extensions)) {
contentType = PNG;
} else if ("jpg".equals(extensions)) {
contentType = JPEG;
} else {
contentType = OCTET;
}
} else if (extensions.length() == 4) {
if ("jpeg".equals(extensions)) {
contentType = JPEG;
} else {
contentType = OCTET;
}
} else {
contentType = OCTET;
}
}
return contentType;
}
public static boolean containsFile(PostParameter[] params) {
boolean containsFile = false;
if(null == params){
return false;
}
for (PostParameter param : params) {
if (param.isFile()) {
containsFile = true;
break;
}
}
return containsFile;
}
/*package*/ static boolean containsFile(List<PostParameter> params) {
boolean containsFile = false;
for (PostParameter param : params) {
if (param.isFile()) {
containsFile = true;
break;
}
}
return containsFile;
}
public static PostParameter[] getParameterArray(String name, String value) {
return new PostParameter[]{new PostParameter(name,value)};
}
public static PostParameter[] getParameterArray(String name, int value) {
return getParameterArray(name,String.valueOf(value));
}
public static PostParameter[] getParameterArray(String name1, String value1
, String name2, String value2) {
return new PostParameter[]{new PostParameter(name1, value1)
, new PostParameter(name2, value2)};
}
public static PostParameter[] getParameterArray(String name1, int value1
, String name2, int value2) {
return getParameterArray(name1,String.valueOf(value1),name2,String.valueOf(value2));
}
@Override
public int hashCode() {
int result = name.hashCode();
result = 31 * result + value.hashCode();
result = 31 * result + (file != null ? file.hashCode() : 0);
return result;
}
@Override public boolean equals(Object obj) {
if (null == obj) {
return false;
}
if (this == obj) {
return true;
}
if (obj instanceof PostParameter) {
PostParameter that = (PostParameter) obj;
if (file != null ? !file.equals(that.file) : that.file != null)
return false;
return this.name.equals(that.name) &&
this.value.equals(that.value);
}
return false;
}
@Override
public String toString() {
return "PostParameter{" +
"name='" + name + '\'' +
", value='" + value + '\'' +
", file=" + file +
'}';
}
public int compareTo(Object o) {
int compared;
PostParameter that = (PostParameter) o;
compared = name.compareTo(that.name);
if (0 == compared) {
compared = value.compareTo(that.value);
}
return compared;
}
public static String encodeParameters(PostParameter[] httpParams) {
if (null == httpParams) {
return "";
}
StringBuffer buf = new StringBuffer();
for (int j = 0; j < httpParams.length; j++) {
if (httpParams[j].isFile()) {
throw new IllegalArgumentException("parameter [" + httpParams[j].name + "]should be text");
}
if (j != 0) {
buf.append("&");
}
try {
buf.append(URLEncoder.encode(httpParams[j].name, "UTF-8"))
.append("=").append(URLEncoder.encode(httpParams[j].value, "UTF-8"));
} catch (java.io.UnsupportedEncodingException neverHappen) {
}
}
return buf.toString();
}
}