otsdaq  v1_01_04
 All Classes Namespaces Functions
ConfigurationManager.h
1 #ifndef _ots_ConfigurationManager_h_
2 #define _ots_ConfigurationManager_h_
3 
4 #include <string>
5 #include <map>
6 #include <set>
7 #include "otsdaq-core/ConfigurationInterface/ConfigurationInterface.h"
8 #include "otsdaq-core/ConfigurationInterface/ConfigurationTree.h"
9 #include "otsdaq-core/ConfigurationDataFormats/ConfigurationVersion.h"
10 
11 namespace ots {
12 
13 class ProgressBar;
14 
15 #define __GET_CONFIG__(X) getConfiguration<X>(QUOTE(X))
16 
18 {
19  //ConfigurationManagerRW is a "Friend" class of ConfigurationManager so has access to private members.
20  friend class ConfigurationManagerRW;
21 
22 public:
23 
24  static const std::string READONLY_USER;
25  static const std::string ACTIVE_GROUP_FILENAME;
26  static const std::string ALIAS_VERSION_PREAMBLE;
27  static const std::string SCRATCH_VERSION_ALIAS;
28  static const std::string XDAQ_CONTEXT_CONFIG_NAME;
29 
30  static const std::string ACTIVE_GROUP_NAME_CONTEXT;
31  static const std::string ACTIVE_GROUP_NAME_BACKBONE;
32  static const std::string ACTIVE_GROUP_NAME_ITERATE;
33  static const std::string ACTIVE_GROUP_NAME_CONFIGURATION;
34 
35  enum {
36  CONTEXT_TYPE,
37  BACKBONE_TYPE,
38  ITERATE_TYPE,
39  CONFIGURATION_TYPE
40  };
41 
43  virtual ~ConfigurationManager (void);
44 
45  void init (std::string *accumulatedErrors = 0);
46  void destroy (void);
47  void destroyConfigurationGroup (const std::string &theGroup = "", bool onlyDeactivate = false);
48 
49  //==============================================================================
50  //getConfiguration
51  // get configuration * with specific configuration type
52  template<class T>
53  const T* getConfiguration(std::string name)
54  {return (T*) (getConfigurationByName(name));}
55  //==============================================================================
56 
57 
58 
59  //FIXME.. don' use activateConfigurationGroupKey.. instead "Activate" a global config
60  //void activateConfigurationGroupKey (std::shared_ptr<const ConfigurationGroupKey> ConfigurationGroupKey, unsigned int supervisorInstance);
61 
62 
63  void dumpActiveConfiguration (const std::string &filePath, const std::string &dumpType) const;
64 
65  // map<name , ConfigurationVersion >
66  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);
67  void loadMemberMap (const std::map<std::string /*name*/, ConfigurationVersion /*version*/> &memberMap);
68  ConfigurationGroupKey loadConfigurationBackbone (void);
69  void restoreActiveConfigurationGroups(bool throwErrors=false);
70  int getTypeOfGroup (const std::map<std::string /*name*/, ConfigurationVersion /*version*/> &memberMap);
71  const std::string& getTypeNameOfGroup (const std::map<std::string /*name*/, ConfigurationVersion /*version*/> &memberMap);
72  const std::string& convertGroupTypeIdToName (int groupTypeId);
73 
74  //==============================================================================
75  //Getters
76  const ConfigurationBase* getConfigurationByName (const std::string &configurationName) const;
77 
78  // map<type, pair <groupName , ConfigurationGroupKey>>
79  std::map<std::string, std::pair<std::string, ConfigurationGroupKey>> getActiveConfigurationGroups (void) const;
80  const std::string& getActiveGroupName (const std::string& type = "") const;
81  ConfigurationGroupKey getActiveGroupKey (const std::string& type = "") const;
82 
83  ConfigurationTree getNode (const std::string &nodeString, bool doNotThrowOnBrokenUIDLinks=false) const; //"root/parent/parent/"
84  ConfigurationTree getSupervisorConfigurationNode(const std::string &contextUID, const std::string &applicationUID) const;
85  // map<name , version
86  std::vector<std::pair<std::string,ConfigurationTree> > getChildren (std::map<std::string, ConfigurationVersion> *memberMap = 0, std::string *accumulatedTreeErrors = 0) const;
87  std::string getFirstPathToNode (const ConfigurationTree &node, const std::string &startPath = "/") const;
88 
89 
90  // map<alias , pair<group name, ConfigurationGroupKey> >
91  std::map<std::string, std::pair<std::string, ConfigurationGroupKey> > getGroupAliasesConfiguration (void);
92  // pair<group name , ConfigurationGroupKey>
93  std::pair<std::string, ConfigurationGroupKey> getConfigurationGroupFromAlias(std::string systemAlias, ProgressBar* progressBar=0);
94 
95  std::map<std::string, ConfigurationVersion> getActiveVersions (void) const;
96 
97  const std::set<std::string>& getContextMemberNames (void) const {return contextMemberNames_;}
98  const std::set<std::string>& getBackboneMemberNames (void) const {return backboneMemberNames_;}
99  const std::set<std::string>& getIterateMemberNames (void) const {return iterateMemberNames_;}
100 
101  static std::string encodeURIComponent(const std::string &sourceStr);
102 
103  //==============================================================================
104  //Setters/Modifiers
105  std::shared_ptr<ConfigurationGroupKey> makeTheConfigurationGroupKey(ConfigurationGroupKey key);
106 
107 private:
108  ConfigurationManager (const std::string& userName); //private constructor called by ConfigurationManagerRW
109 
110  std::string username_; //user of the configuration is READONLY_USER unless using ConfigurationManagerRW
111  ConfigurationInterface* theInterface_;
112  std::shared_ptr<ConfigurationGroupKey> theConfigurationGroupKey_, theContextGroupKey_, theBackboneGroupKey_, theIterateGroupKey_;
113  std::string theConfigurationGroup_, theContextGroup_, theBackboneGroup_, theIterateGroup_;
114 
115  std::map<std::string, ConfigurationBase* > nameToConfigurationMap_;
116 
117  const std::set<std::string> contextMemberNames_; //list of context members
118  const std::set<std::string> backboneMemberNames_; //list of backbone members
119  const std::set<std::string> iterateMemberNames_; //list of iterate members
120 
121  ConfigurationBase groupMetadataTable_; //special table - version saved each time a group is created
122 
123 };
124 }
125 
126 #endif