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;
125 BitMap() : isDefault_(
true), zero_(0) {}
128 const uint64_t& get(
unsigned int row,
unsigned int col)
const
130 return isDefault_ ? zero_ : bitmap_[row][col];
132 unsigned int numberOfRows()
const {
return bitmap_.size(); }
133 unsigned int numberOfColumns(
unsigned int row)
const
135 return bitmap_[row].size();
139 std::vector<std::vector<uint64_t>> bitmap_;
155 void getValue (std::string& value)
const;
176 T handleValidateValueForColumn(
181 std::string handleValidateValueForColumn(
190 std::map<std::string, ConfigurationTree>
getNodes (
const std::string& nodeString)
const;
191 ConfigurationTree getBackNode (std::string nodeName,
unsigned int backSteps = 1)
const;
192 ConfigurationTree getForwardNode (std::string nodeName,
unsigned int forwardSteps = 1)
const;
202 std::vector<std::string>
getChildrenNames (
bool byPriority =
false,
bool onlyStatusTrue =
false)
const;
203 std::vector<std::vector<std::pair<
205 std::string > filterMap = std::map<std::string /*relative-path*/, std::string /*value*/>(),
206 bool onlyStatusTrue =
false)
const;
207 std::vector<std::pair<std::string,
209 std::string > filterMap = std::map<std::string /*relative-path*/, std::string /*value*/>(),
210 bool byPriority =
false,
211 bool onlyStatusTrue =
false)
const;
212 std::map<std::string, ConfigurationTree>
getChildrenMap (std::map<std::string ,
213 std::string > filterMap = std::map<std::string /*relative-path*/, std::string /*value*/>(),
214 bool onlyStatusTrue =
false)
const;
215 bool passFilterMap (
const std::string& childName, std::map<std::string /*relative-path*/, std::string /*value*/> filterMap)
const;
217 const std::string&
getValueAsString (
bool returnLinkTableValue =
false)
const;
220 const std::string&
getAuthor (
void)
const;
226 std::string getNodeType (
void)
const;
237 inline bool isRootNode (
void)
const {
return (!
isLinkNode() && !table_); }
238 inline bool isTableNode (
void)
const {
return (table_ && row_ == TableView::INVALID && col_ == TableView::INVALID); }
248 bool isStatusNode (
void)
const;
252 void print (
const unsigned int& depth = -1, std::ostream& out = std::cout)
const;
264 const unsigned int&
getRow (
void)
const;
265 const unsigned int&
getColumn (
void)
const;
275 const std::string& columnName,
276 const std::string& relativePath,
279 , columnName_(columnName)
280 , relativePath_(relativePath)
281 , columnInfo_(columnInfo)
285 std::string tableName_, columnName_, relativePath_;
291 const std::vector<std::string /*relative-path*/>& recordList,
292 const std::vector<std::string /*relative-path*/>& fieldAcceptList,
293 const std::vector<std::string /*relative-path*/>& fieldRejectList,
294 unsigned int depth = -1,
295 bool autoSelectFilterFields =
false)
const;
297 const std::vector<std::string /*relative-path*/>& recordList,
298 const std::string& fieldName,
299 std::string* fieldGroupIDChildLinkIndex = 0)
const;
305 const std::string& groupId,
306 const TableBase*
const& linkParentConfig,
307 const std::string& linkColName,
308 const std::string& linkColValue,
309 const unsigned int linkBackRow,
310 const unsigned int linkBackCol,
311 const std::string& disconnectedTargetName,
312 const std::string& disconnectedLinkID,
313 const std::string& childLinkIndex,
314 const unsigned int row = TableView::INVALID,
315 const unsigned int col = TableView::INVALID);
318 ConfigurationTree recursiveGetNode (
const std::string& nodeName,
bool doNotThrowOnBrokenUIDLinks,
const std::string& originalNodeString)
const;
319 static void recursivePrint (
const ConfigurationTree& t,
unsigned int depth, std::ostream& out, std::string space);
321 void recursiveGetCommonFields (
322 std::vector<ConfigurationTree::RecordField>& fieldCandidateList,
323 std::vector<int>& fieldCount,
324 const std::vector<std::string /*relative-path*/>& fieldAcceptList,
325 const std::vector<std::string /*relative-path*/>& fieldRejectList,
327 const std::string& relativePathBase,
328 bool inFirstRecord)
const;
339 const std::string groupId_;
342 const std::string linkColName_;
343 const std::string linkColValue_;
344 const unsigned int linkBackRow_;
345 const unsigned int linkBackCol_;
346 const std::string disconnectedTargetName_;
348 const std::string disconnectedLinkID_;
349 const std::string childLinkIndex_;
350 const unsigned int row_;
351 const unsigned int col_;
355 #include "otsdaq/ConfigurationInterface/ConfigurationTree.icc"
<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
ConfigurationTree::BitMap getValueAsBitMap(void) const
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
extracting information from a list of records
static std::string stackTrace(void)