Gaudi Framework, version v20r4

Generated: 8 Jan 2009

PoolDbDatabaseCnv.cpp

Go to the documentation of this file.
00001 // $Id: PoolDbDatabaseCnv.cpp,v 1.4 2006/11/30 14:50:44 mato Exp $
00002 //------------------------------------------------------------------------------
00003 //
00004 // Implementation of class :  PoolDbDatabaseCnv
00005 //
00006 // Author :                   Markus Frank
00007 //
00008 //------------------------------------------------------------------------------
00009 // Include files
00010 #include "GaudiPoolDb/PoolDbDatabaseCnv.h"
00011 
00012 #include "GaudiKernel/IOpaqueAddress.h"
00013 #include "GaudiKernel/IRegistry.h"
00014 #include "GaudiKernel/MsgStream.h"
00015 #include "GaudiKernel/NTuple.h"
00016 #include "GaudiKernel/CnvFactory.h"
00017 
00018 // Factory declaration
00019 PLUGINSVC_FACTORY_WITH_ID( PoolDbDatabaseCnv, 
00020                            ConverterID(POOL_StorageType,CLID_StatisticsFile),
00021                            IConverter*(long, CLID, ISvcLocator*) );
00022 
00024 PoolDbDatabaseCnv::PoolDbDatabaseCnv(long typ, const CLID& cl, ISvcLocator* svc)
00025 : PoolDbDirectoryCnv(typ, cl, svc)
00026 {
00027 }
00028 
00030 PoolDbDatabaseCnv::~PoolDbDatabaseCnv()   {
00031 }
00032 
00033 // Create database object
00034 StatusCode
00035 PoolDbDatabaseCnv::createObj(IOpaqueAddress* pAddr, DataObject*& refpObj)  {
00036   StatusCode status = StatusCode::FAILURE;
00037   MsgStream log(msgSvc(), "PoolDbDatabaseCnv");
00038   if ( pAddr ) {
00039     IRegistry* pReg = pAddr->registry();
00040     const unsigned long* ipars = pAddr->ipar();
00041     const std::string*   spars = pAddr->par();
00042     char mode = char(ipars[1]);
00043     pool::Guid guid(pool::Guid::null());
00044     std::string fname   = spars[0];
00045     std::string oname   = pReg->name();
00046     bool recrea = mode == 'R';
00047     bool create = mode == 'N';
00048     bool update = mode == 'U';
00049     bool read   = mode == 'O';
00050     const CLID& clid = objType();
00051     status = StatusCode::SUCCESS;
00052     guid.Data1 = objType();
00053     std::string cntName = containerName(pReg);
00054     if ( create ) {
00055       status = saveDescription(fname, cntName, "File containing statistics results.",
00056                                "", guid, clid, "NEW");
00057       if ( status.isSuccess() )  {
00058         log << MSG::INFO << "Opened NEW Database file:" 
00059             << fname << " as " << oname << endreq;
00060       }
00061     }
00062     else if ( update )  {
00063       status = saveDescription(fname, cntName, "File containing statistics results.",
00064                                "", guid, clid, "UPDATE");
00065       if ( status.isSuccess() )  {
00066         log << MSG::INFO << "Connect to existing Database file:" 
00067             << fname << " as " << oname << " for UPDATE" << endreq;
00068       }
00069     }
00070     else if ( read ) {
00071       if ( status.isSuccess() )  {
00072         log << MSG::INFO << "Connect to existing Database file:" 
00073             << fname << " as " << oname << " for READ" << endreq;
00074       }
00075     }
00076     else if ( recrea )  {
00077       status = saveDescription(fname, cntName, "File containing statistics results.",
00078                                "", guid, clid, "RECREATE");
00079       if ( status.isSuccess() )  {
00080         log << MSG::INFO << "Recreate Database file:" << fname << " as " << oname << endreq;
00081       }
00082     }
00083     else  {
00084       log << MSG::ERROR << "Don't know what to do:" << fname << endreq;
00085       status = StatusCode::FAILURE;
00086     }
00087     // Now create object
00088     if ( status.isSuccess() )  {
00089       NTuple::File* pFile = new NTuple::File(objType(), fname, oname);
00090       pFile->setOpen(false);
00091       refpObj = pFile;
00092     }
00093   }
00094   return status;
00095 }
00096 

Generated at Thu Jan 8 17:44:22 2009 for Gaudi Framework, version v20r4 by Doxygen version 1.5.6 written by Dimitri van Heesch, © 1997-2004