otsdaq  v2_01_00
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  //==============================================================================
25  //Static members
26  static const std::string READONLY_USER;
27  static const std::string ACTIVE_GROUP_FILENAME;
28  static const std::string ALIAS_VERSION_PREAMBLE;
29  static const std::string SCRATCH_VERSION_ALIAS;
30  static const std::string XDAQ_CONTEXT_CONFIG_NAME;
31 
32  static const std::string ACTIVE_GROUP_NAME_CONTEXT;
33  static const std::string ACTIVE_GROUP_NAME_BACKBONE;
34  static const std::string ACTIVE_GROUP_NAME_ITERATE;
35  static const std::string ACTIVE_GROUP_NAME_CONFIGURATION;
36 
37  static const std::set<std::string> contextMemberNames_; //list of context members
38  static const std::set<std::string> backboneMemberNames_; //list of backbone members
39  static const std::set<std::string> iterateMemberNames_; //list of iterate members
40 
41  static const std::set<std::string>& getContextMemberNames (void);
42  static const std::set<std::string>& getBackboneMemberNames (void);
43  static const std::set<std::string>& getIterateMemberNames (void);
44 
45  static std::string encodeURIComponent (const std::string &sourceStr);
46  static const std::string& convertGroupTypeIdToName (int groupTypeId);
47  static int getTypeOfGroup (const std::map<std::string /*name*/, ConfigurationVersion /*version*/> &memberMap);
48  static const std::string& getTypeNameOfGroup (const std::map<std::string /*name*/, ConfigurationVersion /*version*/> &memberMap);
49 
50  //==============================================================================
51  //Construct/Destruct
52 
53  enum {
54  CONTEXT_TYPE,
55  BACKBONE_TYPE,
56  ITERATE_TYPE,
57  CONFIGURATION_TYPE
58  };
59 
61  virtual ~ConfigurationManager (void);
62 
63  void init (std::string *accumulatedErrors = 0);
64  void destroy (void);
65  void destroyConfigurationGroup (const std::string &theGroup = "", bool onlyDeactivate = false);
66 
67 
68 
69  //==============================================================================
70  //Getters
71 
72  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);
73  void loadMemberMap (const std::map<std::string /*name*/, ConfigurationVersion /*version*/> &memberMap);
74  ConfigurationGroupKey loadConfigurationBackbone (void);
75 
76  //================
77  //getConfiguration
78  // get configuration * with specific configuration type
79  template<class T>
80  const T* getConfiguration(std::string name) const
81  {return (T*) (getConfigurationByName(name));}
82 
83  const ConfigurationBase* getConfigurationByName (const std::string &configurationName) const;
84 
85  void dumpActiveConfiguration (const std::string &filePath, const std::string &dumpType) const;
86 
87  // map<type, pair <groupName , ConfigurationGroupKey>>
88  std::map<std::string, std::pair<std::string, ConfigurationGroupKey>> getActiveConfigurationGroups (void) const;
89  const std::string& getActiveGroupName (const std::string& type = "") const;
90  ConfigurationGroupKey getActiveGroupKey (const std::string& type = "") const;
91 
92  ConfigurationTree getNode (const std::string &nodeString, bool doNotThrowOnBrokenUIDLinks=false) const; //"root/parent/parent/"
93  ConfigurationTree getContextNode (const std::string &contextUID, const std::string &applicationUID) const;
94  ConfigurationTree getSupervisorNode (const std::string &contextUID, const std::string &applicationUID) const;
95  ConfigurationTree getSupervisorConfigurationNode(const std::string &contextUID, const std::string &applicationUID) const;
96 
97 
98 
99  // map<name , version
100  std::vector<std::pair<std::string,ConfigurationTree> > getChildren (std::map<std::string, ConfigurationVersion> *memberMap = 0, std::string *accumulatedTreeErrors = 0) const;
101  std::string getFirstPathToNode (const ConfigurationTree &node, const std::string &startPath = "/") const;
102 
103 
104  // map<alias , pair<group name, ConfigurationGroupKey> >
105  std::map<std::string, std::pair<std::string, ConfigurationGroupKey> > getGroupAliasesConfiguration (void);
106  // pair<group name , ConfigurationGroupKey>
107  std::pair<std::string, ConfigurationGroupKey> getConfigurationGroupFromAlias(std::string systemAlias, ProgressBar* progressBar=0);
108 
109  std::map<std::string, ConfigurationVersion> getActiveVersions (void) const;
110 
111  //==============================================================================
112  //Setters/Modifiers
113  std::shared_ptr<ConfigurationGroupKey> makeTheConfigurationGroupKey(ConfigurationGroupKey key);
114  void restoreActiveConfigurationGroups(bool throwErrors=false);
115 
116 
117 private:
118  ConfigurationManager (const std::string& userName); //private constructor called by ConfigurationManagerRW
119 
120  std::string username_; //user of the configuration is READONLY_USER unless using ConfigurationManagerRW
121  ConfigurationInterface* theInterface_;
122  std::shared_ptr<ConfigurationGroupKey> theConfigurationGroupKey_, theContextGroupKey_, theBackboneGroupKey_, theIterateGroupKey_;
123  std::string theConfigurationGroup_, theContextGroup_, theBackboneGroup_, theIterateGroup_;
124 
125  std::map<std::string, ConfigurationBase* > nameToConfigurationMap_;
126 
127 
128  ConfigurationBase groupMetadataTable_; //special table - version saved each time a group is created
129 
130 
131 };
132 }
133 
134 #endif