HOPS
HOPS class reference
MHO_StationIdentity.hh
Go to the documentation of this file.
1 #ifndef MHO_StationIdentity_HH__
2 #define MHO_StationIdentity_HH__
3 
4 #include <algorithm>
5 #include <cctype>
6 #include <cstdlib>
7 #include <iomanip>
8 #include <sstream>
9 #include <string>
10 
11 #include "MHO_JSONHeaderWrapper.hh"
12 #include "MHO_Message.hh"
13 #include "MHO_Tokenizer.hh"
14 #include "MHO_Types.hh"
15 
16 namespace hops
17 {
18 
29 {
30 
31  public:
33 
34  MHO_StationIdentity(const std::string& name, const std::string& code, const std::string& mk4id)
35  {
36  SetAll(name, code, mk4id);
37  }
38 
40  {
41  if(site_vex.contains("mk4_site_ID") && site_vex.contains("site_ID") && site_vex.contains("site_name"))
42  {
43  std::string mk4id = site_vex["mk4_site_ID"].get< std::string >();
44  std::string code = site_vex["site_ID"].get< std::string >();
45  std::string name = site_vex["site_name"].get< std::string >();
46  SetAll(name, code, mk4id);
47  }
48  }
49 
50  virtual ~MHO_StationIdentity(){};
51 
53  {
57  }
58 
60  {
64  return *this;
65  }
66 
67  bool operator==(const MHO_StationIdentity& rhs) const
68  {
69  if(fStationName == rhs.fStationName)
70  {
71  return true;
72  }
73  // if(fStationCode == rhs.fStationCode){return true;}
74  // if(fStationMk4ID == rhs.fStationMk4ID){return true;}
75  return false;
76  }
77 
78  bool operator!=(const MHO_StationIdentity& rhs) const { return !(*this == rhs); }
79 
80  //ordering on name, to stay consistent with operator== (which compares by name only)
81  bool operator<(const MHO_StationIdentity& rhs) const { return (fStationName < rhs.fStationName); }
82 
83  /*!*
84  * Check if this station identity matches the given 1-char/2-char code or multi-char name
85  * @return A boolean if successful match
86  */
87  bool matches(const std::string& station_identifier) const
88  {
89  if(station_identifier.size() == 1)
90  {
91  return (fStationMk4ID == station_identifier);
92  }
93  if(station_identifier.size() == 2)
94  {
95  return (fStationCode == station_identifier);
96  }
97  //default compare with name (but only as upper case)
98  std::string tmp = station_identifier;
99  std::transform(tmp.begin(), tmp.end(), tmp.begin(), ::toupper);
100  return (fStationName == tmp);
101  }
102 
103  /*!*
104  * Convert the station identifier to a formatted string
105  * @return A std::string containing station id info, delimited by commas
106  */
107  std::string as_string() const
108  {
109  std::stringstream ss;
110  ss << fStationName;
111  ss << ",";
112  ss << fStationCode;
113  ss << ",";
114  ss << fStationMk4ID;
115  return ss.str();
116  }
117 
118  /*!*
119  * Read a formatted string to fill this object
120  * @return success on updating the station identity object using string info
121  */
122  bool from_string(const std::string& station_id_string)
123  {
124  std::string input = station_id_string;
125  std::vector< std::string > tokens;
126  MHO_Tokenizer tokenizer;
127  tokenizer.SetDelimiter(",");
128  tokenizer.SetIncludeEmptyTokensTrue();
130  tokenizer.SetString(&input);
131  tokenizer.GetTokens(&tokens);
132 
133  if(tokens.size() < 3)
134  {
135  return false;
136  }
137  else
138  {
142  return true;
143  }
144  }
145 
146  void SetStationName(const std::string& name)
147  {
148  //(only) station names are always stored as pure-upper case
149  fStationName = name;
150  std::transform(fStationName.begin(), fStationName.end(), fStationName.begin(), ::toupper);
151  }
152 
153  std::string GetStationName() const { return fStationName; }
154 
155  void SetStationCode(const std::string& code) { fStationCode = code.substr(0, 2); }
156 
157  std::string GetStationCode() const { return fStationCode; }
158 
159  void SetStationMk4ID(const std::string& id) { fStationMk4ID = id.substr(0, 1); }
160 
161  std::string GetStationMk4Id() const { return fStationMk4ID; }
162 
163  void SetAll(const std::string& name, const std::string& code, const std::string& mk4id)
164  {
165  SetStationName(name);
166  SetStationCode(code);
167  SetStationMk4ID(mk4id);
168  }
169 
170  protected:
171  std::string fStationName; //8 or more char
172  std::string fStationCode; //2 char
173  std::string fStationMk4ID; //1 char;
174 };
175 
176 } // namespace hops
177 
178 #endif
nlohmann::json mho_json
Definition: MHO_JSONHeaderWrapper.hh:5
Class MHO_StationIdentity - a class to store, associate, and compare 1-char, 2-char,...
Definition: MHO_StationIdentity.hh:29
std::string fStationName
Definition: MHO_StationIdentity.hh:171
void SetStationName(const std::string &name)
Definition: MHO_StationIdentity.hh:146
MHO_StationIdentity & operator=(const MHO_StationIdentity &rhs)
Definition: MHO_StationIdentity.hh:59
std::string fStationMk4ID
Definition: MHO_StationIdentity.hh:173
std::string GetStationMk4Id() const
Definition: MHO_StationIdentity.hh:161
MHO_StationIdentity(const std::string &name, const std::string &code, const std::string &mk4id)
Definition: MHO_StationIdentity.hh:34
std::string fStationCode
Definition: MHO_StationIdentity.hh:172
std::string GetStationCode() const
Definition: MHO_StationIdentity.hh:157
std::string GetStationName() const
Definition: MHO_StationIdentity.hh:153
virtual ~MHO_StationIdentity()
Definition: MHO_StationIdentity.hh:50
bool matches(const std::string &station_identifier) const
Definition: MHO_StationIdentity.hh:87
bool operator<(const MHO_StationIdentity &rhs) const
Definition: MHO_StationIdentity.hh:81
void SetStationMk4ID(const std::string &id)
Definition: MHO_StationIdentity.hh:159
MHO_StationIdentity()
Definition: MHO_StationIdentity.hh:32
MHO_StationIdentity(const mho_json &site_vex)
Definition: MHO_StationIdentity.hh:39
bool from_string(const std::string &station_id_string)
Definition: MHO_StationIdentity.hh:122
bool operator==(const MHO_StationIdentity &rhs) const
Definition: MHO_StationIdentity.hh:67
void SetAll(const std::string &name, const std::string &code, const std::string &mk4id)
Definition: MHO_StationIdentity.hh:163
bool operator!=(const MHO_StationIdentity &rhs) const
Definition: MHO_StationIdentity.hh:78
std::string as_string() const
Definition: MHO_StationIdentity.hh:107
void SetStationCode(const std::string &code)
Definition: MHO_StationIdentity.hh:155
MHO_StationIdentity(const MHO_StationIdentity &copy)
Definition: MHO_StationIdentity.hh:52
Class MHO_Tokenizer.
Definition: MHO_Tokenizer.hh:24
void SetIncludeEmptyTokensTrue()
Definition: MHO_Tokenizer.cc:25
void SetString(const std::string *aString)
Definition: MHO_Tokenizer.cc:65
void GetTokens(std::vector< std::string > *tokens)
Definition: MHO_Tokenizer.cc:75
void SetRemoveLeadingTrailingWhitespaceTrue()
Setter for remove leading trailing whitespace true.
Definition: MHO_Tokenizer.cc:55
void SetDelimiter(const std::string &aDelim)
Definition: MHO_Tokenizer.cc:70
Definition: MHO_AdhocFlagging.hh:18
struct token_struct * tokens
Definition: parse_control_file.c:26