tdaq-develop-2025-02-12
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_; }
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) const;
158  bool isURIEncodedCommentTheSame (const std::string& comment) const;
159 
160  const DataView& getDataView (void) const { return theDataView_; }
161  const std::vector<TableViewColumnInfo>& getColumnsInfo (void) const { return columnsInfo_; }
162  std::vector<TableViewColumnInfo>* getColumnsInfoP (void) { return &columnsInfo_; }
163  const TableViewColumnInfo& getColumnInfo (unsigned int column) const;
164 
167  void setCustomStorageData (const std::string& storageData) { storageData_ = storageData; }
168  void setComment (const std::string& comment) { comment_ = comment; }
169  void setURIEncodedComment (const std::string& uriComment);
170  void setAuthor (const std::string& author);
171  void setCreationTime (time_t t);
172  void setLastAccessTime (time_t t = time(0));
173  void setLooseColumnMatching (bool setValue);
174  void doGetSourceRawData (bool setValue);
175  const std::string& getSourceRawData (void) { return sourceRawData_; }
176 
177  template<class T>
178  void setVersion (const T& version);
179  template<class T>
180  void setValue (const T& value, unsigned int row, unsigned int col);
181  void setValue (const std::string& value, unsigned int row, unsigned int col);
182  void setValue (const char* value, unsigned int row, unsigned int col);
183 
186  void setValueAsString (const std::string& value, unsigned int row, unsigned int col);
187  const std::string& setUniqueColumnValue (unsigned int row, unsigned int col, std::string baseValueAsString = "",
188  bool doMathAppendStrategy = false,
189  std::string childLinkIndex = "",
190  std::string groupId = "");
191  void resizeDataView (unsigned int nRows, unsigned int nCols);
192  unsigned int addRow (const std::string& author = "",
193  unsigned char incrementUniqueData = false,
196  const std::string& baseNameAutoUID = "",
197  unsigned int rowToAdd =
198  (unsigned int)-1,
199  std::string childLinkIndex = "",
200  std::string groupId = "");
201  void deleteRow (int r);
202  void deleteAllRows (void) {theDataView_.clear();}
203 
204 
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  int fillFromJSON (const std::string& json);
218  int fillFromCSV (const std::string& data,
219  const int& dataOffset = 0,
220  const std::string& author = "");
221  bool setURIEncodedValue (const std::string& value,
222  const unsigned int& row,
223  const unsigned int& col,
224  const std::string& author = "");
225 
226  private:
227  unsigned int initColUID (void);
228  unsigned int initColStatus (void);
229  unsigned int initColPriority (void);
230  const std::vector<std::string /*per col*/>& initRowDefaults (void);
231 
232  TableView& operator= (const TableView src);
235 
236  std::string storageData_;
237  const std::string tableName_;
238  TableVersion version_;
239  std::string comment_;
240  std::string author_;
241  time_t creationTime_;
242  time_t lastAccessTime_;
243 
244  std::vector<std::string> rowDefaultValues_;
245  unsigned int colUID_, colStatus_, colPriority_;
246  std::map<std::string, unsigned int> colLinkGroupIDs_;
247 
248  bool fillWithLooseColumnMatching_;
249  bool getSourceRawData_;
250  std::string sourceRawData_;
251  unsigned int sourceColumnMismatchCount_, sourceColumnMissingCount_;
252  std::set<std::string> sourceColumnNames_;
253 
254  std::vector<TableViewColumnInfo> columnsInfo_;
255  DataView theDataView_;
256 };
257 
258 #include "otsdaq/TableCore/TableView.icc" //define template functions
259 
260 // clang-format on
261 } // namespace ots
262 
263 #endif
unsigned int findRow(unsigned int col, const T &value, unsigned int offsetRow=0, bool doNotThrow=false) const
< in included .icc source
bool isEntryInGroup(const unsigned int &row, const std::string &childLinkIndex, const std::string &groupNeedle) const
Definition: TableView.cc:1635
void setValueAsString(const std::string &value, unsigned int row, unsigned int col)
Definition: TableView.cc:1078
void deleteRow(int r)
Definition: TableView.cc:3424
std::vector< std::vector< unsigned int > > getGroupRowsByPriority(const unsigned int groupIdCol, const std::string &groupID, bool onlyStatusTrue=false) const
Definition: TableView.cc:1503
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:19
std::string getEscapedValueAsString(unsigned int row, unsigned int col, bool convertEnvironmentVariables=true) const
Definition: TableView.cc:1018
unsigned int getColStatus(void) const
Definition: TableView.cc:1390
unsigned int getLinkGroupIDColumn(const std::string &childLinkIndex) const
Definition: TableView.cc:1820
int fillFromCSV(const std::string &data, const int &dataOffset=0, const std::string &author="")
Definition: TableView.cc:3111
bool removeRowFromGroup(const unsigned int &row, const unsigned int &col, const std::string &groupID, bool deleteRowIfNoGroupLeft=false)
Definition: TableView.cc:1582
unsigned int findColByType(const std::string &type, unsigned int startingCol=0) const
Definition: TableView.cc:1958
bool getChildLink(const unsigned int &col, bool &isGroup, std::pair< unsigned int, unsigned int > &linkPair) const
Definition: TableView.cc:3454
void addRowToGroup(const unsigned int &row, const unsigned int &col, const std::string &groupID)
, const std::string& colDefault);
Definition: TableView.cc:1448
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:125
void setVersion(const T &version)
< in included .icc source
unsigned int getColPriority(void) const
Definition: TableView.cc:1421
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:1098
void init(void)
Definition: TableView.cc:189
std::string getValueAsString(unsigned int row, unsigned int col, bool convertEnvironmentVariables=true) const
Definition: TableView.cc:969
std::vector< unsigned int > getGroupRows(const unsigned int groupIdCol, const std::string &groupID, bool onlyStatusTrue=false, bool orderedByPriority=false) const
Definition: TableView.cc:1480
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:1719
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:1976
int fillFromJSON(const std::string &json)
Definition: TableView.cc:2337
unsigned int getColUID(void) const
Definition: TableView.cc:1305
bool setURIEncodedValue(const std::string &value, const unsigned int &row, const unsigned int &col, const std::string &author="")
Definition: TableView.cc:3247
unsigned int findCol(const std::string &name) const
Definition: TableView.cc:1935
void setValue(const T &value, unsigned int row, unsigned int col)
< in included .icc source
void setURIEncodedComment(const std::string &uriComment)
Definition: TableView.cc:2091
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:3339
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:167