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/OutputFormat.h>
18 #include <sstream>
19 #include "utils/Utils.h"
20 
21 using namespace AlibabaCloud::OSS;
22 
OutputFormat()23 OutputFormat::OutputFormat():
24 	keepAllColumns_(false), outputRawData_(false),
25 	enablePayloadCrc_(true), outputHeader_(false)
26 {}
27 
setEnablePayloadCrc(bool enablePayloadCrc)28 void OutputFormat::setEnablePayloadCrc(bool enablePayloadCrc)
29 {
30 	enablePayloadCrc_ = enablePayloadCrc;
31 }
32 
setKeepAllColumns(bool keepAllColumns)33 void OutputFormat::setKeepAllColumns(bool keepAllColumns)
34 {
35 	keepAllColumns_ = keepAllColumns;
36 }
37 
setOutputHeader(bool outputHeader)38 void OutputFormat::setOutputHeader(bool outputHeader)
39 {
40 	outputHeader_ = outputHeader;
41 }
42 
setOutputRawData(bool outputRawData)43 void OutputFormat::setOutputRawData(bool outputRawData)
44 {
45 	outputRawData_ = outputRawData;
46 }
47 
OutputRawData() const48 bool OutputFormat::OutputRawData() const
49 {
50     return outputRawData_;
51 }
52 
KeepAllColumns() const53 bool OutputFormat::KeepAllColumns() const
54 {
55     return keepAllColumns_;
56 }
57 
EnablePayloadCrc() const58 bool OutputFormat::EnablePayloadCrc() const
59 {
60     return enablePayloadCrc_;
61 }
62 
OutputHeader() const63 bool OutputFormat::OutputHeader() const
64 {
65     return outputHeader_;
66 }
67 
validate() const68 int OutputFormat::validate() const
69 {
70     return 0;
71 }
72 
73 ////////////////////////////////////////////////////////////////////////////////////////
74 
CSVOutputFormat()75 CSVOutputFormat::CSVOutputFormat()
76     : CSVOutputFormat("\n", ",")
77 {}
78 
CSVOutputFormat(const std::string & recordDelimiter,const std::string & fieldDelimiter)79 CSVOutputFormat::CSVOutputFormat(
80     const std::string& recordDelimiter,
81     const std::string& fieldDelimiter)
82     : OutputFormat(), recordDelimiter_(recordDelimiter), fieldDelimiter_(fieldDelimiter)
83 {}
84 
setRecordDelimiter(const std::string & recordDelimiter)85 void CSVOutputFormat::setRecordDelimiter(const std::string& recordDelimiter)
86 {
87     recordDelimiter_ = recordDelimiter;
88 }
89 
setFieldDelimiter(const std::string & fieldDelimiter)90 void CSVOutputFormat::setFieldDelimiter(const std::string& fieldDelimiter)
91 {
92     fieldDelimiter_ = fieldDelimiter;
93 }
94 
FieldDelimiter() const95 const std::string& CSVOutputFormat::FieldDelimiter() const
96 {
97     return fieldDelimiter_;
98 }
99 
RecordDelimiter() const100 const std::string& CSVOutputFormat::RecordDelimiter() const
101 {
102     return recordDelimiter_;
103 }
104 
Type() const105 std::string CSVOutputFormat::Type() const
106 {
107     return "csv";
108 }
109 
toXML() const110 std::string CSVOutputFormat::toXML() const
111 {
112     std::stringstream ss;
113     ss << "<OutputSerialization>" << std::endl;
114     ss << "<CSV>" << std::endl;
115     ss << "<RecordDelimiter>" << Base64Encode(recordDelimiter_) << "</RecordDelimiter>" << std::endl;
116     ss << "<FieldDelimiter>" << Base64Encode(fieldDelimiter_.empty() ? "" : std::string(1, fieldDelimiter_.front())) << "</FieldDelimiter>" << std::endl;
117     ss << "</CSV>" << std::endl;
118     ss << "<KeepAllColumns>" << (OutputFormat::KeepAllColumns() ? "true" : "false") << "</KeepAllColumns>" << std::endl;
119     ss << "<OutputRawData>" << (OutputFormat::OutputRawData() ? "true" : "false") << "</OutputRawData>" << std::endl;
120     ss << "<OutputHeader>" << (OutputFormat::OutputHeader() ? "true" : "false") << "</OutputHeader>" << std::endl;
121     ss << "<EnablePayloadCrc>" << (OutputFormat::EnablePayloadCrc() ? "true" : "false") << "</EnablePayloadCrc>" << std::endl;
122     ss << "</OutputSerialization>" << std::endl;
123     return ss.str();
124 }
125 
126 ////////////////////////////////////////////////////////////////////////////////////////
127 
JSONOutputFormat()128 JSONOutputFormat::JSONOutputFormat()
129     :JSONOutputFormat("\n")
130 {}
131 
JSONOutputFormat(const std::string & recordDelimiter)132 JSONOutputFormat::JSONOutputFormat(const std::string& recordDelimiter)
133     :OutputFormat(), recordDelimiter_(recordDelimiter)
134 {}
135 
setRecordDelimiter(const std::string & recordDelimiter)136 void JSONOutputFormat::setRecordDelimiter(const std::string& recordDelimiter)
137 {
138     recordDelimiter_ = recordDelimiter;
139 }
140 
RecordDelimiter() const141 const std::string& JSONOutputFormat::RecordDelimiter() const
142 {
143     return recordDelimiter_;
144 }
145 
Type() const146 std::string JSONOutputFormat::Type() const
147 {
148     return "json";
149 }
150 
toXML() const151 std::string JSONOutputFormat::toXML() const
152 {
153     std::stringstream ss;
154     ss << "<OutputSerialization>" << std::endl;
155     ss << "<JSON>" << std::endl;
156     ss << "<RecordDelimiter>" << Base64Encode(recordDelimiter_) << "</RecordDelimiter>" << std::endl;
157     ss << "</JSON>" << std::endl;
158     ss << "<KeepAllColumns>" << (OutputFormat::KeepAllColumns() ? "true" : "false") << "</KeepAllColumns>" << std::endl;
159     ss << "<OutputRawData>" << (OutputFormat::OutputRawData() ? "true" : "false") << "</OutputRawData>" << std::endl;
160     ss << "<OutputHeader>" << (OutputFormat::OutputHeader() ? "true" : "false") << "</OutputHeader>" << std::endl;
161     ss << "<EnablePayloadCrc>" << (OutputFormat::EnablePayloadCrc() ? "true" : "false") << "</EnablePayloadCrc>" << std::endl;
162     ss << "</OutputSerialization>" << std::endl;
163     return ss.str();
164 }
165