00001
00002 #ifndef GAUDIKERNEL_DATASVC_H
00003 #define GAUDIKERNEL_DATASVC_H
00004
00005
00006 #include "GaudiKernel/Service.h"
00007 #include "GaudiKernel/DataStoreItem.h"
00008 #include "GaudiKernel/IDataManagerSvc.h"
00009 #include "GaudiKernel/IDataProviderSvc.h"
00010
00011
00012
00013 class IIncidentSvc;
00014
00015 class IOpaqueAddress;
00016
00017 class DataObject;
00018
00019 class IDataStoreAgent;
00020
00021 template <class TYPE> class SvcFactory;
00022
00023
00024 namespace DataSvcHelpers {
00025
00026 class InhibitMap;
00027
00028 class RegistryEntry;
00029 }
00030
00031
00042 class DataSvc : public Service,
00043 virtual public IDataProviderSvc,
00044 virtual public IDataManagerSvc
00045 {
00047 friend class SvcFactory<DataSvc>;
00048
00049 public:
00051 typedef std::vector<DataStoreItem> LoadItems;
00052
00053 protected:
00055 CLID m_rootCLID;
00057 std::string m_rootName;
00059 IConversionSvc* m_dataLoader;
00061 IIncidentSvc* m_incidentSvc;
00063 LoadItems m_preLoads;
00065 bool m_forceLeaves;
00067 bool m_enableAccessHdlr;
00069 bool m_enableFaultHdlr;
00071 DataSvcHelpers::RegistryEntry* m_root;
00073 DataSvcHelpers::InhibitMap* m_inhibitMap;
00075 std::vector<std::string> m_inhibitPathes;
00077 std::string m_accessName;
00079 std::string m_faultName;
00080 public:
00081
00083 virtual CLID rootCLID() const;
00084
00086 virtual std::string rootName() const;
00087
00089 virtual StatusCode registerAddress( const std::string& fullPath,
00090 IOpaqueAddress* pAddress);
00091
00093 virtual StatusCode registerAddress( DataObject* parentObj,
00094 const std::string& objectPath,
00095 IOpaqueAddress* pAddress);
00096
00098 virtual StatusCode registerAddress( IRegistry* parentObj,
00099 const std::string& objectPath,
00100 IOpaqueAddress* pAddress);
00101
00103 virtual StatusCode unregisterAddress(const std::string& fullPath);
00104
00106 virtual StatusCode unregisterAddress( DataObject* pParent,
00107 const std::string& objPath);
00108
00110 virtual StatusCode unregisterAddress( IRegistry* pParent,
00111 const std::string& objPath);
00112
00116 virtual StatusCode objectLeaves( const DataObject* pObject,
00117 std::vector<IRegistry*>& refLeaves);
00121 virtual StatusCode objectLeaves( const IRegistry* pRegistry,
00122 std::vector<IRegistry*>& refLeaves);
00123
00125 virtual StatusCode objectParent( const DataObject* pObject,
00126 IRegistry*& refpParent);
00128 virtual StatusCode objectParent( const IRegistry* pRegistry,
00129 IRegistry*& refpParent);
00130
00134 virtual StatusCode clearSubTree( const std::string& sub_tree_path );
00135
00139 virtual StatusCode clearSubTree( DataObject* pObject );
00140
00142 virtual StatusCode clearStore();
00143
00147 virtual StatusCode traverseSubTree( const std::string& sub_tree_path,
00148 IDataStoreAgent* pAgent );
00149
00151 virtual StatusCode traverseSubTree( DataObject* pObject,
00152 IDataStoreAgent* pAgent );
00153
00155 virtual StatusCode traverseTree( IDataStoreAgent* pAgent );
00156
00159 virtual StatusCode setRoot( const std::string& root_name,
00160 DataObject* pRootObj);
00161
00165 virtual StatusCode i_setRoot( const std::string& root_name,
00166 DataObject* pRootObj);
00167
00170 virtual StatusCode setRoot (const std::string& root_path,
00171 IOpaqueAddress* pRootAddr);
00172
00177 virtual StatusCode i_setRoot (const std::string& root_path,
00178 IOpaqueAddress* pRootAddr);
00179
00183 virtual StatusCode setDataLoader( IConversionSvc* svc );
00184
00186 virtual StatusCode addPreLoadItem( const DataStoreItem& item );
00187
00189 virtual StatusCode addPreLoadItem( const std::string& itemPath );
00190
00192 virtual StatusCode removePreLoadItem( const DataStoreItem& item );
00193
00195 virtual StatusCode removePreLoadItem( const std::string& itemPath );
00196
00198 virtual StatusCode resetPreLoad();
00199
00207 virtual StatusCode preLoad( int depth,
00208 int load_depth,
00209 DataObject* pObject );
00210
00212 virtual StatusCode preLoad();
00213
00215 virtual StatusCode registerObject( const std::string& fullPath,
00216 DataObject* pObject );
00217
00219 virtual StatusCode registerObject( const std::string& parentPath,
00220 const std::string& objPath,
00221 DataObject* pObject );
00222
00224 virtual StatusCode registerObject( const std::string& parentPath,
00225 int item,
00226 DataObject* pObject );
00227
00229 virtual StatusCode registerObject( DataObject* parentObj,
00230 const std::string& objPath,
00231 DataObject* pObject );
00232
00234 virtual StatusCode registerObject( DataObject* parentObj,
00235 int item,
00236 DataObject* pObject );
00237
00239 virtual StatusCode unregisterObject(const std::string& fullPath );
00240
00242 virtual StatusCode unregisterObject(const std::string& parentPath,
00243 const std::string& objectPath );
00244
00246 virtual StatusCode unregisterObject(const std::string& parentPath,
00247 int item );
00248
00250 virtual StatusCode unregisterObject(DataObject* pObject );
00251
00253 virtual StatusCode unregisterObject(DataObject* pObject,
00254 const std::string& objectPath );
00255
00257 virtual StatusCode unregisterObject(DataObject* pObject,
00258 int item );
00259
00261 virtual StatusCode retrieveObject( IRegistry* pDirectory,
00262 const std::string& path,
00263 DataObject*& pObject );
00264
00266 virtual StatusCode retrieveObject( const std::string& fullPath,
00267 DataObject*& pObject );
00268
00270 virtual StatusCode retrieveObject( const std::string& parentPath,
00271 const std::string& objPath,
00272 DataObject*& pObject );
00273
00275 virtual StatusCode retrieveObject( const std::string& parentPath,
00276 int item,
00277 DataObject*& pObject );
00278
00280 virtual StatusCode retrieveObject( DataObject* parentObj,
00281 const std::string& objPath,
00282 DataObject*& pObject );
00283
00285 virtual StatusCode retrieveObject( DataObject* parentObj,
00286 int item,
00287 DataObject*& pObject );
00288
00290 virtual StatusCode findObject( const std::string& fullPath,
00291 DataObject*& pObject );
00292
00294 virtual StatusCode findObject( IRegistry* pDirectory,
00295 const std::string& path,
00296 DataObject*& pObject );
00297
00299 virtual StatusCode findObject( const std::string& parentPath,
00300 const std::string& objPath,
00301 DataObject*& pObject );
00302
00304 virtual StatusCode findObject( const std::string& parentPath,
00305 int item,
00306 DataObject*& pObject );
00307
00309 virtual StatusCode findObject( DataObject* parentObj,
00310 const std::string& objPath,
00311 DataObject*& pObject );
00312
00314 virtual StatusCode findObject( DataObject* parentObj,
00315 int item,
00316 DataObject*& pObject );
00317
00319 virtual StatusCode linkObject( IRegistry* from,
00320 const std::string& objPath,
00321 DataObject* to );
00322
00324 virtual StatusCode linkObject( const std::string& fromPath,
00325 const std::string& objPath,
00326 DataObject* to );
00327
00329 virtual StatusCode linkObject( DataObject* from,
00330 const std::string& objPath,
00331 DataObject* to );
00332
00334 virtual StatusCode linkObject( const std::string& fullPath,
00335 DataObject* to );
00336
00338 virtual StatusCode unlinkObject(IRegistry* from,
00339 const std::string& objPath );
00340
00342 virtual StatusCode unlinkObject(const std::string& fromPath,
00343 const std::string& objPath );
00344
00346 virtual StatusCode unlinkObject(DataObject* fromObj,
00347 const std::string& objPath );
00348
00350 virtual StatusCode unlinkObject(const std::string& fullPath );
00351
00353 virtual StatusCode updateObject(IRegistry* pDirectory );
00354
00356 virtual StatusCode updateObject(const std::string& updatePath );
00357
00359 virtual StatusCode updateObject(DataObject* toUpdate );
00360
00362 virtual StatusCode updateObject(const std::string& parentPath,
00363 const std::string& updatePath );
00364
00366 virtual StatusCode updateObject(DataObject* pParent,
00367 const std::string& updatePath );
00368
00370 virtual StatusCode queryInterface( const InterfaceID& riid, void** ppvUnknown );
00371
00373 virtual StatusCode initialize();
00374
00376 virtual StatusCode reinitialize();
00377
00379 virtual StatusCode finalize();
00380
00382 DataSvc( const std::string& name, ISvcLocator* svc );
00383
00385 virtual ~DataSvc();
00386
00387 protected:
00389 bool checkRoot() {
00390 return 0 != m_root;
00391 }
00392
00396 virtual IConversionSvc* getDataLoader(IRegistry* pReg);
00397
00399 virtual DataObject* createDefaultObject() const;
00400
00404 virtual StatusCode loadObject( IRegistry* pNode );
00405
00409 virtual StatusCode loadObject( IConversionSvc* pLoader,
00410 IRegistry* pNode );
00411
00413 StatusCode retrieveEntry( DataSvcHelpers::RegistryEntry* pNode,
00414 const std::string& path,
00415 DataSvcHelpers::RegistryEntry*& pEntry );
00422 DataObject* handleDataFault(IRegistry* pReg, const std::string& path="");
00423 };
00424 #endif // GAUDIKERNEL_DATASVC_H
00425