/* * Copyright (c) 2013. wyouflf (wyouflf@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.lidroid.xutils.http; import android.text.TextUtils; import com.lidroid.xutils.http.client.entity.BodyParamsEntity; import com.lidroid.xutils.http.client.multipart.HttpMultipartMode; import com.lidroid.xutils.http.client.multipart.MultipartEntity; import com.lidroid.xutils.http.client.multipart.content.ContentBody; import com.lidroid.xutils.http.client.multipart.content.FileBody; import com.lidroid.xutils.http.client.multipart.content.InputStreamBody; import com.lidroid.xutils.http.client.multipart.content.StringBody; import com.lidroid.xutils.util.LogUtils; import com.lidroid.xutils.task.Priority; import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; import org.apache.http.message.BasicHeader; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; import java.io.File; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.concurrent.ConcurrentHashMap; public class RequestParams { private String charset = HTTP.UTF_8; private List<HeaderItem> headers; private List<NameValuePair> queryStringParams; private HttpEntity bodyEntity; private List<NameValuePair> bodyParams; private HashMap<String, ContentBody> fileParams; private Priority priority; public RequestParams() { } public RequestParams(String charset) { if (!TextUtils.isEmpty(charset)) { this.charset = charset; } } public Priority getPriority() { return priority; } public void setPriority(Priority priority) { this.priority = priority; } public String getCharset() { return charset; } public void setContentType(String contentType) { this.setHeader("Content-Type", contentType); } /** * Adds a header to this message. The header will be appended to the end of the list. * * @param header */ public void addHeader(Header header) { if (this.headers == null) { this.headers = new ArrayList<HeaderItem>(); } this.headers.add(new HeaderItem(header)); } /** * Adds a header to this message. The header will be appended to the end of the list. * * @param name * @param value */ public void addHeader(String name, String value) { if (this.headers == null) { this.headers = new ArrayList<HeaderItem>(); } this.headers.add(new HeaderItem(name, value)); } /** * Adds all the headers to this message. * * @param headers */ public void addHeaders(List<Header> headers) { if (this.headers == null) { this.headers = new ArrayList<HeaderItem>(); } for (Header header : headers) { this.headers.add(new HeaderItem(header)); } } /** * Overwrites the first header with the same name. * The new header will be appended to the end of the list, if no header with the given name can be found. * * @param header */ public void setHeader(Header header) { if (this.headers == null) { this.headers = new ArrayList<HeaderItem>(); } this.headers.add(new HeaderItem(header, true)); } /** * Overwrites the first header with the same name. * The new header will be appended to the end of the list, if no header with the given name can be found. * * @param name * @param value */ public void setHeader(String name, String value) { if (this.headers == null) { this.headers = new ArrayList<HeaderItem>(); } this.headers.add(new HeaderItem(name, value, true)); } /** * Overwrites all the headers in the message. * * @param headers */ public void setHeaders(List<Header> headers) { if (this.headers == null) { this.headers = new ArrayList<HeaderItem>(); } for (Header header : headers) { this.headers.add(new HeaderItem(header, true)); } } public void addQueryStringParameter(String name, String value) { if (queryStringParams == null) { queryStringParams = new ArrayList<NameValuePair>(); } queryStringParams.add(new BasicNameValuePair(name, value)); } public void addQueryStringParameter(NameValuePair nameValuePair) { if (queryStringParams == null) { queryStringParams = new ArrayList<NameValuePair>(); } queryStringParams.add(nameValuePair); } public void addQueryStringParameter(List<NameValuePair> nameValuePairs) { if (queryStringParams == null) { queryStringParams = new ArrayList<NameValuePair>(); } if (nameValuePairs != null && nameValuePairs.size() > 0) { for (NameValuePair pair : nameValuePairs) { queryStringParams.add(pair); } } } public void addBodyParameter(String name, String value) { if (bodyParams == null) { bodyParams = new ArrayList<NameValuePair>(); } bodyParams.add(new BasicNameValuePair(name, value)); } public void addBodyParameter(NameValuePair nameValuePair) { if (bodyParams == null) { bodyParams = new ArrayList<NameValuePair>(); } bodyParams.add(nameValuePair); } public void addBodyParameter(List<NameValuePair> nameValuePairs) { if (bodyParams == null) { bodyParams = new ArrayList<NameValuePair>(); } if (nameValuePairs != null && nameValuePairs.size() > 0) { for (NameValuePair pair : nameValuePairs) { bodyParams.add(pair); } } } public void addBodyParameter(String key, File file) { if (fileParams == null) { fileParams = new HashMap<String, ContentBody>(); } fileParams.put(key, new FileBody(file)); } public void addBodyParameter(String key, File file, String mimeType) { if (fileParams == null) { fileParams = new HashMap<String, ContentBody>(); } fileParams.put(key, new FileBody(file, mimeType)); } public void addBodyParameter(String key, File file, String mimeType, String charset) { if (fileParams == null) { fileParams = new HashMap<String, ContentBody>(); } fileParams.put(key, new FileBody(file, mimeType, charset)); } public void addBodyParameter(String key, File file, String fileName, String mimeType, String charset) { if (fileParams == null) { fileParams = new HashMap<String, ContentBody>(); } fileParams.put(key, new FileBody(file, fileName, mimeType, charset)); } public void addBodyParameter(String key, InputStream stream, long length) { if (fileParams == null) { fileParams = new HashMap<String, ContentBody>(); } fileParams.put(key, new InputStreamBody(stream, length)); } public void addBodyParameter(String key, InputStream stream, long length, String fileName) { if (fileParams == null) { fileParams = new HashMap<String, ContentBody>(); } fileParams.put(key, new InputStreamBody(stream, length, fileName)); } public void addBodyParameter(String key, InputStream stream, long length, String fileName, String mimeType) { if (fileParams == null) { fileParams = new HashMap<String, ContentBody>(); } fileParams.put(key, new InputStreamBody(stream, length, fileName, mimeType)); } public void setBodyEntity(HttpEntity bodyEntity) { this.bodyEntity = bodyEntity; if (bodyParams != null) { bodyParams.clear(); bodyParams = null; } if (fileParams != null) { fileParams.clear(); fileParams = null; } } /** * Returns an HttpEntity containing all request parameters */ public HttpEntity getEntity() { if (bodyEntity != null) { return bodyEntity; } HttpEntity result = null; if (fileParams != null && !fileParams.isEmpty()) { MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.STRICT, null, Charset.forName(charset)); if (bodyParams != null && !bodyParams.isEmpty()) { for (NameValuePair param : bodyParams) { try { multipartEntity.addPart(param.getName(), new StringBody(param.getValue())); } catch (UnsupportedEncodingException e) { LogUtils.e(e.getMessage(), e); } } } for (ConcurrentHashMap.Entry<String, ContentBody> entry : fileParams.entrySet()) { multipartEntity.addPart(entry.getKey(), entry.getValue()); } result = multipartEntity; } else if (bodyParams != null && !bodyParams.isEmpty()) { result = new BodyParamsEntity(bodyParams, charset); } return result; } public List<NameValuePair> getQueryStringParams() { return queryStringParams; } public List<HeaderItem> getHeaders() { return headers; } public class HeaderItem { public final boolean overwrite; public final Header header; public HeaderItem(Header header) { this.overwrite = false; this.header = header; } public HeaderItem(Header header, boolean overwrite) { this.overwrite = overwrite; this.header = header; } public HeaderItem(String name, String value) { this.overwrite = false; this.header = new BasicHeader(name, value); } public HeaderItem(String name, String value, boolean overwrite) { this.overwrite = overwrite; this.header = new BasicHeader(name, value); } } }