OpenTREP Logo  0.6.0
C++ Open Travel Request Parsing Library
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
OutputFormat.cpp
Go to the documentation of this file.
1 // //////////////////////////////////////////////////////////////////////
2 // Import section
3 // //////////////////////////////////////////////////////////////////////
4 // STL
5 #include <cassert>
6 #include <sstream>
7 // OpenTREP
9 
10 namespace OPENTREP {
11 
12  // //////////////////////////////////////////////////////////////////////
13  const std::string OutputFormat::_labels[LAST_VALUE] =
14  { "Short", "Full", "JSON", "PROTOBUF" };
15 
16  // //////////////////////////////////////////////////////////////////////
17  const char OutputFormat::_formatLabels[LAST_VALUE] = { 'S', 'F', 'J', 'P' };
18 
19 
20  // //////////////////////////////////////////////////////////////////////
21  OutputFormat::OutputFormat() : _format (LAST_VALUE) {
22  assert (false);
23  }
24 
25  // //////////////////////////////////////////////////////////////////////
26  OutputFormat::
27  OutputFormat (const OutputFormat& iOutputFormat)
28  : _format (iOutputFormat._format) {
29  }
30 
31  // //////////////////////////////////////////////////////////////////////
32  OutputFormat::
33  OutputFormat (const EN_OutputFormat& iOutputFormat)
34  : _format (iOutputFormat) {
35  }
36 
37  // //////////////////////////////////////////////////////////////////////
39  OutputFormat::getFormat (const char iFormatChar) {
40  EN_OutputFormat oFormat;
41  switch (iFormatChar) {
42  case 'S': oFormat = SHORT; break;
43  case 'F': oFormat = FULL; break;
44  case 'J': oFormat = JSON; break;
45  case 'P': oFormat = PROTOBUF; break;
46  default: oFormat = LAST_VALUE; break;
47  }
48 
49  if (oFormat == LAST_VALUE) {
50  const std::string& lLabels = describeLabels();
51  std::ostringstream oMessage;
52  oMessage << "The output format '" << iFormatChar
53  << "' is not known. Known output formats: " << lLabels;
54  throw CodeConversionException (oMessage.str());
55  }
56 
57  return oFormat;
58  }
59 
60  // //////////////////////////////////////////////////////////////////////
61  OutputFormat::OutputFormat (const char iFormatChar)
62  : _format (getFormat (iFormatChar)) {
63  }
64 
65  // //////////////////////////////////////////////////////////////////////
66  OutputFormat::
67  OutputFormat (const std::string& iFormatStr) {
68  //
69  const size_t lSize = iFormatStr.size();
70  assert (lSize == 1);
71  const char lFormatChar = iFormatStr[0];
72  _format = getFormat (lFormatChar);
73  }
74 
75  // //////////////////////////////////////////////////////////////////////
76  const std::string& OutputFormat::
77  getLabel (const EN_OutputFormat& iFormat) {
78  return _labels[iFormat];
79  }
80 
81  // //////////////////////////////////////////////////////////////////////
82  char OutputFormat::
83  getFormatLabel (const EN_OutputFormat& iFormat) {
84  return _formatLabels[iFormat];
85  }
86 
87  // //////////////////////////////////////////////////////////////////////
88  std::string OutputFormat::
90  std::ostringstream oStr;
91  oStr << _formatLabels[iFormat];
92  return oStr.str();
93  }
94 
95  // //////////////////////////////////////////////////////////////////////
97  std::ostringstream ostr;
98  for (unsigned short idx = 0; idx != LAST_VALUE; ++idx) {
99  if (idx != 0) {
100  ostr << ", ";
101  }
102  ostr << _labels[idx];
103  }
104  return ostr.str();
105  }
106 
107  // //////////////////////////////////////////////////////////////////////
110  return _format;
111  }
112 
113  // //////////////////////////////////////////////////////////////////////
115  const char oFormatChar = _formatLabels[_format];
116  return oFormatChar;
117  }
118 
119  // //////////////////////////////////////////////////////////////////////
120  std::string OutputFormat::getFormatAsString() const {
121  std::ostringstream oStr;
122  oStr << _formatLabels[_format];
123  return oStr.str();
124  }
125 
126  // //////////////////////////////////////////////////////////////////////
127  const std::string OutputFormat::describe() const {
128  std::ostringstream ostr;
129  ostr << _labels[_format];
130  return ostr.str();
131  }
132 
133  // //////////////////////////////////////////////////////////////////////
134  bool OutputFormat::
135  operator== (const EN_OutputFormat& iFormat) const {
136  return (_format == iFormat);
137  }
138 
139 }
char getFormatAsChar() const
static std::string getFormatLabelAsString(const EN_OutputFormat &)
static const std::string & getLabel(const EN_OutputFormat &)
const std::string describe() const
Enumeration of output formats.
bool operator==(const EN_OutputFormat &) const
static char getFormatLabel(const EN_OutputFormat &)
EN_OutputFormat getFormat() const
std::string getFormatAsString() const
static std::string describeLabels()