otsdaq  v2_00_00
ConfigurationBase.h
1 #ifndef _ots_ConfigurationBase_h_
2 #define _ots_ConfigurationBase_h_
3 
4 #include "otsdaq-core/ConfigurationDataFormats/ConfigurationView.h"
5 #include "otsdaq-core/ConfigurationDataFormats/ConfigurationVersion.h"
6 #include <string>
7 #include <map>
8 #include <list>
9 
10 namespace ots
11 {
12 
13 class ConfigurationManager;
14 
15 //e.g. configManager->__SELF_NODE__; //to get node referring to this configuration
16 #define __SELF_NODE__ getNode(getConfigurationName())
17 
19 {
20 
21 public:
22 
23  const unsigned int MAX_VIEWS_IN_CACHE; //Each inheriting configuration class could have varying amounts of cache
24 
26  ConfigurationBase (std::string configurationName, std::string *accumulatedExceptions=0);
27 
28  virtual ~ConfigurationBase (void);
29 
30  //Methods
31  virtual void init (ConfigurationManager *configManager);
32 
33  void destroy (void) {;}
34  void reset (bool keepTemporaryVersions=false);
35  void deactivate (void);
36  bool isActive (void);
37 
38  void print (std::ostream &out = std::cout) const; //always prints active view
39 
40  std::string getTypeId (void);
41 
42  void setupMockupView (ConfigurationVersion version);
43  void changeVersionAndActivateView (ConfigurationVersion temporaryVersion, ConfigurationVersion version);
44  bool isStored (const ConfigurationVersion &version) const;
45  bool eraseView (ConfigurationVersion version);
46  void trimCache (unsigned int trimSize = -1);
47  void trimTemporary (ConfigurationVersion targetVersion = ConfigurationVersion());
48  ConfigurationVersion checkForDuplicate (ConfigurationVersion needleVersion, ConfigurationVersion ignoreVersion = ConfigurationVersion()) const;
49 
50  //Getters
51  const std::string& getConfigurationName (void) const;
52  const std::string& getConfigurationDescription (void) const;
53  std::set<ConfigurationVersion> getStoredVersions (void) const;
54 
55  const ConfigurationView& getView (void) const;
56  ConfigurationView* getViewP (void);
57  ConfigurationView* getMockupViewP (void);
58  const ConfigurationVersion& getViewVersion (void) const; //always the active one
59 
60  ConfigurationView* getTemporaryView (ConfigurationVersion temporaryVersion);
61  ConfigurationVersion getNextTemporaryVersion () const;
62  ConfigurationVersion getNextVersion () const;
63 
64  //Setters
65  void setConfigurationName (const std::string &configurationName);
66  void setConfigurationDescription (const std::string &configurationDescription);
67  bool setActiveView (ConfigurationVersion version);
68  ConfigurationVersion copyView (const ConfigurationView &sourceView, ConfigurationVersion destinationVersion, const std::string &author) throw(std::runtime_error);
69 
70  ConfigurationVersion createTemporaryView (ConfigurationVersion sourceViewVersion = ConfigurationVersion(), ConfigurationVersion destTemporaryViewVersion = ConfigurationVersion::getNextTemporaryVersion()); //source of -1, from MockUp, else from valid view version
71 
72  static std::string convertToCaps (std::string &str, bool isConfigName=false) throw(std::runtime_error);
73 
74  bool latestAndMockupColumnNumberMismatch (void) const;
75 
76  unsigned int getNumberOfStoredViews (void) const;
77 
78 protected:
79  std::string configurationName_;
80  std::string configurationDescription_;
81 
82  ConfigurationView* activeConfigurationView_;
83  ConfigurationView mockupConfigurationView_;
84 
85  //Version and data associated to make it work like a cache.
86  //It will be very likely just 1 version
87  //NOTE: must be very careful to setVersion of view after manipulating (e.g. copy from different version view)
88  std::map<ConfigurationVersion, ConfigurationView> configurationViews_;
89 
90 };
91 }
92 
93 #endif