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