00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef DBCNV_DBIMPLEMENTATION_H
00010 #define DBCNV_DBIMPLEMENTATION_H 1
00011
00013 #include "GaudiKernel/IProperty.h"
00014 #include "GaudiKernel/PropertyMgr.h"
00015 #include "GaudiDb/IOODataBase.h"
00016 #include "GaudiDb/DbContainer.h"
00017
00018
00019 #include <map>
00020
00021
00022 class IMessageSvc;
00023 class ISvcLocator;
00024 class IObjManager;
00041 class DbImplementation {
00042 protected:
00044 IMessageSvc* m_messageSvc;
00046 unsigned char m_type;
00048 IOODataBase* m_ooDB;
00050 mutable std::string m_name;
00052 std::string m_driver;
00054 std::string m_server;
00055 protected:
00057 virtual ~DbImplementation();
00058 public:
00060 DbImplementation(IOODataBase* idb, IMessageSvc* msg, unsigned char typ, const std::string& name="");
00062 unsigned char type() const;
00064 const std::string& name() const;
00066 const std::string& driver() const;
00068 const std::string& server() const;
00070 IMessageSvc* messageSvc();
00072 IOODataBase* db();
00073 };
00074
00092 class OODataBaseImplementation
00093 : virtual public IInterface,
00094 virtual public IOODataBase,
00095 virtual public IProperty
00096 {
00097 private:
00098 typedef std::map<std::string, DbTypeInfo*> DataTypes;
00099 DataTypes m_types;
00100 protected:
00102 long m_refCount;
00104 unsigned char m_type;
00106 mutable std::string m_name;
00108 std::string m_driver;
00110 std::string m_server;
00112 std::string m_defTType;
00114 std::string m_defPType;
00116 ISvcLocator* m_svcLocator;
00118 IMessageSvc* m_messageSvc;
00120 PropertyMgr* m_propertyMgr;
00122 IObjManager* m_objMgr;
00123 protected:
00125 OODataBaseImplementation(IInterface* loc, unsigned char typ);
00127 virtual ~OODataBaseImplementation();
00128 public:
00130 virtual unsigned long addRef();
00132 virtual unsigned long release();
00134 virtual StatusCode queryInterface(const IID& riid, void** ppvInterface);
00136 virtual StatusCode initialize (const std::string& name);
00138 virtual StatusCode finalize (void);
00140 virtual unsigned char type() const;
00142 virtual const std::string& name() const;
00144 virtual const std::string& driver() const;
00146 virtual void setDriver(const std::string& drv);
00148 virtual const std::string& server() const;
00150 virtual void setServer(const std::string& srv);
00152 virtual const DbTypeInfo* typeInfo(const std::string& nam) const;
00154 virtual DbTypeInfo* typeInfo(const std::string& nam);
00156 virtual DbResult addTypeInfo(const std::string& nam, DbTypeInfo * info);
00158 virtual DbTypeInfo* addTypeInfo(const std::string& nam, const std::string& t_type, const std::string& p_type, const std::string& desc, std::vector<DbColumn*>& cols);
00160 virtual DbTypeInfo* addTypeInfo(const IDbDataBase::Type* pType);
00162 virtual DbResult prepareLink(const dbObjectHandle<DbObject>& objH, dbHandle<DbLink>& linkH, void* gen);
00163
00164 virtual StatusCode setProperty(const Property& p);
00166 virtual StatusCode setProperty( std::istream& s );
00168 virtual StatusCode setProperty( const std::string& n, const std::string& v);
00169 virtual StatusCode getProperty(Property* p) const;
00170 virtual const Property& getProperty( const std::string& name) const;
00172 virtual StatusCode getProperty( const std::string& n, std::string& v ) const;
00173 virtual const std::vector<Property*>& getProperties( ) const;
00174
00175
00176
00177 virtual StatusCode setProperties();
00178
00180 template <class T>
00181 StatusCode declareProperty( const std::string& name, T& property ) const {
00182 m_propertyMgr->declareProperty(name, property);
00183 return StatusCode::SUCCESS;
00184 }
00185
00187 IMessageSvc* msgSvc();
00189 const IMessageSvc* msgSvc() const;
00190 };
00191
00209 class DbSessionImplementation
00210 : public DbImplementation, virtual public IDbSession
00211 {
00212 protected:
00214 DbAccessMode m_state;
00216 virtual ~DbSessionImplementation();
00217 public:
00219 DbSessionImplementation(IOODataBase* idb, IMessageSvc* msg, unsigned char typ);
00221 virtual void release();
00223 static IDbSession* getSession(const dbHandle<DbSession>& sessionH);
00224 };
00225
00243 class DbFederationImplementation
00244 : public DbImplementation, virtual public IDbFederation
00245 {
00246 protected:
00248 virtual ~DbFederationImplementation();
00249 public:
00251 DbFederationImplementation(IOODataBase* idb, IMessageSvc* msg, unsigned char typ);
00253 virtual void release();
00255 static IDbFederation* getFederation(const dbHandle<DbFederation>& fedH);
00256 };
00257
00275 class DbDataBaseImplementation
00276 : public DbImplementation, virtual public IDbDataBase
00277 {
00278 protected:
00280 dbHandle<DbContainer> m_links;
00282 DbAccessMode m_mode;
00283 protected:
00285 virtual ~DbDataBaseImplementation();
00286 public:
00288 DbDataBaseImplementation(IOODataBase* idb, IMessageSvc* msg, unsigned char typ);
00290 virtual void release();
00292 virtual DbResult find(dbHandle<DbContainer>& handle);
00294 virtual bool isEqual(const IDbDataBase::Link* link, const dbHandle<DbLink>* test);
00296 virtual DbResult assocEntry(const std::vector<IDbDataBase::Link*>& links, const dbHandle<DbLink>& test, std::string& db, std::string& cnt, std::string& obj);
00298 static IDbDataBase* getDataBase(const dbHandle<DbDataBase>& dbH);
00299 };
00300
00319 class DbContainerImplementation
00320 : public DbImplementation, virtual public IDbContainer
00321 {
00322 protected:
00324 virtual ~DbContainerImplementation();
00325 public:
00327 DbContainerImplementation(IOODataBase* idb, IMessageSvc* msg, unsigned char typ);
00329 virtual void release();
00331 static DbResult remove(dbHandle<DbContainer>& cntH, dbHandle<DbObject>& enclosed);
00333 static IDbContainer* getContainer(const dbHandle<DbContainer>& cntH);
00334 };
00335
00336
00337
00338
00339
00340 inline unsigned char DbImplementation::type() const {
00341 return m_type;
00342 }
00343
00344
00345 inline IMessageSvc* DbImplementation::messageSvc() {
00346 return m_messageSvc;
00347 }
00348
00350 inline IOODataBase* DbImplementation::db() {
00351 return m_ooDB;
00352 }
00353
00354
00355 inline const std::string& DbImplementation::name() const {
00356 return m_name;
00357 }
00358
00359
00360 inline const std::string& DbImplementation::driver() const {
00361 return m_driver;
00362 }
00363
00364
00365 inline const std::string& DbImplementation::server() const {
00366 return m_server;
00367 }
00368
00369
00370 #endif // DBCNV_DBIMPLEMENTATION_H