|
Gaudi Framework, version v22r2 |
| Home | Generated: Tue May 10 2011 |
Description: NTuple directory converter class definition Definition of the converter to manage the directories in an database representing N-Tuples. More...
#include <GaudiPoolDb/PoolDbDirectoryCnv.h>


Public Member Functions | |
| PoolDbDirectoryCnv (long typ, const CLID &clid, ISvcLocator *svc) | |
| Initializing Constructor. | |
| virtual | ~PoolDbDirectoryCnv () |
| Standard Destructor. | |
| virtual StatusCode | createObj (IOpaqueAddress *pAddr, DataObject *&refpObj) |
| Converter overrides: Create transient object from persistent data. | |
| virtual StatusCode | fillObjRefs (IOpaqueAddress *pAddr, DataObject *pObj) |
| Converter overrides: Resolve the references of the transient object. | |
| virtual StatusCode | updateObj (IOpaqueAddress *pAddr, DataObject *pObj) |
| Converter overrides: Update transient object from persistent data. | |
| virtual StatusCode | updateObjRefs (IOpaqueAddress *pAddr, DataObject *pObj) |
| Converter overrides: Update the references of an updated transient object. | |
| virtual StatusCode | createRep (DataObject *pObj, IOpaqueAddress *&refpAddr) |
| Converter overrides: Convert the transient object to the requested representation. | |
| virtual StatusCode | updateRep (IOpaqueAddress *pAddr, DataObject *pObj) |
| Converter overrides: Update persistent object representation. | |
| virtual StatusCode | updateRepRefs (IOpaqueAddress *pAddr, DataObject *pObj) |
| Converter overrides: Update references of persistent object representation. | |
Description: NTuple directory converter class definition Definition of the converter to manage the directories in an database representing N-Tuples.
Definition at line 26 of file PoolDbDirectoryCnv.h.
| PoolDbDirectoryCnv::PoolDbDirectoryCnv | ( | long | typ, |
| const CLID & | clid, | ||
| ISvcLocator * | svc | ||
| ) |
Initializing Constructor.
| typ | [IN] Concrete storage type of the converter |
| clid | [IN] Class identifier of the object |
| svc | [IN] Pointer to service locator object |
| virtual PoolDbDirectoryCnv::~PoolDbDirectoryCnv | ( | ) | [inline, virtual] |
| StatusCode PoolDbDirectoryCnv::createObj | ( | IOpaqueAddress * | pAddr, |
| DataObject *& | refpObj | ||
| ) | [virtual] |
Converter overrides: Create transient object from persistent data.
Create transient object from persistent data.
| pAddr | [IN] Pointer to object address. |
| refpObj | [OUT] Location to pointer to store data object |
Reimplemented from PoolDbBaseCnv.
Reimplemented in PoolDbDatabaseCnv.
Definition at line 52 of file PoolDbDirectoryCnv.cpp.
{
refpObject = new NTuple::Directory();
return StatusCode::SUCCESS;
}
| StatusCode PoolDbDirectoryCnv::createRep | ( | DataObject * | pObj, |
| IOpaqueAddress *& | refpAddr | ||
| ) | [virtual] |
Converter overrides: Convert the transient object to the requested representation.
| pObj | [IN] Pointer to data object |
| refpAddr | [OUT] Location to store pointer to object address. |
Reimplemented from PoolDbBaseCnv.
Definition at line 60 of file PoolDbDirectoryCnv.cpp.
{
std::string dsc;
pool::Guid guid(pool::Guid::null());
guid.Data1 = objType();
if ( objType() == CLID_StatisticsDirectory ) {
dsc = "Directory containing statistics results.";
}
else if ( objType() == CLID_StatisticsFile ) {
dsc = "File containing statistics results.";
}
else {
return StatusCode::FAILURE;
}
std::string ident = containerName(pObject->registry());
std::string path = fileName(pObject->registry());
return saveDescription(path, ident, dsc, "", guid, objType(), "UPDATE");
}
| StatusCode PoolDbDirectoryCnv::fillObjRefs | ( | IOpaqueAddress * | pAddr, |
| DataObject * | pObj | ||
| ) | [virtual] |
Converter overrides: Resolve the references of the transient object.
| pAddr | [IN] Pointer to object address. |
| pObj | [IN] Pointer to data object |
Reimplemented from PoolDbBaseCnv.
Definition at line 83 of file PoolDbDirectoryCnv.cpp.
{
return updateObjRefs(pAddr, pObj);
}
| StatusCode PoolDbDirectoryCnv::updateObj | ( | IOpaqueAddress * | pAddr, |
| DataObject * | pObj | ||
| ) | [virtual] |
Converter overrides: Update transient object from persistent data.
| pAddr | [IN] Pointer to object address. |
| pObj | [IN] Pointer to data object |
Reimplemented from PoolDbBaseCnv.
Definition at line 184 of file PoolDbDirectoryCnv.cpp.
{
return StatusCode::SUCCESS;
}
| StatusCode PoolDbDirectoryCnv::updateObjRefs | ( | IOpaqueAddress * | pAddr, |
| DataObject * | pObj | ||
| ) | [virtual] |
Converter overrides: Update the references of an updated transient object.
| pAddr | [IN] Pointer to object address. |
| pObj | [IN] Pointer to data object |
Reimplemented from PoolDbBaseCnv.
Definition at line 89 of file PoolDbDirectoryCnv.cpp.
{
typedef std::vector<PoolDbNTupleDescriptor*> REFS;
REFS refs;
StatusCode status = StatusCode(StatusCode::FAILURE,true);
MsgStream log(msgSvc(), "PoolDbDatabaseCnv");
if ( pAddr ) {
IRegistry* pReg = pAddr->registry();
if ( pReg ) {
std::string ident = pReg->identifier();
std::string fname = fileName(pReg);
std::string cntName = containerName(pReg);
std::auto_ptr<pool::DbSelect> iter(m_dbMgr->createSelect("*", fname, "GaudiStatisticsDescription"));
if ( iter.get() ) {
pool::DbObjectCallBack cb(pool::DbReflex::forTypeName("PoolDbNTupleDescriptor"));
typedef std::vector<IRegistry*> Leaves;
pool::Token* token = 0;
Leaves leaves;
while( iter->next(token).isSuccess() ) {
m_dbMgr->read(&cb, *token).ignore();
PoolDbNTupleDescriptor* ref = (PoolDbNTupleDescriptor*)cb.object();
std::string s = ref->container.substr(0,cntName.length());
if ( s == cntName ) {
if ( ref->container.length() > cntName.length()+1 ) {
if ( ref->container.find('/',cntName.length()+1) == std::string::npos ) {
refs.push_back(ref);
token->release();
continue;
}
}
}
delete ref;
token->release();
}
status = m_dataMgr->objectLeaves(pObject, leaves);
if ( status.isSuccess() ) {
for(REFS::iterator i = refs.begin(); i != refs.end(); ++i) {
REFS::value_type& ref = *i;
if ( ref ) {
bool need_to_add = true;
for(Leaves::iterator j=leaves.begin(); j != leaves.end(); ++j ) {
std::string curr_leaf = containerName(*j);
if ( curr_leaf == ref->container ) {
need_to_add = false;
break;
}
}
if ( need_to_add ) {
IOpaqueAddress* pA= 0;
if ( ref->clid == CLID_StatisticsDirectory ||
ref->clid == CLID_StatisticsFile ||
ref->clid == CLID_RowWiseTuple ||
ref->clid == CLID_ColumnWiseTuple )
{
std::string spar[] = { fname, ref->container};
unsigned long ipar[] = { pool::INVALID, pool::INVALID};
status = m_dbMgr->createAddress(repSvcType(),
ref->clid,
spar,
ipar,
pA);
}
if ( status.isSuccess() ) {
std::string top = topLevel(pReg);
std::string leaf_name = top + ref->container.substr(7);
status = m_dataMgr->registerAddress(leaf_name, pA);
if ( status.isSuccess() ) {
continue;
}
makeError("Failed to register leaves to directory:"+ident,false).ignore();
break;
}
makeError("Failed to create leave address to directory:"+ident,false).ignore();
break;
}
}
makeError("Failed to add leaves to directory:"+ident,false).ignore();
break;
}
}
}
else {
return makeError("Failed to access required tuple data description.",false);
}
}
}
for(REFS::iterator k = refs.begin(); k != refs.end(); ++k) {
if ( *k ) delete (*k);
}
return status;
}
| StatusCode PoolDbDirectoryCnv::updateRep | ( | IOpaqueAddress * | pAddr, |
| DataObject * | pObj | ||
| ) | [virtual] |
Converter overrides: Update persistent object representation.
| pObj | [IN] Pointer to data object |
| refpAddr | [OUT] Location to store pointer to object address. |
Reimplemented from PoolDbBaseCnv.
Definition at line 192 of file PoolDbDirectoryCnv.cpp.
{
return StatusCode::SUCCESS;
}
| StatusCode PoolDbDirectoryCnv::updateRepRefs | ( | IOpaqueAddress * | pAddr, |
| DataObject * | pObj | ||
| ) | [virtual] |
Converter overrides: Update references of persistent object representation.
| pObj | [IN] Pointer to data object |
| refpAddr | [OUT] Location to store pointer to object address. |
Reimplemented from PoolDbBaseCnv.
Definition at line 200 of file PoolDbDirectoryCnv.cpp.
{
return StatusCode::SUCCESS;
}