otsdaq  v1_01_03
 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_CONFIGURATION;
33 
34  enum {
35  CONTEXT_TYPE,
36  BACKBONE_TYPE,
37  CONFIGURATION_TYPE
38  };
39 
41  virtual ~ConfigurationManager (void);
42 
43  void init (std::string *accumulatedErrors = 0);
44  void destroy (void);
45  void destroyConfigurationGroup (const std::string &theGroup = "", bool onlyDeactivate = false);
46 
47  //==============================================================================
48  //getConfiguration
49  // get configuration * with specific configuration type
50  template<class T>
51  const T* getConfiguration(std::string name)
52  {return (T*) (getConfigurationByName(name));}
53  //==============================================================================
54 
55 
56 
57  //FIXME.. don' use activateConfigurationGroupKey.. instead "Activate" a global config
58  //void activateConfigurationGroupKey (std::shared_ptr<const ConfigurationGroupKey> ConfigurationGroupKey, unsigned int supervisorInstance);
59 
60 
61  void dumpActiveConfiguration (const std::string &filePath, const std::string &dumpType) const;
62 
63  // map<name , ConfigurationVersion >
64  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);
65  void loadMemberMap (const std::map<std::string /*name*/, ConfigurationVersion /*version*/> &memberMap);
66  ConfigurationGroupKey loadConfigurationBackbone (void);
67  void restoreActiveConfigurationGroups(bool throwErrors=false);
68  int getTypeOfGroup (const std::map<std::string /*name*/, ConfigurationVersion /*version*/> &memberMap);
69  const std::string& getTypeNameOfGroup (const std::map<std::string /*name*/, ConfigurationVersion /*version*/> &memberMap);
70  const std::string& convertGroupTypeIdToName (int groupTypeId);
71 
72  //==============================================================================
73  //Getters
74  const ConfigurationBase* getConfigurationByName (const std::string &configurationName) const;
75 
76  // map<type, pair <groupName , ConfigurationGroupKey>>
77  std::map<std::string, std::pair<std::string, ConfigurationGroupKey>> getActiveConfigurationGroups (void) const;
78 
79  ConfigurationTree getNode (const std::string &nodeString, bool doNotThrowOnBrokenUIDLinks=false) const; //"root/parent/parent/"
80  ConfigurationTree getSupervisorConfigurationNode(const std::string &contextUID, const std::string &applicationUID) const;
81  // map<name , version
82  std::vector<std::pair<std::string,ConfigurationTree> > getChildren (std::map<std::string, ConfigurationVersion> *memberMap = 0, std::string *accumulatedTreeErrors = 0) const;
83  std::string getFirstPathToNode (const ConfigurationTree &node, const std::string &startPath = "/") const;
84 
85 
86  // map<alias , pair<group name, ConfigurationGroupKey> >
87  std::map<std::string, std::pair<std::string, ConfigurationGroupKey> > getGroupAliasesConfiguration (void);
88  // pair<group name , ConfigurationGroupKey>
89  std::pair<std::string, ConfigurationGroupKey> getConfigurationGroupFromAlias(std::string runType, ProgressBar* progressBar=0);
90 
91  std::map<std::string, ConfigurationVersion> getActiveVersions (void) const;
92 
93  const std::set<std::string>& getContextMemberNames (void) const {return contextMemberNames_;}
94  const std::set<std::string>& getBackboneMemberNames (void) const {return backboneMemberNames_;}
95 
96  static std::string encodeURIComponent(const std::string &sourceStr);
97 
98  //==============================================================================
99  //Setters/Modifiers
100  std::shared_ptr<ConfigurationGroupKey> makeTheConfigurationGroupKey(ConfigurationGroupKey key);
101 
102 private:
103  ConfigurationManager (const std::string& userName); //private constructor called by ConfigurationManagerRW
104 
105  std::string username_; //user of the configuration is READONLY_USER unless using ConfigurationManagerRW
106  ConfigurationInterface* theInterface_;
107  std::shared_ptr<ConfigurationGroupKey> theConfigurationGroupKey_, theContextGroupKey_, theBackboneGroupKey_;
108  std::string theConfigurationGroup_, theContextGroup_, theBackboneGroup_;
109 
110  std::map<std::string, ConfigurationBase* > nameToConfigurationMap_;
111 
112  const std::set<std::string> contextMemberNames_; //list of context members
113  const std::set<std::string> backboneMemberNames_; //list of backbone members
114 
115  ConfigurationBase groupMetadataTable_; //special table - version saved each time a group is created
116 
117 };
118 }
119 
120 #endif