00001 #ifndef _ots_ConfigurationManager_h_
00002 #define _ots_ConfigurationManager_h_
00003
00004 #include <string>
00005 #include <map>
00006 #include <set>
00007 #include "otsdaq-core/ConfigurationInterface/ConfigurationInterface.h"
00008 #include "otsdaq-core/ConfigurationInterface/ConfigurationTree.h"
00009 #include "otsdaq-core/ConfigurationDataFormats/ConfigurationVersion.h"
00010
00011 namespace ots {
00012
00013 class ProgressBar;
00014
00015 #define __GET_CONFIG__(X) getConfiguration<X>(QUOTE(X))
00016
00017 class ConfigurationManager
00018 {
00019
00020 friend class ConfigurationManagerRW;
00021
00022 public:
00023
00024 static const std::string READONLY_USER;
00025 static const std::string ACTIVE_GROUP_FILENAME;
00026 static const std::string ALIAS_VERSION_PREAMBLE;
00027 static const std::string SCRATCH_VERSION_ALIAS;
00028 static const std::string XDAQ_CONTEXT_CONFIG_NAME;
00029
00030 static const std::string ACTIVE_GROUP_NAME_CONTEXT;
00031 static const std::string ACTIVE_GROUP_NAME_BACKBONE;
00032 static const std::string ACTIVE_GROUP_NAME_ITERATE;
00033 static const std::string ACTIVE_GROUP_NAME_CONFIGURATION;
00034
00035 enum {
00036 CONTEXT_TYPE,
00037 BACKBONE_TYPE,
00038 ITERATE_TYPE,
00039 CONFIGURATION_TYPE
00040 };
00041
00042 ConfigurationManager ();
00043 virtual ~ConfigurationManager (void);
00044
00045 void init (std::string *accumulatedErrors = 0);
00046 void destroy (void);
00047 void destroyConfigurationGroup (const std::string &theGroup = "", bool onlyDeactivate = false);
00048
00049
00050
00051
00052 template<class T>
00053 const T* getConfiguration(std::string name)
00054 {return (T*) (getConfigurationByName(name));}
00055
00056
00057
00058
00059
00060
00061
00062
00063 void dumpActiveConfiguration (const std::string &filePath, const std::string &dumpType) const;
00064
00065
00066 std::map<std::string, ConfigurationVersion > loadConfigurationGroup (const std::string &configGroupName, ConfigurationGroupKey configGroupKey, bool doActivate=false, ProgressBar* progressBar=0, std::string *accumulateWarnings=0, std::string *groupComment=0, std::string *groupAuthor=0, std::string *groupCreateTime=0, bool doNotLoadMember=false, std::string *groupTypeString=0);
00067 void loadMemberMap (const std::map<std::string /*name*/, ConfigurationVersion /*version*/> &memberMap);
00068 ConfigurationGroupKey loadConfigurationBackbone (void);
00069 void restoreActiveConfigurationGroups(bool throwErrors=false);
00070 int getTypeOfGroup (const std::map<std::string /*name*/, ConfigurationVersion /*version*/> &memberMap);
00071 const std::string& getTypeNameOfGroup (const std::map<std::string /*name*/, ConfigurationVersion /*version*/> &memberMap);
00072 const std::string& convertGroupTypeIdToName (int groupTypeId);
00073
00074
00075
00076 const ConfigurationBase* getConfigurationByName (const std::string &configurationName) const;
00077
00078
00079 std::map<std::string, std::pair<std::string, ConfigurationGroupKey>> getActiveConfigurationGroups (void) const;
00080 const std::string& getActiveGroupName (const std::string& type = "") const;
00081 ConfigurationGroupKey getActiveGroupKey (const std::string& type = "") const;
00082
00083 ConfigurationTree getNode (const std::string &nodeString, bool doNotThrowOnBrokenUIDLinks=false) const;
00084 ConfigurationTree getSupervisorConfigurationNode(const std::string &contextUID, const std::string &applicationUID) const;
00085
00086 std::vector<std::pair<std::string,ConfigurationTree> > getChildren (std::map<std::string, ConfigurationVersion> *memberMap = 0, std::string *accumulatedTreeErrors = 0) const;
00087 std::string getFirstPathToNode (const ConfigurationTree &node, const std::string &startPath = "/") const;
00088
00089
00090
00091 std::map<std::string, std::pair<std::string, ConfigurationGroupKey> > getGroupAliasesConfiguration (void);
00092
00093 std::pair<std::string, ConfigurationGroupKey> getConfigurationGroupFromAlias(std::string systemAlias, ProgressBar* progressBar=0);
00094
00095 std::map<std::string, ConfigurationVersion> getActiveVersions (void) const;
00096
00097 const std::set<std::string>& getContextMemberNames (void) const {return contextMemberNames_;}
00098 const std::set<std::string>& getBackboneMemberNames (void) const {return backboneMemberNames_;}
00099 const std::set<std::string>& getIterateMemberNames (void) const {return iterateMemberNames_;}
00100
00101 static std::string encodeURIComponent(const std::string &sourceStr);
00102
00103
00104
00105 std::shared_ptr<ConfigurationGroupKey> makeTheConfigurationGroupKey(ConfigurationGroupKey key);
00106
00107 private:
00108 ConfigurationManager (const std::string& userName);
00109
00110 std::string username_;
00111 ConfigurationInterface* theInterface_;
00112 std::shared_ptr<ConfigurationGroupKey> theConfigurationGroupKey_, theContextGroupKey_, theBackboneGroupKey_, theIterateGroupKey_;
00113 std::string theConfigurationGroup_, theContextGroup_, theBackboneGroup_, theIterateGroup_;
00114
00115 std::map<std::string, ConfigurationBase* > nameToConfigurationMap_;
00116
00117 const std::set<std::string> contextMemberNames_;
00118 const std::set<std::string> backboneMemberNames_;
00119 const std::set<std::string> iterateMemberNames_;
00120
00121 ConfigurationBase groupMetadataTable_;
00122
00123 };
00124 }
00125
00126 #endif