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_CONFIGURATION;
00033
00034 enum {
00035 CONTEXT_TYPE,
00036 BACKBONE_TYPE,
00037 CONFIGURATION_TYPE
00038 };
00039
00040 ConfigurationManager ();
00041 virtual ~ConfigurationManager (void);
00042
00043 void init (std::string *accumulatedErrors = 0);
00044 void destroy (void);
00045 void destroyConfigurationGroup (const std::string &theGroup = "", bool onlyDeactivate = false);
00046
00047
00048
00049
00050 template<class T>
00051 const T* getConfiguration(std::string name)
00052 {return (T*) (getConfigurationByName(name));}
00053
00054
00055
00056
00057
00058
00059
00060
00061 void dumpActiveConfiguration (const std::string &filePath, const std::string &dumpType) const;
00062
00063
00064 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);
00065 void loadMemberMap (const std::map<std::string /*name*/, ConfigurationVersion /*version*/> &memberMap);
00066 ConfigurationGroupKey loadConfigurationBackbone (void);
00067 void restoreActiveConfigurationGroups(bool throwErrors=false);
00068 int getTypeOfGroup (const std::map<std::string /*name*/, ConfigurationVersion /*version*/> &memberMap);
00069 const std::string& getTypeNameOfGroup (const std::map<std::string /*name*/, ConfigurationVersion /*version*/> &memberMap);
00070 const std::string& convertGroupTypeIdToName (int groupTypeId);
00071
00072
00073
00074 const ConfigurationBase* getConfigurationByName (const std::string &configurationName) const;
00075
00076
00077 std::map<std::string, std::pair<std::string, ConfigurationGroupKey>> getActiveConfigurationGroups (void) const;
00078
00079 ConfigurationTree getNode (const std::string &nodeString, bool doNotThrowOnBrokenUIDLinks=false) const;
00080 ConfigurationTree getSupervisorConfigurationNode(const std::string &contextUID, const std::string &applicationUID) const;
00081
00082 std::vector<std::pair<std::string,ConfigurationTree> > getChildren (std::map<std::string, ConfigurationVersion> *memberMap = 0, std::string *accumulatedTreeErrors = 0) const;
00083 std::string getFirstPathToNode (const ConfigurationTree &node, const std::string &startPath = "/") const;
00084
00085
00086
00087 std::map<std::string, std::pair<std::string, ConfigurationGroupKey> > getGroupAliasesConfiguration (void);
00088
00089 std::pair<std::string, ConfigurationGroupKey> getConfigurationGroupFromAlias(std::string runType, ProgressBar* progressBar=0);
00090
00091 std::map<std::string, ConfigurationVersion> getActiveVersions (void) const;
00092
00093 const std::set<std::string>& getContextMemberNames (void) const {return contextMemberNames_;}
00094 const std::set<std::string>& getBackboneMemberNames (void) const {return backboneMemberNames_;}
00095
00096 static std::string encodeURIComponent(const std::string &sourceStr);
00097
00098
00099
00100 std::shared_ptr<ConfigurationGroupKey> makeTheConfigurationGroupKey(ConfigurationGroupKey key);
00101
00102 private:
00103 ConfigurationManager (const std::string& userName);
00104
00105 std::string username_;
00106 ConfigurationInterface* theInterface_;
00107 std::shared_ptr<ConfigurationGroupKey> theConfigurationGroupKey_, theContextGroupKey_, theBackboneGroupKey_;
00108 std::string theConfigurationGroup_, theContextGroup_, theBackboneGroup_;
00109
00110 std::map<std::string, ConfigurationBase* > nameToConfigurationMap_;
00111
00112 const std::set<std::string> contextMemberNames_;
00113 const std::set<std::string> backboneMemberNames_;
00114
00115 ConfigurationBase groupMetadataTable_;
00116
00117 };
00118 }
00119
00120 #endif