00001
00002 #ifndef GAUDIKERNEL_DATASVC_H
00003 #define GAUDIKERNEL_DATASVC_H
00004
00005
00006 #include "GaudiKernel/Service.h"
00007 #include "GaudiKernel/IDataManagerSvc.h"
00008 #include "GaudiKernel/IDataProviderSvc.h"
00009 #include "GaudiKernel/TransientStore.h"
00010 #include "GaudiKernel/DataStoreItem.h"
00011
00012
00013
00014 class RegistryEntry;
00015
00016 class IOpaqueAddress;
00017
00018 class DataObject;
00019
00020 class IDataStoreAgent;
00021
00022 template <class TYPE> class SvcFactory;
00023
00032 class DataSvc : public Service,
00033 virtual public IDataProviderSvc,
00034 virtual public IDataManagerSvc {
00036 friend class SvcFactory<DataSvc>;
00037
00038 public:
00040 typedef std::vector<DataStoreItem> LoadItems;
00041
00043 virtual CLID rootEventCLID() const;
00044 virtual std::string rootEventName() const;
00045
00046 protected:
00048 TransientStore m_root;
00050 int m_rootEventCLID;
00052 std::string m_rootEventName;
00054 IConversionSvc* m_dataLoader;
00056 LoadItems m_preLoads;
00057 public:
00059 virtual StatusCode clearSubTree( const std::string& sub_tree_path );
00060
00062 virtual StatusCode clearSubTree( DataObject* pObject );
00063
00065 virtual StatusCode clearStore();
00066
00068 virtual StatusCode traverseSubTree( const std::string& sub_tree_path, IDataStoreAgent* pAgent );
00069
00071 virtual StatusCode traverseSubTree( DataObject* pObject, IDataStoreAgent* pAgent );
00072
00074 virtual StatusCode traverseTree( IDataStoreAgent* pAgent );
00075
00077 virtual StatusCode setRoot( const std::string& root_name, DataObject* pRootObj );
00078
00080 virtual StatusCode setRoot( const std::string& root_path, IOpaqueAddress* pRootAddr );
00081
00083 virtual StatusCode setDataLoader( IConversionSvc* svc );
00084
00086 virtual StatusCode addPreLoadItem( const DataStoreItem& item );
00087
00089 virtual StatusCode addPreLoadItem( const std::string& itemPath );
00090
00092 virtual StatusCode removePreLoadItem( const DataStoreItem& item );
00093
00095 virtual StatusCode removePreLoadItem( const std::string& itemPath );
00096
00098 virtual StatusCode resetPreLoad();
00099
00106 virtual StatusCode preLoad( int depth, int load_depth, DataObject* pObject );
00107
00109 virtual StatusCode preLoad();
00110
00112 virtual StatusCode registerObject( const std::string& fullPath, DataObject* pObject );
00113
00115 virtual StatusCode registerObject( const std::string& parentPath, const std::string& objPath, DataObject* pObject );
00116
00118 virtual StatusCode registerObject( const std::string& parentPath, int item, DataObject* pObject );
00119
00121 virtual StatusCode registerObject( DataObject* parentObj, const std::string& objPath, DataObject* pObject );
00122
00124 virtual StatusCode registerObject( DataObject* parentObj, int item, DataObject* pObject );
00125
00127 virtual StatusCode unregisterObject( const std::string& fullPath );
00128
00130 virtual StatusCode unregisterObject( const std::string& parentPath, const std::string& objectPath );
00131
00133 virtual StatusCode unregisterObject( const std::string& parentPath, int item );
00134
00136 virtual StatusCode unregisterObject( DataObject* pObject );
00137
00139 virtual StatusCode unregisterObject( DataObject* pObject, const std::string& objectPath );
00140
00142 virtual StatusCode unregisterObject( DataObject* pObject, int item );
00143
00145 virtual StatusCode retrieveObject( IDataDirectory* pDirectory, const std::string& path, DataObject*& pObject );
00146
00148 virtual StatusCode retrieveObject( const std::string& fullPath, DataObject*& pObject );
00149
00151 virtual StatusCode retrieveObject( const std::string& parentPath, const std::string& objPath, DataObject*& pObject );
00152
00154 virtual StatusCode retrieveObject( const std::string& parentPath, int item, DataObject*& pObject );
00155
00157 virtual StatusCode retrieveObject( DataObject* parentObj, const std::string& objPath, DataObject*& pObject );
00158
00160 virtual StatusCode retrieveObject( DataObject* parentObj, int item, DataObject*& pObject );
00161
00163 virtual StatusCode findObject( const std::string& fullPath, DataObject*& pObject );
00164
00166 virtual StatusCode findObject( IDataDirectory* pDirectory, const std::string& path, DataObject*& pObject );
00167
00169 virtual StatusCode findObject( const std::string& parentPath, const std::string& objPath, DataObject*& pObject );
00170
00172 virtual StatusCode findObject( const std::string& parentPath, int item, DataObject*& pObject );
00173
00175 virtual StatusCode findObject( DataObject* parentObj, const std::string& objPath, DataObject*& pObject );
00176
00178 virtual StatusCode findObject( DataObject* parentObj, int item, DataObject*& pObject );
00179
00181 virtual StatusCode updateRegistryEntry( IOpaqueAddress* pAddress, DataObject* pObj );
00182
00184 virtual StatusCode linkObject( IDataDirectory* from, const std::string& objPath, DataObject* to );
00185
00187 virtual StatusCode linkObject( const std::string& fromPath, const std::string& objPath, DataObject* to );
00188
00190 virtual StatusCode linkObject( DataObject* from, const std::string& objPath, DataObject* to );
00191
00193 virtual StatusCode linkObject( const std::string& fullPath, DataObject* to );
00194
00196 virtual StatusCode unlinkObject( IDataDirectory* from, const std::string& objPath );
00197
00199 virtual StatusCode unlinkObject( const std::string& fromPath, const std::string& objPath );
00200
00202 virtual StatusCode unlinkObject( DataObject* fromObj, const std::string& objPath );
00203
00205 virtual StatusCode unlinkObject( const std::string& fullPath );
00206
00208 virtual StatusCode updateObject(IDataDirectory* pDirectory );
00209
00211 virtual StatusCode updateObject( const std::string& updatePath );
00212
00214 virtual StatusCode updateObject( DataObject* toUpdate );
00215
00217 virtual StatusCode updateObject( const std::string& parentPath, const std::string& updatePath );
00218
00220 virtual StatusCode updateObject( DataObject* pParent, const std::string& updatePath );
00221
00223 virtual StatusCode queryInterface( const IID& riid, void** ppvUnknown );
00224
00226 virtual StatusCode initialize();
00227
00229 virtual StatusCode finalize();
00230
00231 protected:
00233 DataSvc( const std::string& name, ISvcLocator* svc );
00234
00236 virtual ~DataSvc();
00237
00239 bool checkRoot() {
00240 return m_root.isValid();
00241 }
00242
00244 StatusCode retrieveEntry( RegistryEntry* pNode,const std::string& path, RegistryEntry*& pEntry );
00245
00247 virtual StatusCode loadObject( IDataDirectory* pNode );
00248 };
00249 #endif // GAUDIKERNEL_DATASVC_H
00250