| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

DataObjectCnv Class Reference

A "converter" for DataObject. More...

#include <DataObjectCnv.h>

Inheritance diagram for DataObjectCnv:

[legend]
Collaboration diagram for DataObjectCnv:
[legend]
List of all members.

Public Types

 INVALID_ADDRESS
 INVALID_OBJECT
 NO_MEMORY
 BAD_STORAGE_TYPE
 NO_SOURCE_OBJECT
 ICONVERSIONSVC_LAST_ERROR
 SUCCESS
 NO_INTERFACE
 VERSMISMATCH
 LAST_ERROR
enum  Status

Public Member Functions

virtual long repSvcType () const
 DataObjectCnv (ISvcLocator *svc)
virtual ~DataObjectCnv ()
virtual StatusCode initialize ()
virtual StatusCode createObj (IOpaqueAddress *addr, DataObject *&dat)
 Convert the persistent object to transient.
virtual StatusCode fillObjRefs (IOpaqueAddress *pAddress, DataObject *pObject)
 Resolve the references of the converted object.
virtual StatusCode queryInterface (const InterfaceID &riid, void **ppvInterface)
virtual unsigned long addRef ()
virtual unsigned long release ()
virtual StatusCode finalize ()
virtual StatusCode setDataProvider (IDataProviderSvc *svc)
virtual IDataProviderSvcdataProvider () const
virtual StatusCode setConversionSvc (IConversionSvc *svc)
virtual IConversionSvcconversionSvc () const
virtual StatusCode setAddressCreator (IAddressCreator *creator)
virtual IAddressCreatoraddressCreator () const
virtual const CLIDobjType () const
virtual long i_repSvcType () const
virtual StatusCode updateObj (IOpaqueAddress *pAddress, DataObject *refpObject)
virtual StatusCode updateObjRefs (IOpaqueAddress *pAddress, DataObject *pObject)
virtual StatusCode createRep (DataObject *pObject, IOpaqueAddress *&refpAddress)
virtual StatusCode fillRepRefs (IOpaqueAddress *pAddress, DataObject *pObject)
virtual StatusCode updateRep (IOpaqueAddress *pAddress, DataObject *pObject)
virtual StatusCode updateRepRefs (IOpaqueAddress *pAddress, DataObject *pObject)
StatusCode service (const std::string &name, T *&psvc, bool createIf=false) const
StatusCode service (const std::string &type, const std::string &name, T *&psvc) const

Static Public Member Functions

static const CLIDclassID ()
static const unsigned char storageType ()
static const InterfaceIDinterfaceID ()

Public Attributes

 INVALID_ADDRESS
 INVALID_OBJECT
 NO_MEMORY
 BAD_STORAGE_TYPE
 NO_SOURCE_OBJECT
 ICONVERSIONSVC_LAST_ERROR

Protected Member Functions

ISvcLocatorserviceLocator () const
IMessageSvcmsgSvc () const
IMessageSvcmessageService () const
IDataManagerSvcdataManager () const

Private Attributes

IRootIOSvcm_rioSvc
 Pointer to the RootIOCnvSvc.

Detailed Description

A "converter" for DataObject.

This converter applies Daya Bay specific I/O policy, namely using RegistrationSequence to control what is written and read.

bv@bnl.gov Fri Jul 11 14:45:57 2008

Definition at line 22 of file DataObjectCnv.h.


Constructor & Destructor Documentation

DataObjectCnv::DataObjectCnv ( ISvcLocator svc  ) 

Definition at line 14 of file DataObjectCnv.cc.

00015     : Converter(ROOT_StorageType,CLID_DataObject,svc)
00016     
00017 {
00018 }

DataObjectCnv::~DataObjectCnv (  )  [virtual]

Definition at line 20 of file DataObjectCnv.cc.

00021 {
00022 }


Member Function Documentation

static const CLID& DataObjectCnv::classID (  )  [inline, static]

Definition at line 24 of file DataObjectCnv.h.

00024                                  {
00025         return CLID_DataObject;
00026     }

static const unsigned char DataObjectCnv::storageType (  )  [inline, static]

Definition at line 27 of file DataObjectCnv.h.

