DataSvc.h
Go to the documentation of this file.
1 #ifndef GAUDIKERNEL_DATASVC_H
2 #define GAUDIKERNEL_DATASVC_H
3 
4 // Include files
5 #include "GaudiKernel/Service.h"
6 #include "GaudiKernel/DataStoreItem.h"
7 #include "GaudiKernel/IDataManagerSvc.h"
8 #include "GaudiKernel/IDataProviderSvc.h"
9 #include "GaudiKernel/IIncidentSvc.h"
10 #include "GaudiKernel/SmartIF.h"
11 
12 #include <boost/utility/string_ref.hpp>
13 
14 // Forward declarations
15 // Incident service
16 class IIncidentSvc;
17 // Generic address
18 class IOpaqueAddress;
19 // Generic interface to data object class
20 class DataObject;
21 // Data store agent
22 class IDataStoreAgent;
23 
24 // Do not clutter global namespace for helpers...
25 namespace DataSvcHelpers {
26  // Map of objects where loading is inhibited
27  class InhibitMap;
28  // Generic registry entry
29  class RegistryEntry;
30 }
31 
42 class GAUDI_API DataSvc: public extends2<Service, IDataProviderSvc, IDataManagerSvc>
43 {
44 public:
46  typedef std::vector<DataStoreItem> LoadItems;
47 
48 protected:
50  CLID m_rootCLID = 110; /*CLID_Event*/
52  std::string m_rootName = "/Event" ;
54  SmartIF<IConversionSvc> m_dataLoader = nullptr;
56  SmartIF<IIncidentSvc> m_incidentSvc = nullptr;
58  LoadItems m_preLoads;
60  bool m_forceLeaves = false;
62  bool m_enableAccessHdlr = false;
64  bool m_enableFaultHdlr = false;
66  DataSvcHelpers::RegistryEntry* m_root = nullptr;
68  DataSvcHelpers::InhibitMap* m_inhibitMap = nullptr;
70  std::vector<std::string> m_inhibitPathes;
72  std::string m_accessName = "DataAccess";
74  std::string m_faultName = "DataFault";
75 public:
76 
78  CLID rootCLID() const override;
79 
81  const std::string& rootName() const override;
82 
84  virtual StatusCode registerAddress( const std::string& fullPath,
85  IOpaqueAddress* pAddress);
86 
88  virtual StatusCode registerAddress( DataObject* parentObj,
89  const std::string& objectPath,
90  IOpaqueAddress* pAddress);
91 
93  virtual StatusCode registerAddress( IRegistry* parentObj,
94  const std::string& objectPath,
95  IOpaqueAddress* pAddress);
96 
98  virtual StatusCode unregisterAddress(const std::string& fullPath);
99 
101  virtual StatusCode unregisterAddress( DataObject* pParent,
102  const std::string& objPath);
103 
105  virtual StatusCode unregisterAddress( IRegistry* pParent,
106  const std::string& objPath);
107 
111  StatusCode objectLeaves( const DataObject* pObject,
112  std::vector<IRegistry*>& refLeaves) override;
116  StatusCode objectLeaves( const IRegistry* pRegistry,
117  std::vector<IRegistry*>& refLeaves) override;
118 
120  StatusCode objectParent( const DataObject* pObject,
121  IRegistry*& refpParent) override;
123  StatusCode objectParent( const IRegistry* pRegistry,
124  IRegistry*& refpParent) override;
125 
129  StatusCode clearSubTree( const std::string& sub_tree_path ) override;
130 
134  StatusCode clearSubTree( DataObject* pObject ) override;
135 
137  StatusCode clearStore() override;
138 
142  StatusCode traverseSubTree( const std::string& sub_tree_path,
143  IDataStoreAgent* pAgent ) override;
144 
146  StatusCode traverseSubTree( DataObject* pObject,
147  IDataStoreAgent* pAgent ) override;
148 
150  StatusCode traverseTree( IDataStoreAgent* pAgent ) override;
151 
154  StatusCode setRoot( std::string root_name,
155  DataObject* pRootObj) override;
156 
160  virtual StatusCode i_setRoot( std::string root_name,
161  DataObject* pRootObj);
162 
165  StatusCode setRoot (std::string root_path,
166  IOpaqueAddress* pRootAddr) override;
167 
172  virtual StatusCode i_setRoot (std::string root_path,
173  IOpaqueAddress* pRootAddr);
174 
178  StatusCode setDataLoader( IConversionSvc* svc ) override;
179 
181  virtual StatusCode addPreLoadItem( const DataStoreItem& item );
182 
184  virtual StatusCode addPreLoadItem( const std::string& itemPath );
185 
187  virtual StatusCode removePreLoadItem( const DataStoreItem& item );
188 
190  virtual StatusCode removePreLoadItem( const std::string& itemPath );
191 
193  virtual StatusCode resetPreLoad();
194 
202  virtual StatusCode preLoad( int depth,
203  int load_depth,
204  DataObject* pObject );
205 
207  virtual StatusCode preLoad();
208 
210  StatusCode registerObject( const std::string& fullPath,
211  DataObject* pObject ) override;
212 
214  StatusCode registerObject( const std::string& parentPath,
215  const std::string& objPath,
216  DataObject* pObject ) override;
217 
219  StatusCode registerObject( const std::string& parentPath,
220  int item,
221  DataObject* pObject ) override;
222 
224  StatusCode registerObject( DataObject* parentObj,
225  const std::string& objPath,
226  DataObject* pObject ) override;
227 
229  StatusCode registerObject( DataObject* parentObj,
230  int item,
231  DataObject* pObject ) override;
232 
234  StatusCode unregisterObject(const std::string& fullPath ) override;
235 
237  StatusCode unregisterObject(const std::string& parentPath,
238  const std::string& objectPath ) override;
239 
241  StatusCode unregisterObject(const std::string& parentPath,
242  int item ) override;
243 
245  StatusCode unregisterObject(DataObject* pObject ) override;
246 
248  StatusCode unregisterObject(DataObject* pObject,
249  const std::string& objectPath ) override;
250 
252  StatusCode unregisterObject(DataObject* pObject,
253  int item ) override;
254 
256  StatusCode retrieveObject( IRegistry* pDirectory,
257  const std::string& path,
258  DataObject*& pObject ) override;
259 
261  StatusCode retrieveObject( const std::string& fullPath,
262  DataObject*& pObject ) override;
263 
265  StatusCode retrieveObject( const std::string& parentPath,
266  const std::string& objPath,
267  DataObject*& pObject ) override;
268 
270  StatusCode retrieveObject( const std::string& parentPath,
271  int item,
272  DataObject*& pObject ) override;
273 
275  StatusCode retrieveObject( DataObject* parentObj,
276  const std::string& objPath,
277  DataObject*& pObject ) override;
278 
280  StatusCode retrieveObject( DataObject* parentObj,
281  int item,
282  DataObject*& pObject ) override;
283 
285  StatusCode findObject( const std::string& fullPath,
286  DataObject*& pObject ) override;
287 
289  StatusCode findObject( IRegistry* pDirectory,
290  const std::string& path,
291  DataObject*& pObject ) override;
292 
294  StatusCode findObject( const std::string& parentPath,
295  const std::string& objPath,
296  DataObject*& pObject ) override;
297 
299  StatusCode findObject( const std::string& parentPath,
300  int item,
301  DataObject*& pObject ) override;
302 
304  StatusCode findObject( DataObject* parentObj,
305  const std::string& objPath,
306  DataObject*& pObject ) override;
307 
309  StatusCode findObject( DataObject* parentObj,
310  int item,
311  DataObject*& pObject ) override;
312 
314  StatusCode linkObject( IRegistry* from,
315  const std::string& objPath,
316  DataObject* to ) override;
317 
319  StatusCode linkObject( const std::string& fromPath,
320  const std::string& objPath,
321  DataObject* to ) override;
322 
324  StatusCode linkObject( DataObject* from,
325  const std::string& objPath,
326  DataObject* to ) override;
327 
329  StatusCode linkObject( const std::string& fullPath,
330  DataObject* to ) override;
331 
333  StatusCode unlinkObject(IRegistry* from,
334  const std::string& objPath ) override;
335 
337  StatusCode unlinkObject(const std::string& fromPath,
338  const std::string& objPath ) override;
339 
341  StatusCode unlinkObject(DataObject* fromObj,
342  const std::string& objPath ) override;
343 
345  StatusCode unlinkObject(const std::string& fullPath ) override;
346 
348  StatusCode updateObject(IRegistry* pDirectory ) override;
349 
351  StatusCode updateObject(const std::string& updatePath ) override;
352 
354  StatusCode updateObject(DataObject* toUpdate ) override;
355 
357  StatusCode updateObject(const std::string& parentPath,
358  const std::string& updatePath ) override;
359 
361  StatusCode updateObject(DataObject* pParent,
362  const std::string& updatePath ) override;
363 
365  StatusCode initialize() override;
366 
368  StatusCode reinitialize() override;
369 
371  StatusCode finalize() override;
372 
374  DataSvc( const std::string& name, ISvcLocator* svc );
375 
377  ~DataSvc() override;
378 
379 private:
381  DataSvc(const DataSvc&) = delete;
383  DataSvc& operator= (const DataSvc&) = delete;
384 
385 protected:
387  bool checkRoot() {
388  return 0 != m_root;
389  }
390 
394  virtual IConversionSvc* getDataLoader(IRegistry* pReg);
395 
397  virtual DataObject* createDefaultObject() const;
398 
402  virtual StatusCode loadObject( IRegistry* pNode );
403 
407  virtual StatusCode loadObject( IConversionSvc* pLoader,
408  IRegistry* pNode );
409 
411  StatusCode retrieveEntry( DataSvcHelpers::RegistryEntry* pNode,
412  const std::string& path,
420  DataObject* handleDataFault(IRegistry* pReg, const std::string& path="");
421 private:
422  StatusCode i_retrieveEntry(DataSvcHelpers::RegistryEntry* parentObj,
423  boost::string_ref path,
425  DataObject* i_handleDataFault(IRegistry* pReg, boost::string_ref path = boost::string_ref{});
426 };
427 #endif // GAUDIKERNEL_DATASVC_H
def initialize()
Definition: AnalysisTest.py:12
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
Definition: ISvcLocator.h:25
#define GAUDI_API
Definition: Kernel.h:107
list path
Definition: __init__.py:15
LoadItems m_preLoads
Items to be pre-loaded.
Definition: DataSvc.h:58
bool checkRoot()
Check if root path is valid.
Definition: DataSvc.h:387
Description of the DataStoreItem class.
Definition: DataStoreItem.h:17
std::vector< std::string > m_inhibitPathes
Property for the inhibited leaves.
Definition: DataSvc.h:70
std::vector< DataStoreItem > LoadItems
Define set of load items.
Definition: DataSvc.h:46
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
unsigned int CLID
Class ID definition.
Definition: ClassID.h:8
Definition of an entry in the transient data store.
Definition: RegistryEntry.h:34
Generic data agent interface.
Base class used to extend a class implementing other interfaces.
Definition: extends.h:10
Data service base class.
Definition: DataSvc.h:42
tuple item
print s1,s2
Definition: ana.py:146
Opaque address interface definition.
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
The interface implemented by the IncidentSvc service.
Definition: IIncidentSvc.h:21