1 /*
2 * Copyright 2009-2017 Alibaba Cloud All rights reserved.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include <alibabacloud/oss/model/MultiCopyObjectRequest.h>
18 #include <alibabacloud/oss/Const.h>
19 #include <sstream>
20 #include "../utils/FileSystemUtils.h"
21 #include "utils/Utils.h"
22 #include "../model/ModelError.h"
23
24 using namespace AlibabaCloud::OSS;
25 static const std::string strEmpty = "";
26
MultiCopyObjectRequest(const std::string & bucket,const std::string & key,const std::string & srcBucket,const std::string & srcKey)27 MultiCopyObjectRequest::MultiCopyObjectRequest(const std::string &bucket, const std::string &key,
28 const std::string &srcBucket, const std::string &srcKey) :
29 MultiCopyObjectRequest(bucket, key, srcBucket, srcKey, "", DefaultPartSize, DefaultResumableThreadNum)
30 {}
31
MultiCopyObjectRequest(const std::string & bucket,const std::string & key,const std::string & srcBucket,const std::string & srcKey,const std::string & checkpointDir)32 MultiCopyObjectRequest::MultiCopyObjectRequest(const std::string &bucket, const std::string &key,
33 const std::string &srcBucket, const std::string &srcKey,
34 const std::string &checkpointDir) :
35 MultiCopyObjectRequest(bucket, key, srcBucket, srcKey, checkpointDir, DefaultPartSize, DefaultResumableThreadNum)
36 {}
37
MultiCopyObjectRequest(const std::string & bucket,const std::string & key,const std::string & srcBucket,const std::string & srcKey,const std::string & checkpointDir,const ObjectMetaData & meta)38 MultiCopyObjectRequest::MultiCopyObjectRequest(const std::string &bucket, const std::string &key,
39 const std::string &srcBucket, const std::string &srcKey,
40 const std::string &checkpointDir, const ObjectMetaData& meta):
41 MultiCopyObjectRequest(bucket, key, srcBucket, srcKey, checkpointDir, DefaultPartSize, DefaultResumableThreadNum, meta)
42 {}
43
MultiCopyObjectRequest(const std::string & bucket,const std::string & key,const std::string & srcBucket,const std::string & srcKey,const std::string & checkpointDir,uint64_t partSize,uint32_t threadNum,const ObjectMetaData & meta)44 MultiCopyObjectRequest::MultiCopyObjectRequest(const std::string &bucket, const std::string &key,
45 const std::string &srcBucket, const std::string &srcKey,
46 const std::string &checkpointDir, uint64_t partSize, uint32_t threadNum, const ObjectMetaData& meta):
47 MultiCopyObjectRequest(bucket, key, srcBucket, srcKey, checkpointDir, partSize, threadNum)
48 {
49 metaData_ = meta;
50 }
51
MultiCopyObjectRequest(const std::string & bucket,const std::string & key,const std::string & srcBucket,const std::string & srcKey,const std::string & checkpointDir,uint64_t partSize,uint32_t threadNum)52 MultiCopyObjectRequest::MultiCopyObjectRequest(const std::string &bucket, const std::string &key,
53 const std::string &srcBucket, const std::string &srcKey,
54 const std::string &checkpointDir, uint64_t partSize, uint32_t threadNum) :
55 OssResumableBaseRequest(bucket, key, checkpointDir, partSize, threadNum),
56 srcBucket_(srcBucket),
57 srcKey_(srcKey)
58 {
59 setCopySource(srcBucket, srcKey);
60 }
61
62 //wstring
MultiCopyObjectRequest(const std::string & bucket,const std::string & key,const std::string & srcBucket,const std::string & srcKey,const std::wstring & checkpointDir)63 MultiCopyObjectRequest::MultiCopyObjectRequest(const std::string &bucket, const std::string &key,
64 const std::string &srcBucket, const std::string &srcKey,
65 const std::wstring &checkpointDir) :
66 MultiCopyObjectRequest(bucket, key, srcBucket, srcKey, checkpointDir, DefaultPartSize, DefaultResumableThreadNum)
67 {}
68
MultiCopyObjectRequest(const std::string & bucket,const std::string & key,const std::string & srcBucket,const std::string & srcKey,const std::wstring & checkpointDir,const ObjectMetaData & meta)69 MultiCopyObjectRequest::MultiCopyObjectRequest(const std::string &bucket, const std::string &key,
70 const std::string &srcBucket, const std::string &srcKey,
71 const std::wstring &checkpointDir, const ObjectMetaData& meta) :
72 MultiCopyObjectRequest(bucket, key, srcBucket, srcKey, checkpointDir, DefaultPartSize, DefaultResumableThreadNum, meta)
73 {}
74
MultiCopyObjectRequest(const std::string & bucket,const std::string & key,const std::string & srcBucket,const std::string & srcKey,const std::wstring & checkpointDir,uint64_t partSize,uint32_t threadNum,const ObjectMetaData & meta)75 MultiCopyObjectRequest::MultiCopyObjectRequest(const std::string &bucket, const std::string &key,
76 const std::string &srcBucket, const std::string &srcKey,
77 const std::wstring &checkpointDir, uint64_t partSize, uint32_t threadNum, const ObjectMetaData& meta) :
78 MultiCopyObjectRequest(bucket, key, srcBucket, srcKey, checkpointDir, partSize, threadNum)
79 {
80 metaData_ = meta;
81 }
82
MultiCopyObjectRequest(const std::string & bucket,const std::string & key,const std::string & srcBucket,const std::string & srcKey,const std::wstring & checkpointDir,uint64_t partSize,uint32_t threadNum)83 MultiCopyObjectRequest::MultiCopyObjectRequest(const std::string &bucket, const std::string &key,
84 const std::string &srcBucket, const std::string &srcKey,
85 const std::wstring &checkpointDir, uint64_t partSize, uint32_t threadNum) :
86 OssResumableBaseRequest(bucket, key, checkpointDir, partSize, threadNum),
87 srcBucket_(srcBucket),
88 srcKey_(srcKey)
89 {
90 setCopySource(srcBucket, srcKey);
91 }
92
setCopySource(const std::string & srcBucket,const std::string & srcObject)93 void MultiCopyObjectRequest::setCopySource(const std::string& srcBucket, const std::string& srcObject)
94 {
95 std::stringstream ssDesc;
96 ssDesc << "/" << srcBucket << "/" << srcObject;
97 std::string value = ssDesc.str();
98 metaData_.addHeader("x-oss-copy-source", value);
99 }
100
setSourceIfMatchEtag(const std::string & value)101 void MultiCopyObjectRequest::setSourceIfMatchEtag(const std::string& value)
102 {
103 metaData_.addHeader("x-oss-copy-source-if-match", value);
104 }
105
SourceIfMatchEtag() const106 const std::string& MultiCopyObjectRequest::SourceIfMatchEtag() const
107 {
108 if (metaData_.HttpMetaData().find("x-oss-copy-source-if-match") != metaData_.HttpMetaData().end()) {
109 return metaData_.HttpMetaData().at("x-oss-copy-source-if-match");
110 }
111 return strEmpty;
112 }
113
setSourceIfNotMatchEtag(const std::string & value)114 void MultiCopyObjectRequest::setSourceIfNotMatchEtag(const std::string& value)
115 {
116 metaData_.addHeader("x-oss-copy-source-if-none-match", value);
117 }
118
SourceIfNotMatchEtag() const119 const std::string& MultiCopyObjectRequest::SourceIfNotMatchEtag() const
120 {
121 if (metaData_.HttpMetaData().find("x-oss-copy-source-if-none-match") != metaData_.HttpMetaData().end()) {
122 return metaData_.HttpMetaData().at("x-oss-copy-source-if-none-match");
123 }
124 return strEmpty;
125 }
126
setSourceIfUnModifiedSince(const std::string & value)127 void MultiCopyObjectRequest::setSourceIfUnModifiedSince(const std::string& value)
128 {
129 metaData_.addHeader("x-oss-copy-source-if-unmodified-since", value);
130 }
131
SourceIfUnModifiedSince() const132 const std::string& MultiCopyObjectRequest::SourceIfUnModifiedSince() const
133 {
134 if (metaData_.HttpMetaData().find("x-oss-copy-source-if-unmodified-since") != metaData_.HttpMetaData().end()) {
135 return metaData_.HttpMetaData().at("x-oss-copy-source-if-unmodified-since");
136 }
137 return strEmpty;
138 }
139
setSourceIfModifiedSince(const std::string & value)140 void MultiCopyObjectRequest::setSourceIfModifiedSince(const std::string& value)
141 {
142 metaData_.addHeader("x-oss-copy-source-if-modified-since", value);
143 }
144
SourceIfModifiedSince() const145 const std::string& MultiCopyObjectRequest::SourceIfModifiedSince() const
146 {
147 if (metaData_.HttpMetaData().find("x-oss-copy-source-if-modified-since") != metaData_.HttpMetaData().end()) {
148 return metaData_.HttpMetaData().at("x-oss-copy-source-if-modified-since");
149 }
150 return strEmpty;
151 }
152
setMetadataDirective(const CopyActionList & action)153 void MultiCopyObjectRequest::setMetadataDirective(const CopyActionList& action)
154 {
155 metaData_.addHeader("x-oss-metadata-directive", ToCopyActionName(action));
156 }
157
setAcl(const CannedAccessControlList & acl)158 void MultiCopyObjectRequest::setAcl(const CannedAccessControlList& acl)
159 {
160 metaData_.addHeader("x-oss-object-acl", ToAclName(acl));
161 }
162
validate() const163 int MultiCopyObjectRequest::validate() const
164 {
165 auto ret = OssResumableBaseRequest::validate();
166 if (ret != 0) {
167 return ret;
168 }
169
170 return 0;
171 }
172