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

In This Package:

SimpleOuputModule.cc

Go to the documentation of this file.
00001 
00002 #include "SimpleOuputModule.h"
00003 #include "RootIOSvc/IRootIOSvc.h"
00004 
00005 #include "GaudiKernel/RegistryEntry.h"
00006 #include "GaudiKernel/IConversionSvc.h"
00007 
00008 using namespace std;
00009 
00010 SimpleOuputModule::SimpleOuputModule(const std::string& name, 
00011                                      ISvcLocator* pSvcLocator)
00012     : GaudiAlgorithm(name,pSvcLocator)
00013     , m_rio(0)
00014     , m_cnv(0)
00015 {
00016 }
00017 
00018 SimpleOuputModule::~SimpleOuputModule()
00019 {
00020 }
00021 
00022 StatusCode SimpleOuputModule::initialize()
00023 {
00024     StatusCode sc = this->GaudiAlgorithm::initialize();
00025     if (sc.isFailure()) return sc;
00026 
00027     sc = serviceLocator()->getService("RootIOCnvSvc",
00028                                       IID_IConversionSvc,
00029                                       *pp_cast<IInterface>(&m_cnv));
00030     if (sc.isFailure()) {
00031         error() << "Failed to get IConversionSvc RootIOCnvSvc" << endreq;
00032         return sc;
00033     }
00034 
00035     sc = m_cnv->queryInterface(IRootIOSvc::interfaceID(),(void**)&m_rio);
00036     if (sc.isFailure()) {
00037         error() << "Failed to get IRootIOSvc interface from RootIOCnvSvc" << endreq;
00038         return sc;
00039     }
00040 
00041     return sc;
00042 }
00043 
00044 StatusCode SimpleOuputModule::execute()
00045 {
00046     DataObject *d = get<DataObject>("/Event");
00047     StatusCode sc = this->createReps(d);
00048     if (sc.isFailure()) {
00049         error() << "Failed in calling createReps" << endreq;
00050         return sc;
00051     }
00052 
00053     sc = this->fillRepRefs(d);
00054     if (sc.isFailure()) {
00055         error() << "Failed in calling fillRepRefs" << endreq;
00056     }
00057     return sc;
00058 }
00059 
00060 StatusCode SimpleOuputModule::createReps(DataObject* dobj)
00061 {
00062     IRegistry* dr = dobj->registry();
00063     using namespace DataSvcHelpers;
00064     RegistryEntry* dre = dynamic_cast<RegistryEntry*>(dr);
00065     if (!dre) {
00066         error() << "Failed in createReps to get RegistryEntry for " 
00067                 << dr->identifier() << endreq;
00068         return StatusCode::FAILURE;
00069     }
00070     
00071     RegistryEntry::Iterator it = dre->begin(), done = dre->end();
00072     for (; it != done; ++it) {
00073         string id = (*it)->identifier();
00074 
00075         DataObject* child = get<DataObject>(id);
00076         if (!child) {
00077             error() << "Failed in createReps to get object for " 
00078                     << id << endreq;
00079             return StatusCode::FAILURE;
00080         }
00081 
00082         IOpaqueAddress* addr = 0;
00083         StatusCode sc = m_cnv->createRep(child,addr);
00084         if (sc.isFailure()) {
00085             warning() << "Failed to createRep for " << id << ", skipping" << endreq;
00086             continue;
00087         }
00088         IRegistry* reg = child->registry();
00089         reg->setAddress(addr);
00090 
00091         sc = this->createReps(child);
00092         if (sc.isFailure()) return sc;
00093     }
00094     return StatusCode::SUCCESS;
00095 }
00096 
00097 StatusCode SimpleOuputModule::fillRepRefs(DataObject* dobj)
00098 {
00099     IRegistry* dr = dobj->registry();
00100     using namespace DataSvcHelpers;
00101     RegistryEntry* dre = dynamic_cast<RegistryEntry*>(dr);
00102     if (!dre) {
00103         error() << "Failed in fillReps to get RegistryEntry for " 
00104                 << dr->identifier() << endreq;
00105         return StatusCode::FAILURE;
00106     }
00107     
00108     RegistryEntry::Iterator it = dre->begin(), done = dre->end();
00109     for (; it != done; ++it) {
00110         string id = (*it)->identifier();
00111 
00112         DataObject* child = get<DataObject>(id);
00113         if (!child) {
00114             error() << "Failed to in fillReps get object for "
00115                     << id << endreq;
00116             return StatusCode::FAILURE;
00117         }
00118 
00119         IRegistry* reg = child->registry();
00120         StatusCode sc = m_cnv->fillRepRefs(reg->address(), child);
00121         if (sc.isFailure()) {
00122             warning() << "Failed to fillRepRefs with " 
00123                       << id << ", skipping" << endreq;
00124             continue;
00125         }
00126 
00127         sc = this->fillRepRefs(child);
00128         if (sc.isFailure()) return sc;
00129     }
00130     return StatusCode::SUCCESS;
00131 }
00132 
00133 StatusCode SimpleOuputModule::finalize()
00134 {
00135 
00136     return this->GaudiAlgorithm::finalize();
00137 }
00138 
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:58:40 2011 for RootIOTest by doxygen 1.4.7