00027                                              {
00028         return ROOT_StorageType; 
00029     }

virtual long DataObjectCnv::repSvcType (  )  const [inline, virtual]

Implements Converter.

Definition at line 30 of file DataObjectCnv.h.

00030                                     {
00031         return ROOT_StorageType; 
00032     }

StatusCode DataObjectCnv::initialize (  )  [virtual]

Reimplemented from Converter.

Definition at line 24 of file DataObjectCnv.cc.

00025 {
00026     StatusCode sc = Converter::initialize();
00027     if (sc.isFailure()) return sc;
00028 
00029     MsgStream log(msgSvc(), "DataObjectCnv::initialize()");
00030 
00031     IService* isvc=0;
00032     sc = serviceLocator()->service("RootIOCnvSvc", isvc, false);
00033     if (sc.isFailure()) {
00034         log << MSG::ERROR << "Conversion service RootIOCnvSvc"
00035             << " could not be retrieved" << endreq;
00036         return sc;
00037     }
00038     isvc->addRef();
00039 
00040     sc = isvc->queryInterface(IRootIOSvc::interfaceID(), (void**)&m_rioSvc);
00041     if (sc.isFailure()) {
00042         log << MSG::ERROR << "Conversion service RootIOCnvSvc"
00043             << " does not implement IRootIOCnvSvc" << endreq;
00044     }
00045 
00046     return sc;
00047 }

StatusCode DataObjectCnv::createObj ( IOpaqueAddress addr,
DataObject *&  dat 
) [virtual]

Convert the persistent object to transient.

Reimplemented from Converter.

Definition at line 51 of file DataObjectCnv.cc.

00053 {
00054     dat = new DataObject;
00055     return StatusCode::SUCCESS;
00056 }

StatusCode DataObjectCnv::fillObjRefs ( IOpaqueAddress pAddress,
DataObject pObject 
) [virtual]

Resolve the references of the converted object.

Reimplemented from Converter.

Definition at line 59 of file DataObjectCnv.cc.

00061 {
00062     // check if everything looks kosher.  
00063 
00064     MsgStream log(msgSvc(), "DataObjectCnv::fillObjRefs()");
00065     RootInputAddress* ria = dynamic_cast<RootInputAddress*>(addr);
00066     if (!ria) return StatusCode::FAILURE;
00067 
00068     log << MSG::DEBUG
00069         << " addr is a RIA @ " << ria->tespath() 
00070         << " clID=" << ria->clID() << endreq;
00071 
00072     if (ria->clID() != CLID_DataObject) {
00073         log << MSG::WARNING << "given unexpected class ID "
00074             << ria->clID() << endreq;
00075         return StatusCode::SUCCESS;
00076     }
00077 
00078     string location = ria->registry()->identifier();
00079 
00080     if (location != "/Event") {
00081         log << MSG::WARNING << "fillObjRefs() called with unexpected location "
00082             << location << endreq;
00083         return StatusCode::SUCCESS;
00084     }
00085 
00086 
00087     // Register address for RegistrationSequence.
00088 
00089     // Fixme: needs to be configurable?
00090     string rsloc = DayaBay::RegistrationSequence::defaultLocation();
00091     int rsclid = DayaBay::RegistrationSequence::classID();
00092     RootInputAddress* rsria = 0;
00093     rsria = new RootInputAddress(rsclid,rsloc);
00094     rsria->setEntry(ria->entry());
00095     RootInputStream* rsris = m_rioSvc->inputStream(*rsria);
00096     rsria->setStream(rsris);
00097     m_rioSvc->dataMgrSvc()->registerAddress(rsloc,rsria);
00098 
00099     // Pull RegistrationSequence out of TES to trigger its converter
00100     DataObject* rsobj = 0;
00101     return m_rioSvc->dataSvc()->
00102         retrieveObject(DayaBay::RegistrationSequence::defaultLocation(),rsobj);
00103 }


Member Data Documentation

IRootIOSvc* DataObjectCnv::m_rioSvc [private]

Pointer to the RootIOCnvSvc.

Definition at line 50 of file DataObjectCnv.h.


The documentation for this class was generated from the following files:
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:18:45 2011 for PerBaseEvent by doxygen 1.4.7