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