Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

DbImplementation.h

Go to the documentation of this file.
00001 //====================================================================
00002 //      DbCnvImpl definitions
00003 //--------------------------------------------------------------------
00004 //
00005 //      Package    : System ( The LHCb Offline System)
00006 //
00007 //      Author     : M.Frank
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 // STL include files
00019 #include <map>
00020 
00021 // Forward declarations
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   // Default implementations for ISetProperty
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   // Method for setting declared properties to the values
00176   // specifed for the job.
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 // Inline code:
00338 
00339 // Access to OODataBase type
00340 inline unsigned char DbImplementation::type()  const   {
00341   return m_type;
00342 }
00343 
00344 // Access to Message service
00345 inline IMessageSvc* DbImplementation::messageSvc()   {
00346   return m_messageSvc;
00347 }
00348 
00350 inline IOODataBase* DbImplementation::db()   {
00351   return m_ooDB;
00352 }
00353 
00354 // Access object's name
00355 inline const std::string& DbImplementation::name()  const    {
00356   return m_name;
00357 }
00358 
00359 // Access driver's name
00360 inline const std::string& DbImplementation::driver()  const    {
00361   return m_driver;
00362 }
00363 
00364 // Access database server's name
00365 inline const std::string& DbImplementation::server()  const    {
00366   return m_server;
00367 }
00368 
00369 //##############################################################################
00370 #endif // DBCNV_DBIMPLEMENTATION_H

Generated at Wed Nov 21 12:22:19 2001 by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000