otsdaq  3.03.00
TableView.h
1 #ifndef _ots_TableView_h_
2 #define _ots_TableView_h_
3 
4 #include "otsdaq/Macros/CoutMacros.h"
5 #include "otsdaq/Macros/StringMacros.h"
6 #include "otsdaq/MessageFacility/MessageFacility.h"
7 
8 #include <stdlib.h>
9 #include <time.h> /* time_t, time, ctime */
10 #include <cassert>
11 #include <iostream>
12 #include <set>
13 #include <vector>
14 #include "otsdaq/TableCore/TableVersion.h"
15 #include "otsdaq/TableCore/TableViewColumnInfo.h"
16 
17 namespace ots
18 {
19 // clang-format off
20 class TableView
21 {
22  public:
23  static const unsigned int INVALID;
24  typedef std::vector<std::vector<std::string> > DataView;
25  typedef DataView::iterator iterator;
26  typedef DataView::const_iterator const_iterator;
27 
28  TableView (const std::string& tableName);
29  virtual ~TableView (void);
30 
31  void init (void);
32  TableView& copy (const TableView& src,
33  TableVersion destinationVersion,
34  const std::string& author);
35  unsigned int copyRows (const std::string& author,
36  const TableView& src,
37  unsigned int srcOffsetRow = 0,
38  unsigned int srcRowsToCopy = (unsigned int)-1,
39  unsigned int destOffsetRow = (unsigned int)-1,
40  unsigned char generateUniqueDataColumns = false,
43  const std::string& baseNameAutoUID = ""
44  );
45 
46  template<class T>
47  unsigned int findRow (unsigned int col,
48  const T& value,
49  unsigned int offsetRow = 0,
50  bool doNotThrow = false) const;
51  unsigned int findRow (unsigned int col,
52  const std::string& value,
53  unsigned int offsetRow = 0,
54  bool doNotThrow = false) const;
55 
56  template<class T>
57  unsigned int findRowInGroup (unsigned int col,
58  const T& value,
59  const std::string& groupId,
60  const std::string& childLinkIndex,
61  unsigned int offsetRow = 0) const;
62  unsigned int findRowInGroup (unsigned int col,
63  const std::string& value,
64  const std::string& groupId,
65  const std::string& childLinkIndex,
66  unsigned int offsetRow = 0) const;
67  unsigned int findCol (const std::string& name) const;
68  unsigned int findColByType (const std::string& type, unsigned int startingCol = 0) const;
69 
71  const std::string& getCustomStorageData (void) const { return storageData_; }
72  const std::string& getTableName (void) const { return tableName_; }
73  const TableVersion& getVersion (void) const { return version_; }
74  const std::string& getComment (void) const { return comment_ == "" ? TableViewColumnInfo::DATATYPE_COMMENT_DEFAULT : comment_; }
75  const std::string& getAuthor (void) const { return author_; }
76  const time_t& getCreationTime (void) const { return creationTime_; }
77  const time_t& getLastAccessTime (void) const { return lastAccessTime_; }
78  const bool& getLooseColumnMatching (void) const { return fillWithLooseColumnMatching_; }
79  unsigned int getDataColumnSize (void) const;
80  const unsigned int& getSourceColumnMismatch (void) const { return sourceColumnMismatchCount_; }
81  const unsigned int& getSourceColumnMissing (void) const { return sourceColumnMissingCount_; }
82  const std::set<std::string /*col name*/>& getSourceColumnNames (void) const { return sourceColumnNames_; }
83  std::set<std::string /*col name*/> getColumnNames (void) const;
84  std::map<std::string, unsigned int /*col*/> getColumnNamesMap (void) const;
85  std::set<std::string /*storage name*/> getColumnStorageNames (void) const;
86  const std::vector<std::string /*per col*/>& getDefaultRowValues (void) const { return rowDefaultValues_; }
87  std::string getMismatchColumnInfo (void) const;
88 
89  unsigned int getNumberOfRows (void) const { return theDataView_.size(); }
90  unsigned int getNumberOfColumns (void) const { return columnsInfo_.size(); }
91  unsigned int getColUID (void) const;
92  unsigned int getColStatus (void) const;
93  unsigned int getColPriority (void) const;
94 
98  private:
99  bool isEntryInGroupCol (const unsigned int& row,
100  const unsigned int& groupCol,
101  const std::string& groupNeedle,
102  std::set<std::string>* groupIDList = 0) const;
103 
104  public:
105 
106  std::set<std::string /*groupID*/> getSetOfGroupIDs (const std::string& childLinkIndex, unsigned int row = -1) const;
107  std::set<std::string /*groupID*/> getSetOfGroupIDs (const unsigned int& col, unsigned int row = -1) const;
108  bool isEntryInGroup (const unsigned int& row,
109  const std::string& childLinkIndex,
110  const std::string& groupNeedle) const;
111  bool getChildLink (const unsigned int& col,
112  bool& isGroup,
113  std::pair<unsigned int /*link col*/,
114  unsigned int /*link id col*/>& linkPair) const;
115  unsigned int getLinkGroupIDColumn (const std::string& childLinkIndex) const;
116  std::vector<unsigned int /*row*/> getGroupRows (const unsigned int groupIdCol, const std::string& groupID, bool onlyStatusTrue = false, bool orderedByPriority = false) const;
117  std::vector<std::vector<unsigned int /*row*/>> getGroupRowsByPriority (const unsigned int groupIdCol, const std::string& groupID, bool onlyStatusTrue = false) const;
118 private:
119  std::vector<std::vector<unsigned int /*row*/>> getGroupRowsInVectors (const unsigned int groupIdCol, const std::string& groupID, bool onlyStatusTrue, bool orderedByPriority) const;
120 public:
121  void addRowToGroup (const unsigned int& row,
122  const unsigned int& col,
123  const std::string& groupID);
124  bool removeRowFromGroup (const unsigned int& row,
125  const unsigned int& col,
126  const std::string& groupID,
127  bool deleteRowIfNoGroupLeft = false);
128 
129  template<class T>
130  void getValue (T& value,
131  unsigned int row,
132  unsigned int col,
133  bool doConvertEnvironmentVariables = true) const;
137  void getValue (std::string& value,
138  unsigned int row,
139  unsigned int col,
140  bool doConvertEnvironmentVariables = true) const;
141 
142  template<class T>
143  T validateValueForColumn (const std::string& value,
144  unsigned int col,
145  bool doConvertEnvironmentVariables = true) const;
149  std::string validateValueForColumn (const std::string& value,
150  unsigned int col,
151  bool convertEnvironmentVariables = true) const;
152  std::string getValueAsString (unsigned int row,
153  unsigned int col,
154  bool convertEnvironmentVariables = true) const;
155  std::string getEscapedValueAsString (unsigned int row,
156  unsigned int col,
157  bool convertEnvironmentVariables = true,
158  bool quotesToDoubleQuotes = false) const;
159  bool isURIEncodedCommentTheSame (const std::string& comment) const;
160 
161  const DataView& getDataView (void) const { return theDataView_; }
162  const std::vector<TableViewColumnInfo>& getColumnsInfo (void) const { return columnsInfo_; }
163  std::vector<TableViewColumnInfo>* getColumnsInfoP (void) { return &columnsInfo_; }
164  const TableViewColumnInfo& getColumnInfo (unsigned int column) const;
165 
168  void setCustomStorageData (const std::string& storageData) { storageData_ = storageData; }
169  void setComment (const std::string& comment) { comment_ = comment; }
170  void setURIEncodedComment (const std::string& uriComment);
171  void setAuthor (const std::string& author);
172  void setCreationTime (time_t t);
173  void setLastAccessTime (time_t t = time(0));
174  void setLooseColumnMatching (bool setValue);
175  void doGetSourceRawData (bool setValue);
176  const std::string& getSourceRawData (void) { return sourceRawData_; }
177 
178  template<class T>
179  void setVersion (const T& version);
180  template<class T>
181  void setValue (const T& value, unsigned int row, unsigned int col);
182  void setValue (const std::string& value, unsigned int row, unsigned int col);
183  void setValue (const char* value, unsigned int row, unsigned int col);
184 
187  void setValueAsString (const std::string& value, unsigned int row, unsigned int col);
188  const std::string& setUniqueColumnValue (unsigned int row, unsigned int col, std::string baseValueAsString = "",
189  bool doMathAppendStrategy = false,
190  std::string childLinkIndex = "",
191  std::string groupId = "");
192  void resizeDataView (unsigned int nRows, unsigned int nCols);
193  unsigned int addRow (const std::string& author = "",
194  unsigned char incrementUniqueData = false,
197  const std::string& baseNameAutoUID = "",
198  unsigned int rowToAdd = (unsigned int)-1,
199  std::string childLinkIndex = "",
200  std::string groupId = "");
201  void deleteRow (int r);
202  void deleteAllRows (void) {theDataView_.clear();}
203 
204 
208 
209 
210  iterator begin (void) { return theDataView_.begin(); }
211  iterator end (void) { return theDataView_.end(); }
212  const_iterator begin (void) const { return theDataView_.begin(); }
213  const_iterator end (void) const { return theDataView_.end(); }
214  void reset (void);
215  void print (std::ostream& out = std::cout) const;
216  void printJSON (std::ostream& out = std::cout) const;
217  void printCSV (std::ostream& out = std::cout, const std::string& valueDelimeter = ",", const std::string& recordDelimeter = "\n", bool includeColumnNames = true) const;
218  int fillFromJSON (const std::string& json);
219  void fillFromCSV (const std::string& data,
220  const int& dataOffset = 0,
221  const std::string& author = "",
222  const char rowDelimter = ',',
223  const char colDelimter = '\n');
224  int fillFromEncodedCSV (const std::string& data,
225  const int& dataOffset = 0,
226  const std::string& author = "");
227  bool setURIEncodedValue (const std::string& value,
228  const unsigned int& row,
229  const unsigned int& col,
230  const std::string& author = "");
231 
233  friend std::ostream& operator<<(std::ostream& out, const TableView& view)
234  {
235  out << view.getTableName();
236  return out;
237  }
238 
239  private:
240  unsigned int initColUID (void);
241  unsigned int initColStatus (void);
242  unsigned int initColPriority (void);
243  const std::vector<std::string /*per col*/>& initRowDefaults (void);
244 
245  TableView& operator= (const TableView src);
248 
249  std::string storageData_;
250  const std::string tableName_;
251  TableVersion version_;
252  std::string comment_;
253  std::string author_;
254  time_t creationTime_;
255  time_t lastAccessTime_;
256 
257  std::vector<std::string> rowDefaultValues_;
258  unsigned int colUID_, colStatus_, colPriority_;
259  std::map<std::string, unsigned int> colLinkGroupIDs_;
260 
261  bool fillWithLooseColumnMatching_;
262  bool getSourceRawData_;
263  std::string sourceRawData_;
264  unsigned int sourceColumnMismatchCount_, sourceColumnMissingCount_;
265  std::set<std::string> sourceColumnNames_;
266 
267  std::vector<TableViewColumnInfo> columnsInfo_;
268  DataView theDataView_;
269 };
270 
271 #include "otsdaq/TableCore/TableView.icc" //define template functions
272 
273 // clang-format on
274 } // namespace ots
275 
276 #endif
unsigned int findRow(unsigned int col, const T &value, unsigned int offsetRow=0, bool doNotThrow=false) const
< in included .icc source
std::string getEscapedValueAsString(unsigned int row, unsigned int col, bool convertEnvironmentVariables=true, bool quotesToDoubleQuotes=false) const
Definition: TableView.cc:1024
bool isEntryInGroup(const unsigned int &row, const std::string &childLinkIndex, const std::string &groupNeedle) const
Definition: TableView.cc:1652
void setValueAsString(const std::string &value, unsigned int row, unsigned int col)
Definition: TableView.cc:1090
void deleteRow(int r)
Definition: TableView.cc:3602
std::vector< std::vector< unsigned int > > getGroupRowsByPriority(const unsigned int groupIdCol, const std::string &groupID, bool onlyStatusTrue=false) const
Definition: TableView.cc:1520
T validateValueForColumn(const std::string &value, unsigned int col, bool doConvertEnvironmentVariables=true) const
< in included .icc source
TableView(const std::string &tableName)
= "");
Definition: TableView.cc:20
unsigned int getColStatus(void) const
Definition: TableView.cc:1407
unsigned int getLinkGroupIDColumn(const std::string &childLinkIndex) const
Definition: TableView.cc:1837
bool removeRowFromGroup(const unsigned int &row, const unsigned int &col, const std::string &groupID, bool deleteRowIfNoGroupLeft=false)
Definition: TableView.cc:1599
friend std::ostream & operator<<(std::ostream &out, const TableView &view)
output table name for ostream operator
Definition: TableView.h:233
unsigned int findColByType(const std::string &type, unsigned int startingCol=0) const
Definition: TableView.cc:1975
bool getChildLink(const unsigned int &col, bool &isGroup, std::pair< unsigned int, unsigned int > &linkPair) const
Definition: TableView.cc:3632
void addRowToGroup(const unsigned int &row, const unsigned int &col, const std::string &groupID)
, const std::string& colDefault);
Definition: TableView.cc:1465
unsigned int copyRows(const std::string &author, const TableView &src, unsigned int srcOffsetRow=0, unsigned int srcRowsToCopy=(unsigned int) -1, unsigned int destOffsetRow=(unsigned int) -1, unsigned char generateUniqueDataColumns=false, const std::string &baseNameAutoUID="")
Definition: TableView.cc:126
void setVersion(const T &version)
< in included .icc source
unsigned int getColPriority(void) const
Definition: TableView.cc:1438
const std::string & setUniqueColumnValue(unsigned int row, unsigned int col, std::string baseValueAsString="", bool doMathAppendStrategy=false, std::string childLinkIndex="", std::string groupId="")
Definition: TableView.cc:1110
void init(void)
Definition: TableView.cc:195
std::string getValueAsString(unsigned int row, unsigned int col, bool convertEnvironmentVariables=true) const
Definition: TableView.cc:975
std::vector< unsigned int > getGroupRows(const unsigned int groupIdCol, const std::string &groupID, bool onlyStatusTrue=false, bool orderedByPriority=false) const
Definition: TableView.cc:1497
const std::string & getCustomStorageData(void) const
Getters.
Definition: TableView.h:71
std::set< std::string > getSetOfGroupIDs(const std::string &childLinkIndex, unsigned int row=-1) const
Definition: TableView.cc:1736
void getValue(T &value, unsigned int row, unsigned int col, bool doConvertEnvironmentVariables=true) const
< in included .icc source
unsigned int getDataColumnSize(void) const
getDataColumnSize
Definition: TableView.cc:1992
int fillFromJSON(const std::string &json)
Definition: TableView.cc:2401
unsigned int getColUID(void) const
Definition: TableView.cc:1322
bool setURIEncodedValue(const std::string &value, const unsigned int &row, const unsigned int &col, const std::string &author="")
Definition: TableView.cc:3425
void fillFromCSV(const std::string &data, const int &dataOffset=0, const std::string &author="", const char rowDelimter=',', const char colDelimter='\n')
Definition: TableView.cc:3161
int fillFromEncodedCSV(const std::string &data, const int &dataOffset=0, const std::string &author="")
Definition: TableView.cc:3289
unsigned int findCol(const std::string &name) const
Definition: TableView.cc:1952
void setValue(const T &value, unsigned int row, unsigned int col)
< in included .icc source
void setURIEncodedComment(const std::string &uriComment)
Definition: TableView.cc:2107
unsigned int addRow(const std::string &author="", unsigned char incrementUniqueData=false, const std::string &baseNameAutoUID="", unsigned int rowToAdd=(unsigned int) -1, std::string childLinkIndex="", std::string groupId="")
Definition: TableView.cc:3517
iterator begin(void)
Definition: TableView.h:210
unsigned int findRowInGroup(unsigned int col, const T &value, const std::string &groupId, const std::string &childLinkIndex, unsigned int offsetRow=0) const
< in included .icc source
void setCustomStorageData(const std::string &storageData)
Definition: TableView.h:168