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 
18 #include <alibabacloud/oss/model/CompleteMultipartUploadRequest.h>
19 #include <sstream>
20 #include "utils/Utils.h"
21 #include "ModelError.h"
22 
23 using namespace AlibabaCloud::OSS;
24 
CompleteMultipartUploadRequest(const std::string & bucket,const std::string & key)25 CompleteMultipartUploadRequest::CompleteMultipartUploadRequest(
26     const std::string &bucket, const std::string &key) :
27     CompleteMultipartUploadRequest(bucket, key, PartList())
28 {
29 }
30 
CompleteMultipartUploadRequest(const std::string & bucket,const std::string & key,const PartList & partList)31 CompleteMultipartUploadRequest::CompleteMultipartUploadRequest(
32     const std::string &bucket,
33     const std::string &key, const PartList &partList) :
34     CompleteMultipartUploadRequest(bucket, key, partList, "")
35 {
36 }
37 
CompleteMultipartUploadRequest(const std::string & bucket,const std::string & key,const PartList & partList,const std::string & uploadId)38 CompleteMultipartUploadRequest::CompleteMultipartUploadRequest(
39     const std::string &bucket, const std::string &key,
40     const PartList &partList, const std::string &uploadId):
41     OssObjectRequest(bucket, key),
42     partList_(partList),
43     uploadId_(uploadId),
44     encodingTypeIsSet_(false)
45 {
46     setFlags(Flags() | REQUEST_FLAG_CONTENTMD5);
47 }
48 
validate() const49 int CompleteMultipartUploadRequest::validate() const
50 {
51     int ret = OssObjectRequest::validate();
52 
53     if (ret != 0) {
54         return ret;
55     }
56 
57     if(partList_.empty())
58         return ARG_ERROR_MULTIPARTUPLOAD_PARTLIST_EMPTY;
59 
60     return 0;
61 }
62 
setPartList(const PartList & partList)63 void CompleteMultipartUploadRequest::setPartList(const PartList &partList)
64 {
65     partList_ = partList;
66 }
67 
setEncodingType(const std::string & encodingType)68 void CompleteMultipartUploadRequest::setEncodingType(const std::string &encodingType)
69 {
70     encodingType_ = encodingType;
71     encodingTypeIsSet_ = true;
72 }
73 
setUploadId(const std::string & uploadId)74 void CompleteMultipartUploadRequest::setUploadId(const std::string &uploadId)
75 {
76     uploadId_ = uploadId;
77 }
78 
setAcl(CannedAccessControlList acl)79 void CompleteMultipartUploadRequest::setAcl(CannedAccessControlList acl)
80 {
81     metaData_.addHeader("x-oss-object-acl", ToAclName(acl));
82 }
83 
setCallback(const std::string & callback,const std::string & callbackVar)84 void CompleteMultipartUploadRequest::setCallback(const std::string& callback, const std::string& callbackVar)
85 {
86     metaData_.removeHeader("x-oss-callback");
87     metaData_.removeHeader("x-oss-callback-var");
88 
89     if (!callback.empty()) {
90         metaData_.addHeader("x-oss-callback", callback);
91     }
92 
93     if (!callbackVar.empty()) {
94         metaData_.addHeader("x-oss-callback-var", callbackVar);
95     }
96 }
97 
MetaData()98 ObjectMetaData& CompleteMultipartUploadRequest::MetaData()
99 {
100     return metaData_;
101 }
specialParameters() const102 ParameterCollection CompleteMultipartUploadRequest::specialParameters()const
103 {
104     ParameterCollection parameters;
105     parameters["uploadId"] = uploadId_;
106     if(encodingTypeIsSet_)
107     {
108         parameters["encoding-type"] = encodingType_;
109     }
110     return parameters;
111 }
112 
specialHeaders() const113 HeaderCollection CompleteMultipartUploadRequest::specialHeaders() const
114 {
115     auto headers = metaData_.toHeaderCollection();
116     auto baseHeaders = OssObjectRequest::specialHeaders();
117     headers.insert(baseHeaders.begin(), baseHeaders.end());
118     return headers;
119 }
120 
payload() const121 std::string CompleteMultipartUploadRequest::payload() const
122 {
123     std::stringstream ss;
124     ss << "<CompleteMultipartUpload>" << std::endl;
125     for (auto const &part : partList_) {
126         ss << "<Part>" << std::endl;
127         ss << "  <PartNumber>";
128         ss << std::to_string(part.PartNumber());
129         ss << "</PartNumber>" << std::endl;
130         ss << "  <ETag>";
131         ss << part.ETag();
132         ss << "</ETag>" << std::endl;
133         ss << "</Part>";
134     }
135     ss << "</CompleteMultipartUpload>";
136     return ss.str();
137 }
138