com.qcloud.cos.internal.CosServiceRequest Maven / Gradle / Ivy
package com.qcloud.cos.internal;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import com.qcloud.cos.event.ProgressListener;
public class CosServiceRequest implements Cloneable, ReadLimitInfo {
/**
* The optional progress listener for receiving updates about the progress of the request.
*/
private ProgressListener progressListener = ProgressListener.NOOP;
/**
* A map of custom header names to header values.
*/
private Map customRequestHeaders;
/**
* Custom query parameters for the request.
*/
private Map> customQueryParameters;
private final RequestClientOptions requestClientOptions = new RequestClientOptions();
/**
* Sets the optional progress listener for receiving updates about the progress of the request.
*
* @param progressListener
* The new progress listener.
*/
public void setGeneralProgressListener(ProgressListener progressListener) {
this.progressListener = progressListener == null ? ProgressListener.NOOP : progressListener;
}
/**
* Returns the optional progress listener for receiving updates about the progress of the
* request.
*
* @return the optional progress listener for receiving updates about the progress of the
* request.
*/
public ProgressListener getGeneralProgressListener() {
return progressListener;
}
/**
* Sets the optional progress listener for receiving updates about the progress of the request,
* and returns a reference to this object so that method calls can be chained together.
*
* @param progressListener
* The new progress listener.
* @return A reference to this updated object so that method calls can be chained together.
*/
public T withGeneralProgressListener(ProgressListener progressListener) {
setGeneralProgressListener(progressListener);
@SuppressWarnings("unchecked")
T t = (T) this;
return t;
}
/**
* Returns an immutable map of custom header names to header values.
*
* @return The immutable map of custom header names to header values.
*/
public Map getCustomRequestHeaders() {
if (customRequestHeaders == null) {
return null;
}
return Collections.unmodifiableMap(customRequestHeaders);
}
/**
* Put a new custom header to the map of custom header names to custom header values, and return
* the previous value if the header has already been set in this map.
*
* NOTE: Custom header values set via this method will overwrite any conflicting values coming
* from the request parameters.
*
* @param name
* The name of the header to add
* @param value
* The value of the header to add
* @return the previous value for the name if it was set, null otherwise
*/
public String putCustomRequestHeader(String name, String value) {
if (customRequestHeaders == null) {
customRequestHeaders = new HashMap();
}
if (name == null) {
throw new IllegalArgumentException("custom header key cann't be null");
}
if (value == null) {
throw new IllegalArgumentException("custom header value cann't be null");
}
return customRequestHeaders.put(name, value);
}
/**
* @return the immutable map of custom query parameters. The parameter value is modeled as a
* list of strings because multiple values can be specified for the same parameter name.
*/
public Map> getCustomQueryParameters() {
if (customQueryParameters == null) {
return null;
}
return Collections.unmodifiableMap(customQueryParameters);
}
/**
* Add a custom query parameter for the request. Since multiple values are allowed for the same
* query parameter, this method does NOT overwrite any existing parameter values in the request.
*
* @param name
* The name of the query parameter
* @param value
* The value of the query parameter. Only the parameter name will be added in the URI
* if the value is set to null. For example, putCustomQueryParameter("param", null)
* will be serialized to "?param", while putCustomQueryParameter("param", "") will be
* serialized to "?param=".
*/
public void putCustomQueryParameter(String name, String value) {
if (customQueryParameters == null) {
customQueryParameters = new HashMap>();
}
List paramList = customQueryParameters.get(name);
if (paramList == null) {
paramList = new LinkedList();
customQueryParameters.put(name, paramList);
}
paramList.add(value);
}
/**
* Gets the options stored with this request object. Intended for internal use only.
*/
public RequestClientOptions getRequestClientOptions() {
return requestClientOptions;
}
/**
* Copies the internal state of this base class to that of the target request.
*
* @return the target request
*/
protected final T copyBaseTo(T target) {
if (customRequestHeaders != null) {
for (Map.Entry e : customRequestHeaders.entrySet())
target.putCustomRequestHeader(e.getKey(), e.getValue());
}
if (customQueryParameters != null) {
for (Map.Entry> e : customQueryParameters.entrySet()) {
if (e.getValue() != null) {
for (String value : e.getValue()) {
target.putCustomQueryParameter(e.getKey(), value);
}
}
}
}
target.setGeneralProgressListener(progressListener);
requestClientOptions.copyTo(target.getRequestClientOptions());
return target;
}
@Override
public int getReadLimit() {
return requestClientOptions.getReadLimit();
}
}