$treeview $search $mathjax $extrastylesheet
otsdaq
v2_03_00
$projectbrief
|
$projectbrief
|
$searchbox |
00001 #ifndef _ots_ConfigurationManager_h_ 00002 #define _ots_ConfigurationManager_h_ 00003 00004 #include <map> 00005 #include <set> 00006 #include <string> 00007 00008 #include "otsdaq-core/ConfigurationInterface/ConfigurationInterface.h" 00009 #include "otsdaq-core/ConfigurationInterface/ConfigurationTree.h" 00010 #include "otsdaq-core/TableCore/TableVersion.h" 00011 00012 namespace ots 00013 { 00014 class ProgressBar; 00015 00016 #define __GET_CONFIG__(X) getTable<X>(QUOTE(X)) 00017 00018 class ConfigurationManager 00019 { 00020 // ConfigurationManagerRW is a "Friend" class of ConfigurationManager so has access to 00021 // private members. 00022 friend class ConfigurationManagerRW; 00023 00024 public: 00025 //============================================================================== 00026 // Static members 00027 static const std::string READONLY_USER; 00028 static const std::string ACTIVE_GROUPS_FILENAME; 00029 static const std::string ALIAS_VERSION_PREAMBLE; 00030 static const std::string SCRATCH_VERSION_ALIAS; 00031 00032 static const std::string XDAQ_CONTEXT_TABLE_NAME; 00033 static const std::string XDAQ_APPLICATION_TABLE_NAME; 00034 static const std::string GROUP_ALIASES_TABLE_NAME; 00035 static const std::string VERSION_ALIASES_TABLE_NAME; 00036 00037 static const std::string ACTIVE_GROUP_NAME_CONTEXT; 00038 static const std::string ACTIVE_GROUP_NAME_BACKBONE; 00039 static const std::string ACTIVE_GROUP_NAME_ITERATE; 00040 static const std::string ACTIVE_GROUP_NAME_CONFIGURATION; 00041 static const std::string ACTIVE_GROUP_NAME_UNKNOWN; 00042 00043 static const uint8_t METADATA_COL_ALIASES; 00044 static const uint8_t METADATA_COL_COMMENT; 00045 static const uint8_t METADATA_COL_AUTHOR; 00046 static const uint8_t METADATA_COL_TIMESTAMP; 00047 00048 static const std::set<std::string> contextMemberNames_; // list of context members 00049 static const std::set<std::string> backboneMemberNames_; // list of backbone members 00050 static const std::set<std::string> iterateMemberNames_; // list of iterate members 00051 00052 static const std::set<std::string>& getContextMemberNames(void); 00053 static const std::set<std::string>& getBackboneMemberNames(void); 00054 static const std::set<std::string>& getIterateMemberNames(void); 00055 00056 static std::string encodeURIComponent(const std::string& sourceStr); 00057 static const std::string& convertGroupTypeIdToName(int groupTypeId); 00058 static int getTypeOfGroup( 00059 const std::map<std::string /*name*/, TableVersion /*version*/>& memberMap); 00060 static const std::string& getTypeNameOfGroup( 00061 const std::map<std::string /*name*/, TableVersion /*version*/>& memberMap); 00062 00063 //============================================================================== 00064 // Construct/Destruct 00065 00066 enum 00067 { 00068 CONTEXT_TYPE, 00069 BACKBONE_TYPE, 00070 ITERATE_TYPE, 00071 CONFIGURATION_TYPE 00072 }; 00073 00074 ConfigurationManager(); 00075 virtual ~ConfigurationManager(void); 00076 00077 void init(std::string* accumulatedErrors = 0); 00078 void destroy(void); 00079 void destroyTableGroup(const std::string& theGroup = "", bool onlyDeactivate = false); 00080 00081 //============================================================================== 00082 // Getters 00083 00084 void loadTableGroup( 00085 const std::string& configGroupName, 00086 TableGroupKey configGroupKey, 00087 bool doActivate = false, 00088 std::map<std::string, TableVersion>* groupMembers = 0, 00089 ProgressBar* progressBar = 0, 00090 std::string* accumulateWarnings = 0, 00091 std::string* groupComment = 0, 00092 std::string* groupAuthor = 0, 00093 std::string* groupCreateTime = 0, 00094 bool doNotLoadMember = false, 00095 std::string* groupTypeString = 0, 00096 std::map<std::string /*name*/, std::string /*alias*/>* groupAliases = 0); 00097 void loadMemberMap( 00098 const std::map<std::string /*name*/, TableVersion /*version*/>& memberMap); 00099 TableGroupKey loadConfigurationBackbone(void); 00100 00101 //================ 00102 // getTable 00103 // get configuration * with specific configuration type 00104 template<class T> 00105 const T* getTable(std::string name) const 00106 { 00107 return (T*)(getTableByName(name)); 00108 } 00109 00110 const TableBase* getTableByName(const std::string& configurationName) const; 00111 00112 void dumpActiveConfiguration(const std::string& filePath, 00113 const std::string& dumpType); 00114 00115 std::map<std::string /*groupAlias*/, 00116 std::pair<std::string /*groupName*/, TableGroupKey>> 00117 getActiveGroupAliases(void); 00118 // Note: this ConfigurationManager::getVersionAliases is called internally and by 00119 // ConfigurationManagerRW::getVersionAliases 00120 std::map<std::string /*tableName*/, std::map<std::string /*aliasName*/, TableVersion>> 00121 getVersionAliases(void) const; 00122 00123 std::pair<std::string /*groupName*/, TableGroupKey> getTableGroupFromAlias( 00124 std::string systemAlias, ProgressBar* progressBar = 0); 00125 std::map<std::string /*groupType*/, 00126 std::pair<std::string /*groupName*/, TableGroupKey>> 00127 getActiveTableGroups(void) const; 00128 const std::map<std::string /*groupType*/, 00129 std::pair<std::string /*groupName*/, TableGroupKey>>& 00130 getFailedTableGroups(void) const 00131 { 00132 return lastFailedGroupLoad_; 00133 } 00134 const std::string& getActiveGroupName(const std::string& type = "") const; 00135 TableGroupKey getActiveGroupKey(const std::string& type = "") const; 00136 00137 ConfigurationTree getNode( 00138 const std::string& nodeString, 00139 bool doNotThrowOnBrokenUIDLinks = false) const; //"root/parent/parent/" 00140 ConfigurationTree getContextNode(const std::string& contextUID, 00141 const std::string& applicationUID) const; 00142 ConfigurationTree getSupervisorNode(const std::string& contextUID, 00143 const std::string& applicationUID) const; 00144 ConfigurationTree getSupervisorTableNode(const std::string& contextUID, 00145 const std::string& applicationUID) const; 00146 00147 std::vector<std::pair<std::string /*childName*/, ConfigurationTree>> getChildren( 00148 std::map<std::string, TableVersion>* memberMap = 0, 00149 std::string* accumulatedTreeErrors = 0) const; 00150 std::string getFirstPathToNode(const ConfigurationTree& node, 00151 const std::string& startPath = "/") const; 00152 00153 std::map<std::string, TableVersion> getActiveVersions(void) const; 00154 00155 //============================================================================== 00156 // Setters/Modifiers 00157 std::shared_ptr<TableGroupKey> makeTheTableGroupKey(TableGroupKey key); 00158 void restoreActiveTableGroups(bool throwErrors = false, 00159 const std::string& pathToActiveGroupsFile = ""); 00160 00161 private: 00162 ConfigurationManager(const std::string& userName); // private constructor called by 00163 // ConfigurationManagerRW 00164 00165 std::string username_; // user of the configuration is READONLY_USER unless using 00166 // ConfigurationManagerRW 00167 ConfigurationInterface* theInterface_; 00168 std::shared_ptr<TableGroupKey> theConfigurationTableGroupKey_, 00169 theContextTableGroupKey_, theBackboneTableGroupKey_, theIterateTableGroupKey_; 00170 std::string theConfigurationTableGroup_, theContextTableGroup_, 00171 theBackboneTableGroup_, theIterateTableGroup_; 00172 00173 std::map<std::string, std::pair<std::string, TableGroupKey>> lastFailedGroupLoad_; 00174 00175 std::map<std::string, TableBase*> nameToTableMap_; 00176 00177 TableBase groupMetadataTable_; // special table - version saved each time a group is 00178 // created 00179 }; 00180 } // namespace ots 00181 00182 #endif