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 GAUDI_API DataSvc: public extends2<Service, IDataProviderSvc, IDataManagerSvc>
00043 {
00045 friend class SvcFactory<DataSvc>;
00046
00047 public:
00049 typedef std::vector<DataStoreItem> LoadItems;
00050
00051 protected:
00053 CLID m_rootCLID;
00055 std::string m_rootName;
00057 IConversionSvc* m_dataLoader;
00059 IIncidentSvc* m_incidentSvc;
00061 LoadItems m_preLoads;
00063 bool m_forceLeaves;
00065 bool m_enableAccessHdlr;
00067 bool m_enableFaultHdlr;
00069 DataSvcHelpers::RegistryEntry* m_root;
00071 DataSvcHelpers::InhibitMap* m_inhibitMap;
00073 std::vector<std::string> m_inhibitPathes;
00075 std::string m_accessName;
00077 std::string m_faultName;
00078 public:
00079
00081 virtual CLID rootCLID() const;
00082
00084 virtual std::string rootName() const;
00085
00087 virtual StatusCode registerAddress( const std::string& fullPath,
00088 IOpaqueAddress* pAddress);
00089
00091 virtual StatusCode registerAddress( DataObject* parentObj,
00092 const std::string& objectPath,
00093 IOpaqueAddress* pAddress);
00094
00096 virtual StatusCode registerAddress( IRegistry* parentObj,
00097 const std::string& objectPath,
00098 IOpaqueAddress* pAddress);
00099
00101 virtual StatusCode unregisterAddress(const std::string& fullPath);
00102
00104 virtual StatusCode unregisterAddress( DataObject* pParent,
00105 const std::string& objPath);
00106
00108 virtual StatusCode unregisterAddress( IRegistry* pParent,
00109 const std::string& objPath);
00110
00114 virtual StatusCode objectLeaves( const DataObject* pObject,
00115 std::vector<IRegistry*>& refLeaves);
00119 virtual StatusCode objectLeaves( const IRegistry* pRegistry,
00120 std::vector<IRegistry*>& refLeaves);
00121
00123 virtual StatusCode objectParent( const DataObject* pObject,
00124 IRegistry*& refpParent);
00126 virtual StatusCode objectParent( const IRegistry* pRegistry,
00127 IRegistry*& refpParent);
00128
00132 virtual StatusCode clearSubTree( const std::string& sub_tree_path );
00133
00137 virtual StatusCode clearSubTree( DataObject* pObject );
00138
00140 virtual StatusCode clearStore();
00141
00145 virtual StatusCode traverseSubTree( const std::string& sub_tree_path,
00146 IDataStoreAgent* pAgent );
00147
00149 virtual StatusCode traverseSubTree( DataObject* pObject,
00150 IDataStoreAgent* pAgent );
00151
00153 virtual StatusCode traverseTree( IDataStoreAgent* pAgent );
00154
00157 virtual StatusCode setRoot( const std::string& root_name,
00158 DataObject* pRootObj);
00159
00163 virtual StatusCode i_setRoot( const std::string& root_name,
00164 DataObject* pRootObj);
00165
00168 virtual StatusCode setRoot (const std::string& root_path,
00169 IOpaqueAddress* pRootAddr);
00170
00175 virtual StatusCode i_setRoot (const std::string& root_path,
00176 IOpaqueAddress* pRootAddr);
00177
00181 virtual StatusCode setDataLoader( IConversionSvc* svc );
00182
00184 virtual StatusCode addPreLoadItem( const DataStoreItem& item );
00185
00187 virtual StatusCode addPreLoadItem( const std::string& itemPath );
00188
00190 virtual StatusCode removePreLoadItem( const DataStoreItem& item );
00191
00193 virtual StatusCode removePreLoadItem( const std::string& itemPath );
00194
00196 virtual StatusCode resetPreLoad();
00197
00205 virtual StatusCode preLoad( int depth,
00206 int load_depth,
00207 DataObject* pObject );
00208
00210 virtual StatusCode preLoad();
00211
00213 virtual StatusCode registerObject( const std::string& fullPath,
00214 DataObject* pObject );
00215
00217 virtual StatusCode registerObject( const std::string& parentPath,
00218 const std::string& objPath,
00219 DataObject* pObject );
00220
00222 virtual StatusCode registerObject( const std::string& parentPath,
00223 int item,
00224 DataObject* pObject );
00225
00227 virtual StatusCode registerObject( DataObject* parentObj,
00228 const std::string& objPath,
00229 DataObject* pObject );
00230
00232 virtual StatusCode registerObject( DataObject* parentObj,
00233 int item,
00234 DataObject* pObject );
00235
00237 virtual StatusCode unregisterObject(const std::string& fullPath );
00238
00240 virtual StatusCode unregisterObject(const std::string& parentPath,
00241 const std::string& objectPath );
00242
00244 virtual StatusCode unregisterObject(const std::string& parentPath,
00245 int item );
00246
00248 virtual StatusCode unregisterObject(DataObject* pObject );
00249
00251 virtual StatusCode unregisterObject(DataObject* pObject,
00252 const std::string& objectPath );
00253
00255 virtual StatusCode unregisterObject(DataObject* pObject,
00256 int item );
00257
00259 virtual StatusCode retrieveObject( IRegistry* pDirectory,
00260 const std::string& path,
00261 DataObject*& pObject );
00262
00264 virtual StatusCode retrieveObject( const std::string& fullPath,
00265 DataObject*& pObject );
00266
00268 virtual StatusCode retrieveObject( const std::string& parentPath,
00269 const std::string& objPath,
00270 DataObject*& pObject );
00271
00273 virtual StatusCode retrieveObject( const std::string& parentPath,
00274 int item,
00275 DataObject*& pObject );
00276
00278 virtual StatusCode retrieveObject( DataObject* parentObj,
00279 const std::string& objPath,
00280 DataObject*& pObject );
00281
00283 virtual StatusCode retrieveObject( DataObject* parentObj,
00284 int item,
00285 DataObject*& pObject );
00286
00288 virtual StatusCode findObject( const std::string& fullPath,
00289 DataObject*& pObject );
00290
00292 virtual StatusCode findObject( IRegistry* pDirectory,
00293 const std::string& path,
00294 DataObject*& pObject );
00295
00297 virtual StatusCode findObject( const std::string& parentPath,
00298 const std::string& objPath,
00299 DataObject*& pObject );
00300
00302 virtual StatusCode findObject( const std::string& parentPath,
00303 int item,
00304 DataObject*& pObject );
00305
00307 virtual StatusCode findObject( DataObject* parentObj,
00308 const std::string& objPath,
00309 DataObject*& pObject );
00310
00312 virtual StatusCode findObject( DataObject* parentObj,
00313 int item,
00314 DataObject*& pObject );
00315
00317 virtual StatusCode linkObject( IRegistry* from,
00318 const std::string& objPath,
00319 DataObject* to );
00320
00322 virtual StatusCode linkObject( const std::string& fromPath,
00323 const std::string& objPath,
00324 DataObject* to );
00325
00327 virtual StatusCode linkObject( DataObject* from,
00328 const std::string& objPath,
00329 DataObject* to );
00330
00332 virtual StatusCode linkObject( const std::string& fullPath,
00333 DataObject* to );
00334
00336 virtual StatusCode unlinkObject(IRegistry* from,
00337 const std::string& objPath );
00338
00340 virtual StatusCode unlinkObject(const std::string& fromPath,
00341 const std::string& objPath );
00342
00344 virtual StatusCode unlinkObject(DataObject* fromObj,
00345 const std::string& objPath );
00346
00348 virtual StatusCode unlinkObject(const std::string& fullPath );
00349
00351 virtual StatusCode updateObject(IRegistry* pDirectory );
00352
00354 virtual StatusCode updateObject(const std::string& updatePath );
00355
00357 virtual StatusCode updateObject(DataObject* toUpdate );
00358
00360 virtual StatusCode updateObject(const std::string& parentPath,
00361 const std::string& updatePath );
00362
00364 virtual StatusCode updateObject(DataObject* pParent,
00365 const std::string& updatePath );
00366
00368 virtual StatusCode initialize();
00369
00371 virtual StatusCode reinitialize();
00372
00374 virtual StatusCode finalize();
00375
00377 DataSvc( const std::string& name, ISvcLocator* svc );
00378
00380 virtual ~DataSvc();
00381
00382 private:
00384 DataSvc(const DataSvc&);
00386 DataSvc& operator= (const DataSvc&);
00387
00388 protected:
00390 bool checkRoot() {
00391 return 0 != m_root;
00392 }
00393
00397 virtual IConversionSvc* getDataLoader(IRegistry* pReg);
00398
00400 virtual DataObject* createDefaultObject() const;
00401
00405 virtual StatusCode loadObject( IRegistry* pNode );
00406
00410 virtual StatusCode loadObject( IConversionSvc* pLoader,
00411 IRegistry* pNode );
00412
00414 StatusCode retrieveEntry( DataSvcHelpers::RegistryEntry* pNode,
00415 const std::string& path,
00416 DataSvcHelpers::RegistryEntry*& pEntry );
00423 DataObject* handleDataFault(IRegistry* pReg, const std::string& path="");
00424 };
00425 #endif // GAUDIKERNEL_DATASVC_H
00426