CMS 3D CMS Logo

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 <memory>
5 #include <string>
6 
7 // user include files
9 
11 
12 // expose a cond::PayloadProxy as a eventsetup::DataProxy
13 namespace cond {
14  template< typename DataT> struct DefaultInitializer {
15  void operator()(DataT &){}
16  };
17 }
18 
19 template< class RecordT, class DataT , typename Initializer=cond::DefaultInitializer<DataT> >
20 class DataProxy : public edm::eventsetup::DataProxyTemplate<RecordT, DataT >{
21  public:
23  typedef std::shared_ptr<cond::persistency::PayloadProxy<DataT> > DataP;
24 
25  explicit DataProxy(std::shared_ptr<cond::persistency::PayloadProxy<DataT> > pdata) : m_data(pdata) {
26 
27  }
28  //virtual ~DataProxy();
29 
30  // ---------- const member functions ---------------------
31 
32  // ---------- static member functions --------------------
33 
34  // ---------- member functions ---------------------------
35 
36  protected:
37  const DataT* make(const RecordT&, const edm::eventsetup::DataKey&) override {
38  m_data->make();
39  m_initializer(const_cast<DataT&>((*m_data)()));
40  return &(*m_data)();
41  }
42  void invalidateCache() override {
43  // don't, preserve data for future access
44  // m_data->invalidateCache();
45  }
46  void invalidateTransientCache() override {
47  m_data->invalidateTransientCache();
48  }
49  private:
50  //DataProxy(); // stop default
51  const DataProxy& operator=( const DataProxy& ) = delete; // stop default
52  // ---------- member data --------------------------------
53 
54  std::shared_ptr<cond::persistency::PayloadProxy<DataT> > m_data;
55  Initializer m_initializer;
56 };
57 
58 namespace cond {
59 
60  /* ABI bridging between the cond world and eventsetup world
61  * keep them separated!
62  */
64  public:
65  typedef std::shared_ptr<cond::persistency::BasePayloadProxy> ProxyP;
66  typedef std::shared_ptr<edm::eventsetup::DataProxy> edmProxyP;
67 
68  // limitation of plugin manager...
69  typedef std::pair< std::string, std::string> Args;
70 
71  virtual edm::eventsetup::TypeTag type() const=0;
72  virtual ProxyP proxy() const=0;
73  virtual edmProxyP edmProxy() const=0;
74 
75 
77  explicit DataProxyWrapperBase(std::string const & il);
78  // late initialize (to allow to load ALL library first)
79  virtual void lateInit(cond::persistency::Session& session, const std::string & tag, const boost::posix_time::ptime& snapshotTime,
80  std::string const & il, std::string const & cs)=0;
81 
82  void addInfo(std::string const & il, std::string const & cs, std::string const & tag);
83 
84 
85  virtual ~DataProxyWrapperBase();
86  std::string const & label() const { return m_label;}
87 
88  std::string const & connString() const { return m_connString;}
89  std::string const & tag() const { return m_tag;}
90 
91  private:
95 
96  };
97 }
98 
99 /* bridge between the cond world and eventsetup world
100  * keep them separated!
101  */
102 template< class RecordT, class DataT, typename Initializer=cond::DefaultInitializer<DataT> >
104 public:
105  typedef ::DataProxy<RecordT,DataT, Initializer> DataProxy;
107  typedef std::shared_ptr<PayProxy> DataP;
108 
109 
111  const std::string& tag, const std::string& ilabel, const char * source=nullptr) :
112  cond::DataProxyWrapperBase(ilabel),
113  m_source( source ? source : "" ),
114  m_proxy(new PayProxy( source)), //'errorPolicy set to true: PayloadProxy should catch and re-throw ORA exceptions' still needed?
115  m_edmProxy(new DataProxy(m_proxy)){
116  m_proxy->setUp( session );
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  // constructor from plugin...
123  explicit DataProxyWrapper(const char * source=nullptr) : m_source (source ? source : "") {
124  //NOTE: We do this so that the type 'DataT' will get registered
125  // when the plugin is dynamically loaded
126  m_type = edm::eventsetup::DataKey::makeTypeTag<DataT>();
127  }
128 
129  // late initialize (to allow to load ALL library first)
130  void lateInit(cond::persistency::Session& session, const std::string & tag, const boost::posix_time::ptime& snapshotTime,
131  std::string const & il, std::string const & cs) override {
132  m_proxy.reset(new PayProxy(m_source.empty() ? (const char *)nullptr : m_source.c_str() ) );
133  m_proxy->setUp( session );
134  m_proxy->loadTag( tag, snapshotTime );
135  m_edmProxy.reset(new DataProxy(m_proxy));
136  addInfo(il, cs, tag);
137  }
138 
139  edm::eventsetup::TypeTag type() const override { return m_type;}
140  ProxyP proxy() const override { return m_proxy;}
141  edmProxyP edmProxy() const override { return m_edmProxy;}
142 
143 private:
146  std::shared_ptr<cond::persistency::PayloadProxy<DataT> > m_proxy;
147  edmProxyP m_edmProxy;
148 
149 };
150 
151 
152 #endif /* CONDCORE_PLUGINSYSTEM_DATAPROXY_H */
type
Definition: HCALResponse.h:21
Initializer m_initializer
Definition: DataProxy.h:55
std::shared_ptr< cond::persistency::PayloadProxy< DataT > > m_proxy
Definition: DataProxy.h:146
cond::persistency::PayloadProxy< DataT > PayProxy
Definition: DataProxy.h:106
::DataProxy< RecordT, DataT, Initializer > DataProxy
Definition: DataProxy.h:105
std::shared_ptr< cond::persistency::PayloadProxy< DataT > > DataP
Definition: DataProxy.h:23
unique_ptr< ClusterSequence > cs
std::shared_ptr< cond::persistency::BasePayloadProxy > ProxyP
Definition: DataProxy.h:65
std::shared_ptr< edm::eventsetup::DataProxy > edmProxyP
Definition: DataProxy.h:66
void lateInit(cond::persistency::Session &session, const std::string &tag, const boost::posix_time::ptime &snapshotTime, std::string const &il, std::string const &cs) override
Definition: DataProxy.h:130
std::shared_ptr< cond::persistency::PayloadProxy< DataT > > m_data
Definition: DataProxy.h:54
std::string const & label() const
Definition: DataProxy.h:86
edmProxyP edmProxy() const override
Definition: DataProxy.h:141
edmProxyP m_edmProxy
Definition: DataProxy.h:147
std::pair< std::string, std::string > Args
Definition: DataProxy.h:69
edm::eventsetup::TypeTag type() const override
Definition: DataProxy.h:139
void invalidateTransientCache() override
Definition: DataProxy.h:46
DataProxy(std::shared_ptr< cond::persistency::PayloadProxy< DataT > > pdata)
Definition: DataProxy.h:25
std::string const & connString() const
Definition: DataProxy.h:88
DataProxyWrapper(cond::persistency::Session &session, const std::string &tag, const std::string &ilabel, const char *source=0)
Definition: DataProxy.h:110
const DataT * make(const RecordT &, const edm::eventsetup::DataKey &) override
Definition: DataProxy.h:37
std::string const & tag() const
Definition: DataProxy.h:89
DataProxyWrapper(const char *source=0)
Definition: DataProxy.h:123
std::string m_connString
Definition: DataProxy.h:93
Definition: plugin.cc:24
std::string m_source
Definition: DataProxy.h:144
ProxyP proxy() const override
Definition: DataProxy.h:140
void operator()(DataT &)
Definition: DataProxy.h:15
static std::string const source
Definition: EdmProvDump.cc:47
edm::eventsetup::TypeTag m_type
Definition: DataProxy.h:145
void invalidateCache() override
Definition: DataProxy.h:42
std::shared_ptr< PayProxy > DataP
Definition: DataProxy.h:107