00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef DBCNV_DBBASECONVERTER_H
00012 #define DBCNV_DBBASECONVERTER_H
00013
00014
00015
00016 #include <string>
00017
00018
00019 #include "GaudiKernel/Converter.h"
00020 #include "GaudiKernel/CnvFactory.h"
00021 #include "GaudiDb/DbTypeInfo.h"
00022 #include "GaudiDb/DbDefObject.h"
00023
00024
00025 template <class TYPE> class CnvFactory;
00026 class DataObject;
00027 class IAddressCreator;
00028
00029
00061 class DbBaseConverter : public Converter {
00062 public:
00063 typedef dbHandle<DbDefObject> DefHandle;
00064 protected:
00066 IOODataBase* m_db;
00068 const DbTypeInfo* m_type;
00070 std::string m_cnvSvcName;
00072 std::string m_persSvcName;
00074 std::string m_dataSvcName;
00076 DbDefObject::HelperServices m_helperServices;
00077 protected:
00079 DbBaseConverter(const CLID& clid, IOODataBase* db, ISvcLocator* svc);
00081 virtual ~DbBaseConverter();
00083 virtual const std::string containerName(IDataDirectory* pDir) const;
00085 virtual DataObject* createTransient();
00087 virtual dbHandle<DbObject> createPersistent(dbHandle<DbContainer>& cntH);
00089 virtual StatusCode doUpdateRepRefs(IOpaqueAddress* pAddress, DataObject* pObject);
00090 public:
00092 static unsigned char storageType() {
00093 return DBOOMS_StorageType;
00094 }
00096 const DbTypeInfo* typeInfo() const;
00098 virtual StatusCode initialize();
00100 virtual StatusCode finalize();
00102 virtual StatusCode createObj(IOpaqueAddress* pAddress, DataObject*& refpObject);
00104 virtual StatusCode fillObjRefs(IOpaqueAddress* pAddress, DataObject* pObject);
00106 virtual StatusCode updateObj(IOpaqueAddress* pAddress, DataObject* pObject);
00108 virtual StatusCode updateObjRefs(IOpaqueAddress* pAddress, DataObject* pObject);
00110 virtual StatusCode createRep(DataObject* pObject, IOpaqueAddress*& refpAddress);
00112 virtual StatusCode fillRepRefs(IOpaqueAddress* pAddress,DataObject* pObject);
00114 virtual StatusCode updateRep(IOpaqueAddress* pAddress, DataObject* pObject);
00116 virtual StatusCode updateRepRefs(IOpaqueAddress* pAddress, DataObject* pObject);
00117
00119 virtual StatusCode beginTransientUpdate( DefHandle& objH, DataObject* pObject);
00121 virtual StatusCode endTransientUpdate( DefHandle& objH, DataObject* pObject);
00123 virtual StatusCode afterTransientUpdate( DefHandle& objH, DataObject* pObject);
00125 virtual StatusCode doTransientUpdate( DefHandle& objH, DataObject* pObject);
00126
00128 virtual StatusCode updateTransientDirectoryLinks(DefHandle& objH, DataObject* pObject);
00130 virtual StatusCode updateTransientSymbolicLinks(DefHandle& objH, DataObject* pObject);
00131
00133 virtual StatusCode preparePersistentUpdate( DefHandle& objH, const DataObject* pObject);
00135 virtual StatusCode beginPersistentUpdate( DefHandle& objH, const DataObject* pObject);
00137 virtual StatusCode endPersistentUpdate( DefHandle& objH, const DataObject* pObject);
00139 virtual StatusCode afterPersistentUpdate( DefHandle& objH, const DataObject* pObject);
00141 virtual StatusCode doPersistentUpdate( DefHandle& objH, const DataObject* pObject);
00142
00143
00145 StatusCode addPersistentLink(IOpaqueAddress* pA, DefHandle& objH, const DataObject* pObj);
00147 StatusCode addPersistentDirectoryLinks(DefHandle& objH, const DataObject* pObj);
00149 StatusCode addPersistentSymbolicLinks(DefHandle& objH, const DataObject* pObj);
00150 };
00151
00152 #endif // DBCNV_DBBASECONVERTER_H