CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
DataProxy.h
Go to the documentation of this file.
1 #ifndef CondCore_ESSources_DataProxy_H
2 #define CondCore_ESSources_DataProxy_H
3 //#include <iostream>
4 #include <string>
5 #include "boost/shared_ptr.hpp"
6 
7 // user include files
9 
11 
12 // expose a cond::PayloadProxy as a eventsetup::DataProxy
13 template< class RecordT, class DataT >
14  class DataProxy : public edm::eventsetup::DataProxyTemplate<RecordT, DataT>{
15  public:
17  typedef boost::shared_ptr<cond::PayloadProxy<DataT> > DataP;
18 
19  explicit DataProxy(boost::shared_ptr<cond::PayloadProxy<DataT> > pdata) : m_data(pdata) {
20 
21  }
22  //virtual ~DataProxy();
23 
24  // ---------- const member functions ---------------------
25 
26  // ---------- static member functions --------------------
27 
28  // ---------- member functions ---------------------------
29 
30  protected:
31  virtual const DataT* make(const RecordT&, const edm::eventsetup::DataKey&) {
32  m_data->make();
33  return &(*m_data)();
34  }
35  virtual void invalidateCache() {
36  // don't, preserve data for future access
37  // m_data->invalidateCache();
38  }
39  virtual void invalidateTransientCache() {
40  m_data->invalidateCache();
41  }
42  private:
43  //DataProxy(); // stop default
44  const DataProxy& operator=( const DataProxy& ); // stop default
45  // ---------- member data --------------------------------
46 
47  boost::shared_ptr<cond::PayloadProxy<DataT> > m_data;
48 
49 };
50 
51 namespace cond {
52 
53  /* ABI bridging between the cond world and eventsetup world
54  * keep them separated!
55  */
57  public:
58  typedef boost::shared_ptr<cond::BasePayloadProxy> ProxyP;
59  typedef boost::shared_ptr<edm::eventsetup::DataProxy> edmProxyP;
60 
61  // limitation of plugin manager...
62  typedef std::pair< std::string, std::string> Args;
63 
64  virtual edm::eventsetup::TypeTag type() const=0;
65  virtual ProxyP proxy() const=0;
66  virtual edmProxyP edmProxy() const=0;
67 
68 
70  explicit DataProxyWrapperBase(std::string const & il);
71  // late initialize (to allow to load ALL library first)
72  virtual void lateInit(cond::DbSession& session, const std::string & iovtoken,
73  std::string const & il, std::string const & cs, std::string const & tag)=0;
74  virtual void lateInit(cond::DbSession& session, const std::string & tag,
75  std::string const & il, std::string const & cs)=0;
76 
77  void addInfo(std::string const & il, std::string const & cs, std::string const & tag);
78 
79 
80  virtual ~DataProxyWrapperBase();
81  std::string const & label() const { return m_label;}
82 
83  std::string const & connString() const { return m_connString;}
84  std::string const & tag() const { return m_tag;}
85 
86  private:
87  std::string m_label;
88  std::string m_connString;
89  std::string m_tag;
90 
91  };
92 }
93 
94 /* bridge between the cond world and eventsetup world
95  * keep them separated!
96  */
97 template< class RecordT, class DataT >
99 public:
100  typedef ::DataProxy<RecordT,DataT> DataProxy;
102  typedef boost::shared_ptr<PayProxy> DataP;
103 
104 
106  const std::string & iovtoken, std::string const & ilabel, const char * source=0) :
107  cond::DataProxyWrapperBase(ilabel),
108  m_proxy(new PayProxy(session,iovtoken,true, source)), //errorPolicy set to true: PayloadProxy should catch and re-throw ORA exceptions
110  //NOTE: We do this so that the type 'DataT' will get registered
111  // when the plugin is dynamically loaded
112  m_type = edm::eventsetup::DataKey::makeTypeTag<DataT>();
113  }
114 
115  // constructor from plugin...
116  explicit DataProxyWrapper(const char * source=0) : m_source (source ? source : "") {
117  //NOTE: We do this so that the type 'DataT' will get registered
118  // when the plugin is dynamically loaded
119  m_type = edm::eventsetup::DataKey::makeTypeTag<DataT>();
120  }
121 
122  // late initialize (to allow to load ALL library first)
123  virtual void lateInit(cond::DbSession& session, const std::string & tag,
124  std::string const & il, std::string const & cs) {
125  m_proxy.reset(new PayProxy(session,true, //errorPolicy set to true: PayloadProxy should catch and re-throw ORA exceptions
126  m_source.empty() ? (const char *)(0) : m_source.c_str()
127  )
128  );
129  m_proxy->loadTag( tag);
130  m_edmProxy.reset(new DataProxy(m_proxy));
131  addInfo(il, cs, tag);
132  }
133  // late initialize (to allow to load ALL library first)
134  virtual void lateInit(cond::DbSession& session, const std::string & iovtoken,
135  std::string const & il, std::string const & cs, std::string const & tag) {
136  m_proxy.reset(new PayProxy(session,iovtoken,true, //errorPolicy set to true: PayloadProxy should catch and re-throw ORA exceptions
137  m_source.empty() ? (const char *)(0) : m_source.c_str()
138  )
139  );
140  m_edmProxy.reset(new DataProxy(m_proxy));
141  addInfo(il, cs, tag);
142  }
143 
144  virtual edm::eventsetup::TypeTag type() const { return m_type;}
145  virtual ProxyP proxy() const { return m_proxy;}
146  virtual edmProxyP edmProxy() const { return m_edmProxy;}
147 
148 private:
149  std::string m_source;
151  boost::shared_ptr<cond::PayloadProxy<DataT> > m_proxy;
153 
154 };
155 
156 
157 #endif /* CONDCORE_PLUGINSYSTEM_DATAPROXY_H */
virtual edm::eventsetup::TypeTag type() const
Definition: DataProxy.h:144
auto_ptr< ClusterSequence > cs
::DataProxy< RecordT, DataT > DataProxy
Definition: DataProxy.h:100
void addInfo(std::string const &il, std::string const &cs, std::string const &tag)
Definition: ProxyFactory.cc:25
virtual void lateInit(cond::DbSession &session, const std::string &iovtoken, std::string const &il, std::string const &cs, std::string const &tag)=0
virtual edm::eventsetup::TypeTag type() const =0
boost::shared_ptr< cond::PayloadProxy< DataT > > m_proxy
Definition: DataProxy.h:151
edmProxyP m_edmProxy
Definition: DataProxy.h:152
virtual const DataT * make(const RecordT &, const edm::eventsetup::DataKey &)
Definition: DataProxy.h:31
boost::shared_ptr< PayProxy > DataP
Definition: DataProxy.h:102
virtual ProxyP proxy() const =0
boost::shared_ptr< cond::BasePayloadProxy > ProxyP
Definition: DataProxy.h:58
virtual void lateInit(cond::DbSession &session, const std::string &iovtoken, std::string const &il, std::string const &cs, std::string const &tag)
Definition: DataProxy.h:134
edm::eventsetup::TypeTag m_type
Definition: DataProxy.h:150
virtual edmProxyP edmProxy() const
Definition: DataProxy.h:146
std::string const & label() const
Definition: DataProxy.h:81
DataProxy(boost::shared_ptr< cond::PayloadProxy< DataT > > pdata)
Definition: DataProxy.h:19
std::pair< std::string, std::string > Args
Definition: DataProxy.h:62
virtual edmProxyP edmProxy() const =0
const DataProxy & operator=(const DataProxy &)
boost::shared_ptr< edm::eventsetup::DataProxy > edmProxyP
Definition: DataProxy.h:59
virtual void invalidateCache()
Definition: DataProxy.h:35
std::string const & connString() const
Definition: DataProxy.h:83
DataProxyWrapper(cond::DbSession &session, const std::string &iovtoken, std::string const &ilabel, const char *source=0)
Definition: DataProxy.h:105
DataProxyWrapper(const char *source=0)
Definition: DataProxy.h:116
virtual void lateInit(cond::DbSession &session, const std::string &tag, std::string const &il, std::string const &cs)
Definition: DataProxy.h:123
boost::shared_ptr< cond::PayloadProxy< DataT > > m_data
Definition: DataProxy.h:47
std::string m_source
Definition: DataProxy.h:149
std::string const & tag() const
Definition: DataProxy.h:84
std::string m_connString
Definition: DataProxy.h:88
virtual void invalidateTransientCache()
Definition: DataProxy.h:39
cond::PayloadProxy< DataT > PayProxy
Definition: DataProxy.h:101
virtual ProxyP proxy() const
Definition: DataProxy.h:145
boost::shared_ptr< cond::PayloadProxy< DataT > > DataP
Definition: DataProxy.h:17