com.ksyun.ks3.service.request.ListObjectVersionsRequest Maven / Gradle / Ivy
package com.ksyun.ks3.service.request;
import com.ksyun.ks3.http.HttpMethod;
import com.ksyun.ks3.http.Request;
import com.ksyun.ks3.utils.StringUtils;
import static com.ksyun.ks3.exception.client.ClientIllegalArgumentExceptionGenerator.between;
import static com.ksyun.ks3.exception.client.ClientIllegalArgumentExceptionGenerator.notNull;
/**
* 获取 objects 所有历史版本
*/
public class ListObjectVersionsRequest extends Ks3WebServiceRequest{
private String bucket;
private String prefix;
/**
* prefix和delimiter详解
*
* commonPrefix由prefix和delimiter确定,以prefix开头的object
* key,在prefix之后第一次出现delimiter的位置之前(包含delimiter)的子字符串将存在于commonPrefixes中
*
*
* 比如有一下几个个object key
*
*
* aaaa/bbb/ddd.txt
*
*
* aaaa/ccc/eee.txt
*
*
* ssss/eee/fff.txt
*
*
* prefix为空 delimiter为/ 则commonPrefix 为 aaaa/和ssss/ 返回的object为空
*
*
* prefix为aaaa/ delimiter为/ 则commonPrefix 为 aaaa/bbb/和aaaa/ccc/ 返回的object为空
*
*
* prefix为ssss/ delimiter为/ 则commonPrefix 为 aaaa/eee/ 返回的object为空
*
*
* prefix为空 delimiter为空 则commonPrefix 为空 返回的object
* keys为aaaa/bbb/ddd.txt、aaaa/ccc/eee.txt、ssss/eee/fff.txt
*
*
* prefix为aaaa/ delimiter为空 则commonPrefix 为空 返回的object
* keys为aaaa/bbb/ddd.txt、aaaa/ccc/eee.txt
*
*
* prefix为ssss/ delimiter为空 则commonPrefix 为空 返回的object keys为ssss/eee/fff.txt
*
*
*
* 由于分布式文件存储系统中没有文件夹结构,所以用delimiter和prefix模拟文件夹结构,可以把prefix看成当前在哪个文件夹下,
* delimiter为文件夹分隔符,commonprefix为当前文件夹下的子文件夹
*
*/
private String delimiter;
/**
* 返回的最大数1-1000
*/
private Integer maxKeys;
/**
* 要求ks3服务器对返回的结果中object key进行编码
*/
private String encodingType;
/**
* 起始 key(不包含)
*/
private String KeyMarker;
/**
* 起始版本号(不包含)
*/
private String VersionIdMarker;
public String getKeyMarker() {
return KeyMarker;
}
public void setKeyMarker(String keyMarker) {
KeyMarker = keyMarker;
}
public String getVersionIdMarker() {
return VersionIdMarker;
}
public void setVersionIdMarker(String versionIdMarker) {
VersionIdMarker = versionIdMarker;
}
public String getBucket() {
return bucket;
}
public void setBucket(String bucket) {
this.bucket = bucket;
}
/**
* 前缀
*/
public String getPrefix() {
return prefix;
}
/**
* 前缀
*/
public void setPrefix(String prefix) {
this.prefix = prefix;
}
/**
* 分隔符
*/
public String getDelimiter() {
return delimiter;
}
/**
* 分隔符
*/
public void setDelimiter(String delimiter) {
this.delimiter = delimiter;
}
/**
* 返回的最大数
*/
public Integer getMaxKeys() {
return maxKeys;
}
/**
* 返回的最大数
*/
public void setMaxKeys(Integer maxKeys) {
this.maxKeys = maxKeys;
}
/**
* @param bucketName
*/
public ListObjectVersionsRequest(String bucketName) {
this(bucketName, null, null, null, null,null);
}
/**
*
* @param bucketName
* @param prefix
*/
public ListObjectVersionsRequest(String bucketName, String prefix) {
this(bucketName, prefix, null, null, null,null);
}
/**
*
* @param bucket
* @param prefix
* @param delimiter
* @param maxKeys
* @param keyMarker
* @param versionIdMarker
*/
public ListObjectVersionsRequest(String bucket, String prefix, String keyMarker, String versionIdMarker, String delimiter, Integer maxKeys) {
this.bucket = bucket;
this.prefix = prefix;
this.KeyMarker = keyMarker;
this.VersionIdMarker = versionIdMarker;
this.delimiter = delimiter;
this.maxKeys = maxKeys;
}
@Override
public void validateParams() throws IllegalArgumentException {
if (StringUtils.isBlank(this.bucket))
throw notNull(
"bucketName");
if (this.maxKeys != null && (this.maxKeys > 1000 || this.maxKeys < 1))
throw between(
"maxKeys",String.valueOf(maxKeys),"1","1000");
if (this.VersionIdMarker != null && this.KeyMarker == null) {
throw notNull("KeyMarker");
}
}
public String getEncodingType() {
return encodingType;
}
public void setEncodingType(String encodingType) {
this.encodingType = encodingType;
}
@Override
public void buildRequest(Request request) {
request.setMethod(HttpMethod.GET);
request.setBucket(bucket);
request.addQueryParam("versions", "");
request.addQueryParamIfNotNull("prefix", prefix);
request.addQueryParamIfNotNull("key-marker", KeyMarker );
request.addQueryParamIfNotNull("version-id-marker", VersionIdMarker);
request.addQueryParamIfNotNull("delimiter", delimiter);
if(maxKeys!=null)
request.addQueryParamIfNotNull("max-keys", String.valueOf(maxKeys));
request.addQueryParamIfNotNull("encoding-type", this.encodingType);
}
}