1 #ifndef _ots_ConfigurationTree_h_
2 #define _ots_ConfigurationTree_h_
4 #include "otsdaq/TableCore/TableView.h"
8 class ConfigurationManager;
19 friend class ConfigurationGUISupervisor;
55 __COUT__ <<
"OPERATOR= COPY CONSTRUCTOR ConfigManager: " << configMgr_
56 <<
" configuration: " << table_ << std::endl;
61 __COUT__ <<
"OPERATOR= COPY CONSTRUCTOR CANNOT BE USED - ConfigurationTree is a "
62 "const class. SO YOUR CODE IS WRONG! You should probably instantiate "
63 "and initialize another ConfigurationTree, rather than assigning to "
64 "an existing ConfigurationTree. Crashing now."
66 __COUT__ <<
"OPERATOR= COPY CONSTRUCTOR CANNOT BE USED - ConfigurationTree is a "
67 "const class. SO YOUR CODE IS WRONG! You should probably instantiate "
68 "and initialize another ConfigurationTree, rather than assigning to "
69 "an existing ConfigurationTree. Crashing now."
71 __COUT__ <<
"OPERATOR= COPY CONSTRUCTOR CANNOT BE USED - ConfigurationTree is a "
72 "const class. SO YOUR CODE IS WRONG! You should probably instantiate "
73 "and initialize another ConfigurationTree, rather than assigning to "
74 "an existing ConfigurationTree. Crashing now."
76 __COUT__ <<
"OPERATOR= COPY CONSTRUCTOR CANNOT BE USED - ConfigurationTree is a "
77 "const class. SO YOUR CODE IS WRONG! You should probably instantiate "
78 "and initialize another ConfigurationTree, rather than assigning to "
79 "an existing ConfigurationTree. Crashing now."
81 __COUT__ <<
"OPERATOR= COPY CONSTRUCTOR CANNOT BE USED - ConfigurationTree is a "
82 "const class. SO YOUR CODE IS WRONG! You should probably instantiate "
83 "and initialize another ConfigurationTree, rather than assigning to "
84 "an existing ConfigurationTree. Crashing now."
86 __COUT__ <<
"OPERATOR= COPY CONSTRUCTOR CANNOT BE USED - ConfigurationTree is a "
87 "const class. SO YOUR CODE IS WRONG! You should probably instantiate "
88 "and initialize another ConfigurationTree, rather than assigning to "
89 "an existing ConfigurationTree. Crashing now."
97 configMgr_ = a.configMgr_;
104 tableView_ = a.tableView_;
105 __COUT__ <<
"OPERATOR COPY CONSTRUCTOR" << std::endl;
109 static const std::string DISCONNECTED_VALUE;
110 static const std::string VALUE_TYPE_DISCONNECTED;
111 static const std::string VALUE_TYPE_NODE;
114 static const std::string NODE_TYPE_TABLE;
115 static const std::string NODE_TYPE_GROUP_LINK;
116 static const std::string NODE_TYPE_UID_LINK;
117 static const std::string NODE_TYPE_VALUE;
118 static const std::string NODE_TYPE_UID;
119 static const std::string NODE_TYPE_ROOT;
121 static const std::string ROOT_NAME;
126 BitMap() : isDefault_(
true), zero_(T()) {}
129 const T& get(
unsigned int row,
unsigned int col)
const
131 return isDefault_ ? zero_ : bitmap_[row][col];
133 unsigned int numberOfRows()
const {
return bitmap_.size(); }
134 unsigned int numberOfColumns(
unsigned int row)
const
136 return bitmap_[row].size();
138 void print(std::ostream& out = std::cout)
const;
141 std::vector<std::vector<T>> bitmap_;
157 void getValue (std::string& value)
const;
182 T handleValidateValueForColumn(
187 std::string handleValidateValueForColumn(
196 std::map<std::string, ConfigurationTree>
getNodes (
const std::string& nodeString)
const;
197 ConfigurationTree getBackNode (std::string nodeName,
unsigned int backSteps = 1)
const;
198 ConfigurationTree getForwardNode (std::string nodeName,
unsigned int forwardSteps = 1)
const;
208 std::vector<std::string>
getChildrenNames (
bool byPriority =
false,
bool onlyStatusTrue =
false)
const;
209 std::vector<std::vector<std::pair<
211 std::string > filterMap = std::map<std::string /*relative-path*/, std::string /*value*/>(),
212 bool onlyStatusTrue =
false)
const;
213 std::vector<std::pair<std::string,
215 std::string > filterMap = std::map<std::string /*relative-path*/, std::string /*value*/>(),
216 bool byPriority =
false,
217 bool onlyStatusTrue =
false)
const;
218 std::map<std::string, ConfigurationTree>
getChildrenMap (std::map<std::string ,
219 std::string > filterMap = std::map<std::string /*relative-path*/, std::string /*value*/>(),
220 bool onlyStatusTrue =
false)
const;
221 bool passFilterMap (
const std::string& childName, std::map<std::string /*relative-path*/, std::string /*value*/> filterMap)
const;
223 const std::string&
getValueAsString (
bool returnLinkTableValue =
false)
const;
226 const std::string&
getAuthor (
void)
const;
232 std::string getNodeType (
void)
const;
243 inline bool isRootNode (
void)
const {
return (!
isLinkNode() && !table_); }
244 inline bool isTableNode (
void)
const {
return (table_ && row_ == TableView::INVALID && col_ == TableView::INVALID); }
254 bool isStatusNode (
void)
const;
258 void print (
const unsigned int& depth = -1, std::ostream& out = std::cout)
const;
272 const unsigned int&
getRow (
void)
const;
273 const unsigned int&
getColumn (
void)
const;
283 const std::string& columnName,
284 const std::string& relativePath,
287 , columnName_(columnName)
288 , relativePath_(relativePath)
289 , columnInfo_(columnInfo)
293 std::string tableName_, columnName_, relativePath_;
299 const std::vector<std::string /*relative-path*/>& recordList,
300 const std::vector<std::string /*relative-path*/>& fieldAcceptList,
301 const std::vector<std::string /*relative-path*/>& fieldRejectList,
302 unsigned int depth = -1,
303 bool autoSelectFilterFields =
false)
const;
305 const std::vector<std::string /*relative-path*/>& recordList,
306 const std::string& fieldName,
307 std::string* fieldGroupIDChildLinkIndex = 0)
const;
313 const std::string& groupId,
314 const TableBase*
const& linkParentConfig,
315 const std::string& linkColName,
316 const std::string& linkColValue,
317 const unsigned int linkBackRow,
318 const unsigned int linkBackCol,
319 const std::string& disconnectedTargetName,
320 const std::string& disconnectedLinkID,
321 const std::string& childLinkIndex,
322 const unsigned int row = TableView::INVALID,
323 const unsigned int col = TableView::INVALID);
326 ConfigurationTree recursiveGetNode (
const std::string& nodeName,
bool doNotThrowOnBrokenUIDLinks,
const std::string& originalNodeString)
const;
327 static void recursivePrint (
const ConfigurationTree& t,
unsigned int depth, std::ostream& out, std::string space);
329 void recursiveGetCommonFields (
330 std::vector<ConfigurationTree::RecordField>& fieldCandidateList,
331 std::vector<int>& fieldCount,
332 const std::vector<std::string /*relative-path*/>& fieldAcceptList,
333 const std::vector<std::string /*relative-path*/>& fieldRejectList,
335 const std::string& relativePathBase,
336 bool inFirstRecord)
const;
347 const std::string groupId_;
350 const std::string linkColName_;
351 const std::string linkColValue_;
352 const unsigned int linkBackRow_;
353 const unsigned int linkBackCol_;
354 const std::string disconnectedTargetName_;
356 const std::string disconnectedLinkID_;
357 const std::string childLinkIndex_;
358 const unsigned int row_;
359 const unsigned int col_;
362 static time_t LAST_NODE_DUMP_TIME;
365 #include "otsdaq/ConfigurationInterface/ConfigurationTree.icc"
376 out <<
"Bitmap print of empty bitmap.";
380 out <<
"Bitmap print of size " << bitmap_.size() <<
" x " << bitmap_[0].size() << __E__;
382 for(
unsigned int c = 0; c < bitmap_[0].size(); ++c)
383 out << std::right << std::setw(15) << c <<
' ';
384 out <<
"\n-------+-";
385 for(
unsigned int c = 0; c < bitmap_[0].size(); ++c)
386 out <<
"---------------+";
387 for(
unsigned int r = 0; r < bitmap_.size(); ++r)
389 out <<
"\n" << std::right << std::setw(6) << r <<
" : ";
391 for(
unsigned int c = 0; c < bitmap_[r].size(); ++c)
392 out << std::right << std::setw(15) << std::fixed << std::setprecision(3) << (uint16_t)get(r,c) <<
' ';
394 for(
unsigned int c = 0; c < bitmap_[r].size(); ++c)
395 out << std::right << std::setw(15) << std::fixed << std::setprecision(3) << get(r,c) <<
' ';
397 out <<
"\n=======+=";
398 for(
unsigned int c = 0; c < bitmap_[0].size(); ++c)
399 out <<
"===============+";
413 out <<
"Bitmap print of empty bitmap.";
417 out <<
"Bitmap print of size " << bitmap_.size() <<
" x " << bitmap_[0].size() << __E__;
419 for(
unsigned int c = 0; c < bitmap_[0].size(); ++c)
420 out << std::right << std::setw(15) << c <<
' ';
421 out <<
"\n-------+-";
422 for(
unsigned int c = 0; c < bitmap_[0].size(); ++c)
423 out <<
"---------------+";
424 for(
unsigned int r = 0; r < bitmap_.size(); ++r)
426 out <<
"\n" << std::right << std::setw(6) << r <<
" : ";
427 for(
unsigned int c = 0; c < bitmap_[r].size(); ++c)
428 out << std::right << std::setw(15) << get(r,c) <<
' ';
430 out <<
"\n=======+=";
431 for(
unsigned int c = 0; c < bitmap_[0].size(); ++c)
432 out <<
"===============+";
<virtual so future plugins can inherit from multiple table base classes
const unsigned int & getRow(void) const
getRow
const std::string & getValueDataType(void) const
bool isUIDNode(void) const
std::map< std::string, ConfigurationTree > getNodes(const std::string &nodeString) const
getNodes
const TableVersion & getTableVersion(void) const
getTableVersion
bool isDisconnected(void) const
const std::string & getAuthor(void) const
getAuthor
const std::string & getComment(void) const
getComment
std::vector< std::string > getChildrenNames(bool byPriority=false, bool onlyStatusTrue=false) const
bool isEnabled(void) const
same as status()
static const std::string NODE_TYPE_GROUP_TABLE
bool isValueNumberDataType(void) const
ConfigurationTree getNode(const std::string &nodeName, bool doNotThrowOnBrokenUIDLinks=false) const
navigating between nodes
const std::string & getTableName(void) const
getTableName
T getValueWithDefault(const T &defaultValue) const
const unsigned int & getFieldRow(void) const
std::map< std::string, ConfigurationTree > getChildrenMap(std::map< std::string, std::string > filterMap=std::map< std::string, std::string >(), bool onlyStatusTrue=false) const
const std::string & getValueName(void) const
const std::string & getValueAsString(bool returnLinkTableValue=false) const
const ConfigurationManager * getConfigurationManager(void) const
extracting information from node
const std::string & getChildLinkIndex(void) const
getChildLinkIndex
void print(const unsigned int &depth=-1, std::ostream &out=std::cout) const
bool isGroupIDNode(void) const
void getValue(T &value) const
const std::string & getDisconnectedTableName(void) const
getDisconnectedTableName
bool isValueBoolType(void) const
std::vector< std::pair< std::string, ConfigurationTree > > getChildren(std::map< std::string, std::string > filterMap=std::map< std::string, std::string >(), bool byPriority=false, bool onlyStatusTrue=false) const
std::vector< std::string > getFixedChoices(void) const
bool isLinkNode(void) const
const std::string & getDefaultValue(void) const
const time_t & getTableCreationTime(void) const
getTableCreationTime
const std::string & getUIDAsString(void) const
bool status(void) const
same as isEnabled()
std::vector< ConfigurationTree::RecordField > getCommonFields(const std::vector< std::string > &recordList, const std::vector< std::string > &fieldAcceptList, const std::vector< std::string > &fieldRejectList, unsigned int depth=-1, bool autoSelectFilterFields=false) const
const unsigned int & getNodeRow(void) const
getNodeRow
std::set< std::string > getSetOfGroupIDs(void) const
bool isValueNode(void) const
const std::string & getFieldName(void) const
alias for getValueName
std::vector< std::vector< std::string > > getChildrenNamesByPriority(bool onlyStatusTrue=false) const
std::set< std::string > getUniqueValuesForField(const std::vector< std::string > &recordList, const std::string &fieldName, std::string *fieldGroupIDChildLinkIndex=0) const
const std::string & getValueType(void) const
bool passFilterMap(const std::string &childName, std::map< std::string, std::string > filterMap) const
std::string nodeDump(void) const
used for debugging (when throwing exception)
~ConfigurationTree(void)
destructor
bool isGroupLinkNode(void) const
const std::string & getFieldTableName(void) const
const unsigned int & getColumn(void) const
getColumn
const std::string & getDisconnectedLinkID(void) const
getDisconnectedLinkID
const std::string & getParentTableName(void) const
getParentTableName
bool isUIDLinkNode(void) const
std::string getEscapedValue(void) const
friend std::ostream & operator<<(std::ostream &out, const ConfigurationTree &t)
make stream output easy
const TableViewColumnInfo & getColumnInfo(void) const
bool isDefaultValue(void) const
boolean info
std::vector< std::vector< std::pair< std::string, ConfigurationTree > > > getChildrenByPriority(std::map< std::string, std::string > filterMap=std::map< std::string, std::string >(), bool onlyStatusTrue=false) const
T getValue(void) const
defined in included .icc source
const unsigned int & getFieldColumn(void) const
friend ConfigurationTree
so ConfigurationTree can access private
void print(std::ostream &out=std::cout) const
extracting information from a list of records
static std::string stackTrace(void)