otsdaq  v2_03_00
ConfigurationManager.h
1 #ifndef _ots_ConfigurationManager_h_
2 #define _ots_ConfigurationManager_h_
3 
4 #include <map>
5 #include <set>
6 #include <string>
7 
8 #include "otsdaq-core/ConfigurationInterface/ConfigurationInterface.h"
9 #include "otsdaq-core/ConfigurationInterface/ConfigurationTree.h"
10 #include "otsdaq-core/TableCore/TableVersion.h"
11 
12 namespace ots
13 {
14 class ProgressBar;
15 
16 #define __GET_CONFIG__(X) getTable<X>(QUOTE(X))
17 
19 {
20  // ConfigurationManagerRW is a "Friend" class of ConfigurationManager so has access to
21  // private members.
22  friend class ConfigurationManagerRW;
23 
24  public:
25  //==============================================================================
26  // Static members
27  static const std::string READONLY_USER;
28  static const std::string ACTIVE_GROUPS_FILENAME;
29  static const std::string ALIAS_VERSION_PREAMBLE;
30  static const std::string SCRATCH_VERSION_ALIAS;
31 
32  static const std::string XDAQ_CONTEXT_TABLE_NAME;
33  static const std::string XDAQ_APPLICATION_TABLE_NAME;
34  static const std::string GROUP_ALIASES_TABLE_NAME;
35  static const std::string VERSION_ALIASES_TABLE_NAME;
36 
37  static const std::string ACTIVE_GROUP_NAME_CONTEXT;
38  static const std::string ACTIVE_GROUP_NAME_BACKBONE;
39  static const std::string ACTIVE_GROUP_NAME_ITERATE;
40  static const std::string ACTIVE_GROUP_NAME_CONFIGURATION;
41  static const std::string ACTIVE_GROUP_NAME_UNKNOWN;
42 
43  static const uint8_t METADATA_COL_ALIASES;
44  static const uint8_t METADATA_COL_COMMENT;
45  static const uint8_t METADATA_COL_AUTHOR;
46  static const uint8_t METADATA_COL_TIMESTAMP;
47 
48  static const std::set<std::string> contextMemberNames_; // list of context members
49  static const std::set<std::string> backboneMemberNames_; // list of backbone members
50  static const std::set<std::string> iterateMemberNames_; // list of iterate members
51 
52  static const std::set<std::string>& getContextMemberNames(void);
53  static const std::set<std::string>& getBackboneMemberNames(void);
54  static const std::set<std::string>& getIterateMemberNames(void);
55 
56  static std::string encodeURIComponent(const std::string& sourceStr);
57  static const std::string& convertGroupTypeIdToName(int groupTypeId);
58  static int getTypeOfGroup(
59  const std::map<std::string /*name*/, TableVersion /*version*/>& memberMap);
60  static const std::string& getTypeNameOfGroup(
61  const std::map<std::string /*name*/, TableVersion /*version*/>& memberMap);
62 
63  //==============================================================================
64  // Construct/Destruct
65 
66  enum
67  {
68  CONTEXT_TYPE,
69  BACKBONE_TYPE,
70  ITERATE_TYPE,
71  CONFIGURATION_TYPE
72  };
73 
75  virtual ~ConfigurationManager(void);
76 
77  void init(std::string* accumulatedErrors = 0);
78  void destroy(void);
79  void destroyTableGroup(const std::string& theGroup = "", bool onlyDeactivate = false);
80 
81  //==============================================================================
82  // Getters
83 
84  void loadTableGroup(
85  const std::string& configGroupName,
86  TableGroupKey configGroupKey,
87  bool doActivate = false,
88  std::map<std::string, TableVersion>* groupMembers = 0,
89  ProgressBar* progressBar = 0,
90  std::string* accumulateWarnings = 0,
91  std::string* groupComment = 0,
92  std::string* groupAuthor = 0,
93  std::string* groupCreateTime = 0,
94  bool doNotLoadMember = false,
95  std::string* groupTypeString = 0,
96  std::map<std::string /*name*/, std::string /*alias*/>* groupAliases = 0);
97  void loadMemberMap(
98  const std::map<std::string /*name*/, TableVersion /*version*/>& memberMap);
99  TableGroupKey loadConfigurationBackbone(void);
100 
101  //================
102  // getTable
103  // get configuration * with specific configuration type
104  template<class T>
105  const T* getTable(std::string name) const
106  {
107  return (T*)(getTableByName(name));
108  }
109 
110  const TableBase* getTableByName(const std::string& configurationName) const;
111 
112  void dumpActiveConfiguration(const std::string& filePath,
113  const std::string& dumpType);
114 
115  std::map<std::string /*groupAlias*/,
116  std::pair<std::string /*groupName*/, TableGroupKey>>
117  getActiveGroupAliases(void);
118  // Note: this ConfigurationManager::getVersionAliases is called internally and by
119  // ConfigurationManagerRW::getVersionAliases
120  std::map<std::string /*tableName*/, std::map<std::string /*aliasName*/, TableVersion>>
121  getVersionAliases(void) const;
122 
123  std::pair<std::string /*groupName*/, TableGroupKey> getTableGroupFromAlias(
124  std::string systemAlias, ProgressBar* progressBar = 0);
125  std::map<std::string /*groupType*/,
126  std::pair<std::string /*groupName*/, TableGroupKey>>
127  getActiveTableGroups(void) const;
128  const std::map<std::string /*groupType*/,
129  std::pair<std::string /*groupName*/, TableGroupKey>>&
130  getFailedTableGroups(void) const
131  {
132  return lastFailedGroupLoad_;
133  }
134  const std::string& getActiveGroupName(const std::string& type = "") const;
135  TableGroupKey getActiveGroupKey(const std::string& type = "") const;
136 
137  ConfigurationTree getNode(
138  const std::string& nodeString,
139  bool doNotThrowOnBrokenUIDLinks = false) const; //"root/parent/parent/"
140  ConfigurationTree getContextNode(const std::string& contextUID,
141  const std::string& applicationUID) const;
142  ConfigurationTree getSupervisorNode(const std::string& contextUID,
143  const std::string& applicationUID) const;
144  ConfigurationTree getSupervisorTableNode(const std::string& contextUID,
145  const std::string& applicationUID) const;
146 
147  std::vector<std::pair<std::string /*childName*/, ConfigurationTree>> getChildren(
148  std::map<std::string, TableVersion>* memberMap = 0,
149  std::string* accumulatedTreeErrors = 0) const;
150  std::string getFirstPathToNode(const ConfigurationTree& node,
151  const std::string& startPath = "/") const;
152 
153  std::map<std::string, TableVersion> getActiveVersions(void) const;
154 
155  //==============================================================================
156  // Setters/Modifiers
157  std::shared_ptr<TableGroupKey> makeTheTableGroupKey(TableGroupKey key);
158  void restoreActiveTableGroups(bool throwErrors = false,
159  const std::string& pathToActiveGroupsFile = "");
160 
161  private:
162  ConfigurationManager(const std::string& userName); // private constructor called by
163  // ConfigurationManagerRW
164 
165  std::string username_; // user of the configuration is READONLY_USER unless using
166  // ConfigurationManagerRW
167  ConfigurationInterface* theInterface_;
168  std::shared_ptr<TableGroupKey> theConfigurationTableGroupKey_,
169  theContextTableGroupKey_, theBackboneTableGroupKey_, theIterateTableGroupKey_;
170  std::string theConfigurationTableGroup_, theContextTableGroup_,
171  theBackboneTableGroup_, theIterateTableGroup_;
172 
173  std::map<std::string, std::pair<std::string, TableGroupKey>> lastFailedGroupLoad_;
174 
175  std::map<std::string, TableBase*> nameToTableMap_;
176 
177  TableBase groupMetadataTable_; // special table - version saved each time a group is
178  // created
179 };
180 } // namespace ots
181 
182 #endif