![]() |
|
|
Generated: 18 Jul 2008 |
#include <PersistencySvc.h>
Inheritance diagram for PersistencySvc:


System: The LHCb Offline System
Package: PersistencySvc
Dependencies:
History:
+---------+----------------------------------------------+---------+
| Date | Comment | Who |
+---------+----------------------------------------------+---------+
| 3/11/98 | Initial version | M.Frank |
+---------+----------------------------------------------+---------+
Definition at line 53 of file PersistencySvc.h.
: Object implementation | |
| PersistencySvc (const std::string &name, ISvcLocator *svc) | |
| Standard Constructor. | |
| virtual | ~PersistencySvc () |
| Standard Destructor. | |
| IConversionSvc * | service (const std::string &nam) |
| Retrieve conversion service by name. | |
| IConversionSvc * | service (long service_type) |
| Retrieve conversion service from list. | |
| IAddressCreator * | addressCreator (long service_type) |
| Retrieve address creator from list. | |
| void | encodeAddrHdr (long service_type, const CLID &clid, std::string &address) const |
| Retrieve string from storage type and clid. | |
| void | decodeAddrHdr (const std::string &address, long &service_type, CLID &clid, std::string &address_trailer) const |
| Retrieve storage type and clid from address header of string. | |
| StatusCode | makeCall (int typ, IOpaqueAddress *&pAddress, DataObject *&pObject) |
| Implementation helper. | |
| bool | enable (bool value) |
| Set enabled flag. | |
Public Member Functions | |
IPersistencySvc Interface implementation | |
| long | repSvcType () const |
| Return default service type. | |
| const CLID & | objType () const |
| Retrieve the class type of objects the converter produces. (DUMMY). | |
| virtual StatusCode | createObj (IOpaqueAddress *pAddress, DataObject *&refpObject) |
| Implementation of IConverter: Create the transient representation of an object. | |
| virtual StatusCode | fillObjRefs (IOpaqueAddress *pAddress, DataObject *pObject) |
| Implementation of IConverter: Resolve the references of the created transient object. | |
| virtual StatusCode | updateObj (IOpaqueAddress *pAddress, DataObject *refpObject) |
| Implementation of IConverter: Update the transient object from the other representation. | |
| virtual StatusCode | updateObjRefs (IOpaqueAddress *pAddress, DataObject *pObject) |
| Implementation of IConverter: Update the references of an updated transient object. | |
| virtual StatusCode | createRep (DataObject *pObject, IOpaqueAddress *&refpAddress) |
| Implementation of IConverter: Convert the transient object to the requested representation. | |
| virtual StatusCode | fillRepRefs (IOpaqueAddress *pAddress, DataObject *pObject) |
| Implementation of IConverter: Resolve the references of the converted object. | |
| virtual StatusCode | updateRep (IOpaqueAddress *pAddress, DataObject *pObject) |
| Implementation of IConverter: Update the converted representation of a transient object. | |
| virtual StatusCode | updateRepRefs (IOpaqueAddress *pAddress, DataObject *pObject) |
| Implementation of IConverter: Update the references of an already converted object. | |
| virtual StatusCode | setDataProvider (IDataProviderSvc *pStore) |
| Define transient datastore. | |
| virtual IDataProviderSvc * | dataProvider () const |
| Access reference to transient datastore. | |
| virtual StatusCode | setConversionSvc (IConversionSvc *svc) |
| Set conversion service the converter is connected to. | |
| virtual IConversionSvc * | conversionSvc () const |
| Get conversion service the converter is connected to. | |
| virtual StatusCode | setAddressCreator (IAddressCreator *creator) |
| Set address creator facility. | |
| virtual IAddressCreator * | addressCreator () const |
| Retrieve address creator facility. | |
| virtual StatusCode | addConverter (IConverter *pConverter) |
| Add converter object to conversion service. | |
| virtual StatusCode | addConverter (const CLID &clid) |
| Add converter object to conversion service. | |
| virtual IConverter * | converter (const CLID &clid) |
| Retrieve converter from list. | |
| virtual StatusCode | removeConverter (const CLID &clid) |
| Remove converter object from conversion service (if present). | |
| virtual StatusCode | connectOutput (const std::string &outputFile, const std::string &openMode) |
| Connect the output file to the service with open mode. | |
| virtual StatusCode | connectOutput (const std::string &outputFile) |
| Connect the output file to the service. | |
| virtual StatusCode | commitOutput (const std::string &output, bool do_commit) |
| Commit pending output. | |
| virtual StatusCode | createAddress (long svc_type, const CLID &clid, const std::string *pars, const unsigned long *ipars, IOpaqueAddress *&refpAddress) |
| Create a Generic address using explicit arguments to identify a single object. | |
| virtual StatusCode | convertAddress (const IOpaqueAddress *pAddress, std::string &refAddress) |
| Convert an address to string form. | |
| virtual StatusCode | createAddress (long svc_type, const CLID &clid, const std::string &refAddress, IOpaqueAddress *&refpAddress) |
| Convert an address in string form to object form. | |
: IPersistencySvc implementation | |
| virtual StatusCode | addCnvService (IConversionSvc *service) |
| Add a new Service. | |
| virtual StatusCode | removeCnvService (long type) |
| Remove a Service. | |
| virtual StatusCode | setDefaultCnvService (long type) |
| Set default service type. | |
| virtual StatusCode | getService (long service_type, IConversionSvc *&refpSvc) |
| Retrieve conversion service identified by technology. | |
| virtual StatusCode | getService (const std::string &service_type, IConversionSvc *&refpSvc) |
| Retrieve conversion service identified by technology. | |
: IService implementation | |
| virtual StatusCode | initialize () |
| Initialize the service. | |
| virtual StatusCode | finalize () |
| stop the service. | |
: IInterface implementation | |
| StatusCode | queryInterface (const InterfaceID &riid, void **ppvUnknown) |
| Query interface. | |
Protected Types | |
| typedef std::map< long, ServiceEntry > | Services |
Protected Member Functions | |
| void | svcNamesHandler (Property &theProp) |
| Handlers for Service Names Property. | |
Protected Attributes | |
| long | m_cnvDefType |
| Default service type. | |
| IDataProviderSvc * | m_dataSvc |
| Pointer to datma provider service. | |
| Services | m_cnvServices |
| List of convermsion workers. | |
| IConversionSvc * | m_cnvDefault |
| Default output service. | |
| StringArrayProperty | m_svcNames |
| Names of services to be requested from the service locator and added by default. | |
| bool | m_enable |
| Flag to indicate that the service is enabled. | |
Friends | |
| class | SvcFactory< PersistencySvc > |
| class | Factory< PersistencySvc, IService *(std::string, ISvcLocator *)> |
Classes | |
| class | ServiceEntry |
typedef std::map<long,ServiceEntry> PersistencySvc::Services [protected] |
Definition at line 97 of file PersistencySvc.h.
| PersistencySvc::PersistencySvc | ( | const std::string & | name, | |
| ISvcLocator * | svc | |||
| ) |
Standard Constructor.
Definition at line 647 of file PersistencySvc.cpp.
References Service::declareProperty(), Property::declareUpdateHandler(), m_svcNames, and svcNamesHandler().
00648 : Service(name, svc), 00649 m_cnvDefType(TEST_StorageType), 00650 m_dataSvc(0), 00651 m_cnvDefault(0), 00652 m_enable(true) 00653 { 00654 declareProperty("CnvServices", m_svcNames); 00655 m_svcNames.declareUpdateHandler( &PersistencySvc::svcNamesHandler, this ); 00656 }
| PersistencySvc::~PersistencySvc | ( | ) | [virtual] |
| long PersistencySvc::repSvcType | ( | ) | const [virtual] |
Return default service type.
Implements IConverter.
Definition at line 337 of file PersistencySvc.cpp.
References m_cnvDefault, and IConverter::repSvcType().
00337 { 00338 long typ = (m_cnvDefault) ? m_cnvDefault->repSvcType() : 0; 00339 return typ; 00340 }
| const CLID & PersistencySvc::objType | ( | ) | const [virtual] |
Retrieve the class type of objects the converter produces. (DUMMY).
Implements IConverter.
Definition at line 584 of file PersistencySvc.cpp.
References CLID_NULL.
00584 { 00585 return CLID_NULL; 00586 }
| StatusCode PersistencySvc::createObj | ( | IOpaqueAddress * | pAddress, | |
| DataObject *& | refpObject | |||
| ) | [virtual] |
Implementation of IConverter: Create the transient representation of an object.
Implements IConverter.
Definition at line 115 of file PersistencySvc.cpp.
References CREATE_OBJ, and makeCall().
00115 { 00116 return makeCall(CREATE_OBJ, pAddr, refpObj); 00117 }
| StatusCode PersistencySvc::fillObjRefs | ( | IOpaqueAddress * | pAddress, | |
| DataObject * | pObject | |||
| ) | [virtual] |
Implementation of IConverter: Resolve the references of the created transient object.
Implements IConverter.
Definition at line 120 of file PersistencySvc.cpp.
References FILL_OBJ_REFS, and makeCall().
00120 { 00121 return makeCall(FILL_OBJ_REFS, pAddr, pObj); 00122 }
| StatusCode PersistencySvc::updateObj | ( | IOpaqueAddress * | pAddress, | |
| DataObject * | refpObject | |||
| ) | [virtual] |
Implementation of IConverter: Update the transient object from the other representation.
Implements IConverter.
Definition at line 125 of file PersistencySvc.cpp.
References makeCall(), and UPDATE_OBJ.
00125 { 00126 return makeCall(UPDATE_OBJ, pAddr, pObj); 00127 }
| StatusCode PersistencySvc::updateObjRefs | ( | IOpaqueAddress * | pAddress, | |
| DataObject * | pObject | |||
| ) | [virtual] |
Implementation of IConverter: Update the references of an updated transient object.
Implements IConverter.
Definition at line 130 of file PersistencySvc.cpp.
References makeCall(), and UPDATE_OBJ_REFS.
00130 { 00131 return makeCall(UPDATE_OBJ_REFS, pAddr, pObj); 00132 }
| StatusCode PersistencySvc::createRep | ( | DataObject * | pObject, | |
| IOpaqueAddress *& | refpAddress | |||
| ) | [virtual] |
Implementation of IConverter: Convert the transient object to the requested representation.
Implements IConverter.
Reimplemented in HistogramPersistencySvc.
Definition at line 135 of file PersistencySvc.cpp.
References CREATE_REP, and makeCall().
Referenced by HistogramPersistencySvc::createRep().
00135 { 00136 return makeCall(CREATE_REP, refpAddr, pObj); 00137 }
| StatusCode PersistencySvc::fillRepRefs | ( | IOpaqueAddress * | pAddress, | |
| DataObject * | pObject | |||
| ) | [virtual] |
Implementation of IConverter: Resolve the references of the converted object.
Implements IConverter.
Definition at line 140 of file PersistencySvc.cpp.
References FILL_REP_REFS, and makeCall().
00140 { 00141 return makeCall(FILL_REP_REFS, pAddr, pObj); 00142 }
| StatusCode PersistencySvc::updateRep | ( | IOpaqueAddress * | pAddress, | |
| DataObject * | pObject | |||
| ) | [virtual] |
Implementation of IConverter: Update the converted representation of a transient object.
Implements IConverter.
Definition at line 145 of file PersistencySvc.cpp.
References makeCall(), and UPDATE_REP.
00145 { 00146 return makeCall(UPDATE_REP, pAddr, pObj); 00147 }
| StatusCode PersistencySvc::updateRepRefs | ( | IOpaqueAddress * | pAddress, | |
| DataObject * | pObject | |||
| ) | [virtual] |
Implementation of IConverter: Update the references of an already converted object.
Implements IConverter.
Definition at line 150 of file PersistencySvc.cpp.
References makeCall(), and UPDATE_REP_REFS.
00150 { 00151 return makeCall(UPDATE_REP_REFS, pAddr, pObj); 00152 }
| StatusCode PersistencySvc::setDataProvider | ( | IDataProviderSvc * | pStore | ) | [virtual] |
Define transient datastore.
Implements IConverter.
Definition at line 172 of file PersistencySvc.cpp.
References m_cnvServices, m_dataSvc, and StatusCode::SUCCESS.
00172 { 00173 m_dataSvc = pDataSvc; 00174 for ( Services::iterator i = m_cnvServices.begin(); i != m_cnvServices.end(); i++ ) { 00175 (*i).second.conversionSvc()->setDataProvider(m_dataSvc).ignore(); 00176 } 00177 return StatusCode(StatusCode::SUCCESS,true); 00178 }
| IDataProviderSvc * PersistencySvc::dataProvider | ( | ) | const [virtual] |
Access reference to transient datastore.
Implements IConverter.
Definition at line 181 of file PersistencySvc.cpp.
References m_dataSvc.
00181 { 00182 return m_dataSvc; 00183 }
| StatusCode PersistencySvc::setConversionSvc | ( | IConversionSvc * | svc | ) | [virtual] |
Set conversion service the converter is connected to.
Implements IConverter.
Definition at line 186 of file PersistencySvc.cpp.
References m_cnvDefault, and StatusCode::SUCCESS.
Referenced by HistogramPersistencySvc::reinitialize().
00186 { 00187 m_cnvDefault = svc; 00188 return StatusCode(StatusCode::SUCCESS,true); 00189 }
| IConversionSvc * PersistencySvc::conversionSvc | ( | ) | const [virtual] |
Get conversion service the converter is connected to.
Implements IConverter.
Definition at line 192 of file PersistencySvc.cpp.
References m_cnvDefault.
Referenced by HistogramPersistencySvc::reinitialize().
00192 { 00193 return m_cnvDefault; 00194 }
| StatusCode PersistencySvc::setAddressCreator | ( | IAddressCreator * | creator | ) | [virtual] |
Set address creator facility.
Implements IConverter.
Definition at line 491 of file PersistencySvc.cpp.
References StatusCode::FAILURE.
00491 { 00492 // The persistency service is a address creation dispatcher istelf. 00493 // The persistency service can NEVER create addresses itself. 00494 // The entry point must only be provided in order to fulfill the needs of the 00495 // implementing interfaces. 00496 return StatusCode::FAILURE; 00497 }
| IAddressCreator * PersistencySvc::addressCreator | ( | ) | const [virtual] |
Retrieve address creator facility.
Implements IConverter.
Definition at line 500 of file PersistencySvc.cpp.
Referenced by convertAddress(), and createAddress().
00500 { 00501 return (IAddressCreator*)this; 00502 }
| StatusCode PersistencySvc::addConverter | ( | IConverter * | pConverter | ) | [virtual] |
Add converter object to conversion service.
Implements IConversionSvc.
Definition at line 202 of file PersistencySvc.cpp.
References IConversionSvc::addConverter(), IConverter::BAD_STORAGE_TYPE, IConversionSvc::NO_CONVERTER, IConverter::repSvcType(), and service().
00202 { 00203 if ( 0 != pConverter ) { 00204 long typ = pConverter->repSvcType(); 00205 IConversionSvc* svc = service(typ); 00206 if ( 0 != svc ) { 00207 return svc->addConverter(pConverter); 00208 } 00209 return BAD_STORAGE_TYPE; 00210 } 00211 return NO_CONVERTER; 00212 }
| StatusCode PersistencySvc::addConverter | ( | const CLID & | clid | ) | [virtual] |
Add converter object to conversion service.
Implements IConversionSvc.
Definition at line 197 of file PersistencySvc.cpp.
References StatusCode::FAILURE.
00197 { 00198 return StatusCode::FAILURE; 00199 }
| IConverter * PersistencySvc::converter | ( | const CLID & | clid | ) | [virtual] |
Retrieve converter from list.
Implements IConversionSvc.
Definition at line 228 of file PersistencySvc.cpp.
| StatusCode PersistencySvc::removeConverter | ( | const CLID & | clid | ) | [virtual] |
Remove converter object from conversion service (if present).
Implements IConversionSvc.
Definition at line 215 of file PersistencySvc.cpp.
References m_cnvServices, IConversionSvc::NO_CONVERTER, and StatusCode::SUCCESS.
00215 { 00216 // Remove converter type from all services 00217 StatusCode status = NO_CONVERTER, iret = StatusCode::SUCCESS; 00218 for ( Services::iterator i = m_cnvServices.begin(); i != m_cnvServices.end(); i++ ) { 00219 iret = (*i).second.conversionSvc()->removeConverter(clid); 00220 if ( iret.isSuccess() ) { 00221 status = iret; 00222 } 00223 } 00224 return status; 00225 }
| StatusCode PersistencySvc::connectOutput | ( | const std::string & | outputFile, | |
| const std::string & | openMode | |||
| ) | [virtual] |
Connect the output file to the service with open mode.
Implements IConversionSvc.
Definition at line 349 of file PersistencySvc.cpp.
00350 { 00351 return connectOutput(outputFile); 00352 }
| StatusCode PersistencySvc::connectOutput | ( | const std::string & | outputFile | ) | [virtual] |
Connect the output file to the service.
Implements IConversionSvc.
Definition at line 355 of file PersistencySvc.cpp.
References StatusCode::SUCCESS.
00355 { 00356 return StatusCode::SUCCESS; 00357 }
| StatusCode PersistencySvc::commitOutput | ( | const std::string & | output, | |
| bool | do_commit | |||
| ) | [virtual] |
Commit pending output.
Implements IConversionSvc.
Definition at line 360 of file PersistencySvc.cpp.
References StatusCode::SUCCESS.
00360 { 00361 return StatusCode::SUCCESS; 00362 }
| StatusCode PersistencySvc::createAddress | ( | long | svc_type, | |
| const CLID & | clid, | |||
| const std::string * | pars, | |||
| const unsigned long * | ipars, | |||
| IOpaqueAddress *& | refpAddress | |||
| ) | [virtual] |
Create a Generic address using explicit arguments to identify a single object.
Implements IAddressCreator.
Definition at line 365 of file PersistencySvc.cpp.
References addressCreator(), IConverter::BAD_STORAGE_TYPE, and IAddressCreator::createAddress().
00369 { 00370 IAddressCreator* svc = addressCreator(svc_type); 00371 StatusCode status = BAD_STORAGE_TYPE; // Preset error 00372 refpAddress = 0; 00373 if ( 0 != svc ) { 00374 status = svc->createAddress(svc_type, clid, pars, ipars, refpAddress); 00375 } 00376 return status; 00377 }
| StatusCode PersistencySvc::convertAddress | ( | const IOpaqueAddress * | pAddress, | |
| std::string & | refAddress | |||
| ) | [virtual] |
Convert an address to string form.
Implements IAddressCreator.
Definition at line 380 of file PersistencySvc.cpp.
References addressCreator(), IConverter::BAD_STORAGE_TYPE, IOpaqueAddress::clID(), IAddressCreator::convertAddress(), encodeAddrHdr(), and IOpaqueAddress::svcType().
00382 { 00383 // Assumuption is that the Persistency service prepends a header 00384 // and requests the conversion service refered to by the service 00385 // type to encode the rest 00386 long svc_type = 0; 00387 CLID clid = 0; 00388 if ( 0 != pAddress ) { 00389 svc_type = pAddress->svcType(); 00390 clid = pAddress->clID(); 00391 } 00392 IAddressCreator* svc = addressCreator(svc_type); 00393 StatusCode status = BAD_STORAGE_TYPE; // Preset error 00394 refAddress = ""; 00395 00396 if ( 0 != svc ) { 00397 // Found service, set header 00398 encodeAddrHdr(svc_type, clid, refAddress); 00399 std::string address; 00400 // Get rest of address from conversion service 00401 status = svc->convertAddress(pAddress, address); 00402 refAddress += address; 00403 } 00404 return status; 00405 }
| StatusCode PersistencySvc::createAddress | ( | long | svc_type, | |
| const CLID & | clid, | |||
| const std::string & | refAddress, | |||
| IOpaqueAddress *& | refpAddress | |||
| ) | [virtual] |
Convert an address in string form to object form.
Implements IAddressCreator.
Definition at line 408 of file PersistencySvc.cpp.
References addressCreator(), IConverter::BAD_STORAGE_TYPE, IAddressCreator::createAddress(), and decodeAddrHdr().
00412 { 00413 // Assumuption is that the Persistency service decodes that header 00414 // and requests the conversion service refered to by the service 00415 // type to decode the rest 00416 long new_svc_type = 0; 00417 CLID new_clid = 0; 00418 std::string address_trailer; 00419 decodeAddrHdr(refAddress, new_svc_type, new_clid, address_trailer); 00420 IAddressCreator* svc = addressCreator(new_svc_type); 00421 StatusCode status = BAD_STORAGE_TYPE; // Preset error 00422 if ( 0 != svc ) { 00423 status = svc->createAddress( new_svc_type, new_clid, address_trailer, refpAddress); 00424 } 00425 return status; 00426 }
| StatusCode PersistencySvc::addCnvService | ( | IConversionSvc * | service | ) | [virtual] |
Add a new Service.
Implements IPersistencySvc.
Definition at line 275 of file PersistencySvc.cpp.
References IInterface::addRef(), IConverter::BAD_STORAGE_TYPE, IConverter::conversionSvc(), endreq(), StatusCode::FAILURE, StatusCode::ignore(), IID_IAddressCreator, IID_IService, MSG::INFO, StatusCode::isSuccess(), m_cnvDefault, m_cnvServices, m_dataSvc, Service::msgSvc(), Service::name(), IInterface::queryInterface(), removeCnvService(), IConverter::repSvcType(), std::pair< _T1, _T2 >::second, IConverter::setAddressCreator(), IConverter::setDataProvider(), StatusCode::SUCCESS, and Service::type().
Referenced by service().
00275 { 00276 if ( 0 != servc ) { 00277 long type = servc->repSvcType(); 00278 long def_typ = (m_cnvDefault) ? m_cnvDefault->repSvcType() : 0; 00279 Services::iterator it = m_cnvServices.find( type ); 00280 IConversionSvc* cnv_svc = 0; 00281 if ( it != m_cnvServices.end() ) { 00282 cnv_svc = (*it).second.conversionSvc(); 00283 } 00284 if ( type == def_typ ) { 00285 m_cnvDefault = servc; 00286 } 00287 if ( cnv_svc != servc ) { 00288 MsgStream log( msgSvc(), name() ); 00289 IAddressCreator* icr = 0; 00290 StatusCode status = servc->queryInterface(IID_IAddressCreator, pp_cast<void>(&icr)); 00291 if ( status.isSuccess() ) { 00292 IService* isvc = 0; 00293 status = servc->queryInterface(IID_IService, pp_cast<void>(&isvc)); 00294 if ( status.isSuccess() ) { 00295 if ( 0 != cnv_svc ) { 00296 removeCnvService (type).ignore(); 00297 } 00298 std::pair<Services::iterator, bool> p = 00299 m_cnvServices.insert( Services::value_type( type, ServiceEntry(type, isvc, servc, icr))); 00300 if( p.second ) { 00301 log << MSG::INFO << "Added successfully Conversion service:" << isvc->name() << endreq; 00302 servc->addRef(); 00303 servc->setAddressCreator(this).ignore(); 00304 servc->setDataProvider(m_dataSvc).ignore(); 00305 return StatusCode::SUCCESS; 00306 } 00307 log << MSG::INFO << "Cannot add Conversion service of type " << isvc->name() << endreq; 00308 isvc->release(); 00309 icr->release(); 00310 return StatusCode::FAILURE; 00311 } 00312 icr->release(); 00313 } 00314 log << MSG::INFO << "Cannot add Conversion service of type " << type << endreq; 00315 return StatusCode::FAILURE; 00316 } 00317 else { 00318 return StatusCode::SUCCESS; 00319 } 00320 } 00321 return BAD_STORAGE_TYPE; 00322 }
| StatusCode PersistencySvc::removeCnvService | ( | long | type | ) | [virtual] |
Remove a Service.
Implements IPersistencySvc.
Definition at line 325 of file PersistencySvc.cpp.
References IConverter::BAD_STORAGE_TYPE, m_cnvServices, and StatusCode::SUCCESS.
Referenced by addCnvService().
00325 { 00326 Services::iterator it = m_cnvServices.find( svctype ); 00327 if( it != m_cnvServices.end() ) { 00328 (*it).second.service()->release(); 00329 (*it).second.addrCreator()->release(); 00330 m_cnvServices.erase(it); 00331 return StatusCode::SUCCESS; 00332 } 00333 return BAD_STORAGE_TYPE; 00334 }
| StatusCode PersistencySvc::setDefaultCnvService | ( | long | type | ) | [virtual] |
Set default service type.
Implements IPersistencySvc.
Definition at line 343 of file PersistencySvc.cpp.
References m_cnvDefault, service(), and StatusCode::SUCCESS.
00343 { 00344 m_cnvDefault = service(type); 00345 return StatusCode::SUCCESS; 00346 }
| StatusCode PersistencySvc::getService | ( | long | service_type, | |
| IConversionSvc *& | refpSvc | |||
| ) | [virtual] |
Retrieve conversion service identified by technology.
Implements IPersistencySvc.
Definition at line 505 of file PersistencySvc.cpp.
References StatusCode::FAILURE, service(), and StatusCode::SUCCESS.
Referenced by getService().
00505 { 00506 refpSvc = service(service_type); 00507 return (0==refpSvc) ? StatusCode::FAILURE : StatusCode::SUCCESS; 00508 }
| StatusCode PersistencySvc::getService | ( | const std::string & | service_type, | |
| IConversionSvc *& | refpSvc | |||
| ) | [virtual] |
Retrieve conversion service identified by technology.
Implements IPersistencySvc.
Definition at line 511 of file PersistencySvc.cpp.
References ACCESS_StorageType, std::vector< _Tp, _Alloc >::begin(), std::basic_string< _CharT, _Traits, _Alloc >::c_str(), IConverter::conversionSvc(), std::vector< _Tp, _Alloc >::end(), StatusCode::FAILURE, SmartIFBase< TYPE >::get(), getService(), std::basic_string< _CharT, _Traits, _Alloc >::length(), m_cnvServices, m_svcNames, MYSQL_StorageType, OBJY_StorageType, ORACLE_StorageType, POOL_ACCESS_StorageType, POOL_MYSQL_StorageType, POOL_ORACLE_StorageType, POOL_ROOT_StorageType, POOL_ROOTKEY_StorageType, POOL_ROOTTREE_StorageType, POOL_StorageType, ROOT_StorageType, service(), SICB_StorageType, SQLSERVER_StorageType, StatusCode::SUCCESS, and System::typeinfoName().
00511 { 00512 const char* imp = service_type.c_str(); 00513 long len = service_type.length(); 00514 if ( ::strncasecmp(imp,"SICB", len) == 0 ) 00515 return getService(SICB_StorageType, refpSvc); 00516 else if ( ::strncasecmp(imp,"ZEBRA", len) == 0 ) 00517 return getService(SICB_StorageType, refpSvc); 00518 else if ( ::strncasecmp(imp,"MS Access", len) == 0 ) 00519 return getService(ACCESS_StorageType, refpSvc); 00520 else if ( ::strncasecmp(imp,"Microsoft Access", strlen("Microsoft Access")) == 0 ) 00521 return getService(ACCESS_StorageType, refpSvc); 00522 else if ( ::strncasecmp(imp,"SQL Server", len) == 0 ) 00523 return getService(SQLSERVER_StorageType, refpSvc); 00524 else if ( ::strncasecmp(imp,"Microsoft ODBC for Oracle", len) == 0 ) 00525 return getService(ORACLE_StorageType, refpSvc); 00526 else if ( ::strncasecmp(imp,"Oracle ODBC", strlen("Oracle ODBC")) == 0 ) 00527 return getService(ORACLE_StorageType, refpSvc); 00528 else if ( ::strncasecmp(imp,"Oracle OCI", strlen("Oracle OCI")) == 0 ) 00529 return getService(ORACLE_StorageType, refpSvc); 00530 else if ( ::strncasecmp(imp,"MySQL", len) == 0 ) 00531 return getService(MYSQL_StorageType, refpSvc); 00532 else if ( ::strncasecmp(imp,"ROOT", len) == 0 ) 00533 return getService(ROOT_StorageType, refpSvc); 00534 else if ( ::strncasecmp(imp,"OBJY", len) == 0 ) 00535 return getService(OBJY_StorageType, refpSvc); 00536 else if ( ::strncasecmp(imp,"OBJYECTI", 7) == 0 ) 00537 return getService(OBJY_StorageType, refpSvc); 00538 else if ( ::strncasecmp(imp,"POOL_ROOTKEY", 12) == 0 ) 00539 return getService(POOL_ROOTKEY_StorageType, refpSvc); 00540 else if ( ::strncasecmp(imp,"POOL_ROOTTREE", 12) == 0 ) 00541 return getService(POOL_ROOTTREE_StorageType, refpSvc); 00542 else if ( ::strncasecmp(imp,"POOL_ROOT", 9) == 0 ) 00543 return getService(POOL_ROOT_StorageType, refpSvc); 00544 else if ( ::strncasecmp(imp,"POOL_MySQL", 8) == 0 ) 00545 return getService(POOL_MYSQL_StorageType, refpSvc); 00546 else if ( ::strncasecmp(imp,"POOL_ORACLE", 8) == 0 ) 00547 return getService(POOL_ORACLE_StorageType, refpSvc); 00548 else if ( ::strncasecmp(imp,"POOL_ACCESS", 8) == 0 ) 00549 return getService(POOL_ACCESS_StorageType, refpSvc); 00550 else if ( ::strncasecmp(imp,"POOL", 4) == 0 ) 00551 return getService(POOL_StorageType, refpSvc); 00552 00553 for(Services::const_iterator i=m_cnvServices.begin(); i != m_cnvServices.end();++i) { 00554 SmartIF<IService> svc((*i).second.conversionSvc()); 00555 if ( svc ) { 00556 // Check wether this is already an active service: first check by service name 00557 if ( svc->name() == service_type ) { 00558 refpSvc = (*i).second.conversionSvc(); 00559 return StatusCode::SUCCESS; 00560 } 00561 // Check wether this is already an active service: now check by service type 00562 if ( System::typeinfoName(typeid(*(svc.get()))) == service_type ) { 00563 refpSvc = (*i).second.conversionSvc(); 00564 return StatusCode::SUCCESS; 00565 } 00566 } 00567 } 00568 const std::vector<std::string>& names = m_svcNames; 00569 // if not, check if the service is in the list and may be requested 00570 for(std::vector<std::string>::const_iterator i=names.begin(); i != names.end(); i++) { 00571 ListItem itm(*i); 00572 if ( itm.name() == service_type || itm.type() == service_type ) { 00573 IConversionSvc* svc = service(*i); 00574 if ( svc ) { 00575 refpSvc = svc; 00576 return StatusCode::SUCCESS; 00577 } 00578 } 00579 } 00580 return StatusCode::FAILURE; 00581 }
| StatusCode PersistencySvc::initialize | ( | ) | [virtual] |
Initialize the service.
Reimplemented from Service.
Reimplemented in DetPersistencySvc, EvtPersistencySvc, and HistogramPersistencySvc.
Definition at line 589 of file PersistencySvc.cpp.
References endreq(), MSG::ERROR, Service::initialize(), StatusCode::isSuccess(), Service::msgSvc(), and Service::name().
Referenced by HistogramPersistencySvc::initialize(), EvtPersistencySvc::initialize(), and DetPersistencySvc::initialize().
00589 { 00590 // Initialize basic service 00591 StatusCode status = Service::initialize(); 00592 if ( !status.isSuccess() ) { 00593 MsgStream log( msgSvc(), name() ); // Service MUST be initialized BEFORE! 00594 log << MSG::ERROR << "Error initializing Service base class." << endreq; 00595 } 00596 return status; 00597 }
| StatusCode PersistencySvc::finalize | ( | ) | [virtual] |
stop the service.
Reimplemented from Service.
Reimplemented in DetPersistencySvc, EvtPersistencySvc, and HistogramPersistencySvc.
Definition at line 600 of file PersistencySvc.cpp.
References m_cnvServices, and StatusCode::SUCCESS.
Referenced by HistogramPersistencySvc::finalize(), EvtPersistencySvc::finalize(), and DetPersistencySvc::finalize().
00600 { 00601 // Release all workers 00602 for ( Services::iterator i = m_cnvServices.begin(); i != m_cnvServices.end(); i++ ) { 00603 (*i).second.service()->release(); 00604 (*i).second.conversionSvc()->release(); 00605 (*i).second.addrCreator()->release(); 00606 } 00607 m_cnvServices.erase(m_cnvServices.begin(), m_cnvServices.end()); 00608 return StatusCode::SUCCESS; 00609 }
| StatusCode PersistencySvc::queryInterface | ( | const InterfaceID & | riid, | |
| void ** | ppvUnknown | |||
| ) | [virtual] |
Query interface.
Reimplemented from Service.
Definition at line 612 of file PersistencySvc.cpp.
References Service::addRef(), IID_IAddressCreator, IID_IConversionSvc, IID_IConverter, IID_IPersistencySvc, Service::queryInterface(), and StatusCode::SUCCESS.
00612 { 00613 if ( IID_IConverter == riid ) { 00614 *ppvInterface = (IConverter*)this; 00615 } 00616 else if ( IID_IConversionSvc == riid ) { 00617 *ppvInterface = (IConversionSvc*)this; 00618 } 00619 else if ( IID_IPersistencySvc == riid ) { 00620 *ppvInterface = (IPersistencySvc*)this; 00621 } 00622 else if ( IID_IAddressCreator == riid ) { 00623 *ppvInterface = (IAddressCreator*)this; 00624 } 00625 else { 00626 // Interface is not directly availible: try out a base class 00627 return Service::queryInterface(riid, ppvInterface); 00628 } 00629 addRef(); 00630 return StatusCode::SUCCESS; 00631 }
| IConversionSvc * PersistencySvc::service | ( | const std::string & | nam | ) | [protected] |
Retrieve conversion service by name.
Definition at line 233 of file PersistencySvc.cpp.
References addCnvService(), IConverter::conversionSvc(), endreq(), MSG::INFO, StatusCode::isSuccess(), m_cnvServices, Service::msgSvc(), Service::name(), and Service::service().
Referenced by addConverter(), addressCreator(), getService(), makeCall(), HistogramPersistencySvc::reinitialize(), service(), and setDefaultCnvService().
00233 { 00234 IConversionSvc* svc = 0; 00235 for ( Services::iterator it = m_cnvServices.begin(); it != m_cnvServices.end(); it++ ) { 00236 if ( (*it).second.service()->name() == nam ) { 00237 return (*it).second.conversionSvc(); 00238 } 00239 } 00240 StatusCode status = Service::service(nam, svc, true); 00241 if ( status.isSuccess() ) { 00242 if ( addCnvService(svc).isSuccess() ) { 00243 svc->release(); // Do not double-reference count 00244 return svc; 00245 } 00246 } 00247 MsgStream log( msgSvc(), name() ); 00248 log << MSG::INFO << "Cannot access Conversion service:" << nam << endreq; 00249 return 0; 00250 }
| IConversionSvc * PersistencySvc::service | ( | long | service_type | ) | [protected] |
Retrieve conversion service from list.
Definition at line 253 of file PersistencySvc.cpp.
References m_cnvServices, m_svcNames, IConverter::repSvcType(), service(), and PropertyWithValue< TYPE >::value().
00253 { 00254 typedef std::vector<std::string> SvcNames; 00255 // Check wether this is already an active service 00256 Services::iterator it = m_cnvServices.find( type ); 00257 if( it != m_cnvServices.end() ) { 00258 return (*it).second.conversionSvc(); 00259 } 00260 // if not, check if the service is in the list and may be requested 00261 const SvcNames& theNames = m_svcNames.value(); 00262 for ( SvcNames::const_iterator i = theNames.begin(); i != theNames.end(); i++ ) { 00263 IConversionSvc* svc = service(*i); 00264 if ( svc != 0 ) { 00265 long typ = svc->repSvcType(); 00266 if ( typ == type ) { 00267 return svc; 00268 } 00269 } 00270 } 00271 return 0; 00272 }
| IAddressCreator * PersistencySvc::addressCreator | ( | long | service_type | ) | [protected] |
Retrieve address creator from list.
Definition at line 155 of file PersistencySvc.cpp.
References m_cnvServices, Gaudi::Units::s, and service().
00155 { 00156 long typ = type; 00157 Services::iterator it = m_cnvServices.find( typ ); 00158 if( it == m_cnvServices.end() ) { 00159 IConversionSvc* s = service(type); 00160 if ( s ) { 00161 it = m_cnvServices.find( typ ); 00162 if ( it != m_cnvServices.end() ) { 00163 return (*it).second.addrCreator(); 00164 } 00165 } 00166 return 0; 00167 } 00168 return (*it).second.addrCreator(); 00169 }
| void PersistencySvc::encodeAddrHdr | ( | long | service_type, | |
| const CLID & | clid, | |||
| std::string & | address | |||
| ) | const [protected] |
Retrieve string from storage type and clid.
Definition at line 429 of file PersistencySvc.cpp.
References std::basic_stringstream< _CharT, _Traits, _Alloc >::str().
Referenced by convertAddress().
00432 { 00433 // For address header, use xml-style format of 00434 // <addrhdr service_type="xxx" clid="yyy" /> 00435 std::stringstream stream; 00436 int svctyp = service_type; // must put int into stream, not char 00437 stream << "<address_header service_type=\"" << svctyp << "\" clid=\"" << clid << "\" /> "; 00438 address = stream.str(); 00439 }
| void PersistencySvc::decodeAddrHdr | ( | const std::string & | address, | |
| long & | service_type, | |||
| CLID & | clid, | |||
| std::string & | address_trailer | |||
| ) | const [protected] |
Retrieve storage type and clid from address header of string.
Definition at line 442 of file PersistencySvc.cpp.
References std::basic_string< _CharT, _Traits, _Alloc >::c_str(), std::basic_string< _CharT, _Traits, _Alloc >::find(), std::basic_string< _CharT, _Traits, _Alloc >::insert(), std::basic_string< _CharT, _Traits, _Alloc >::npos, and std::basic_string< _CharT, _Traits, _Alloc >::size().
Referenced by createAddress().
00446 { 00447 // For address header, use xml-style format of 00448 // <addrhdr service_type="xxx" clid="yyy" /> 00449 service_type = 0; 00450 clid = 0; 00451 address_trailer = ""; 00452 00453 // Check for addrhdr tag 00454 size_t pos = address.find("<address_header"); 00455 if (std::string::npos != pos) { 00456 // Get service_type 00457 pos = address.find("service_type=\""); 00458 if (std::string::npos != pos) { 00459 pos += 14; 00460 size_t end = address.find('\"', pos); 00461 if (std::string::npos != end) { 00462 std::string str; 00463 str.insert(0, address, pos, end-pos); 00464 int temp; 00465 sscanf(str.c_str(),"%d",&temp); 00466 service_type = temp; 00467 // Get clid 00468 pos = address.find("clid=\""); 00469 if (std::string::npos != pos) { 00470 pos += 6; 00471 size_t end = address.find('\"', pos); 00472 if (std::string::npos != end) { 00473 std::string str1; 00474 str1.insert(0, address, pos, end-pos); 00475 sscanf(str1.c_str(),"%d",&temp); 00476 clid = temp; 00477 // Get trailer_address 00478 pos = address.find(">"); 00479 if (std::string::npos != pos) { 00480 pos += 1; 00481 address_trailer.insert(0, address, pos, address.size() - pos); 00482 } 00483 } 00484 } 00485 } 00486 } 00487 } 00488 }
| StatusCode PersistencySvc::makeCall | ( | int | typ, | |
| IOpaqueAddress *& | pAddress, | |||
| DataObject *& | pObject | |||
| ) | [protected] |
Implementation helper.
Definition at line 51 of file PersistencySvc.cpp.
References IConverter::BAD_STORAGE_TYPE, CREATE_OBJ, CREATE_REP, IConverter::createObj(), IConverter::createRep(), StatusCode::FAILURE, FILL_OBJ_REFS, FILL_REP_REFS, IConverter::fillObjRefs(), IConverter::fillRepRefs(), StatusCode::ignore(), IConverter::INVALID_ADDRESS, m_cnvDefault, m_enable, service(), StatusCode::SUCCESS, IOpaqueAddress::svcType(), UPDATE_OBJ, UPDATE_OBJ_REFS, UPDATE_REP, UPDATE_REP_REFS, IConverter::updateObj(), IConverter::updateObjRefs(), IConverter::updateRep(), and IConverter::updateRepRefs().
Referenced by createObj(), createRep(), fillObjRefs(), fillRepRefs(), updateObj(), updateObjRefs(), updateRep(), and updateRepRefs().
00053 { 00054 if ( m_enable ) { 00055 IConversionSvc* svc = 0; 00056 switch(typ) { 00057 case CREATE_REP: 00058 case FILL_REP_REFS: 00059 case UPDATE_REP: 00060 case UPDATE_REP_REFS: 00061 svc = m_cnvDefault; 00062 break; 00063 default: 00064 if ( 0 != pAddress ) { 00065 long svc_type = pAddress->svcType(); 00066 svc = service(svc_type); 00067 if ( 0 == svc ) { 00068 return BAD_STORAGE_TYPE; 00069 } 00070 } 00071 else { 00072 return INVALID_ADDRESS; 00073 } 00074 break; 00075 } 00076 00077 StatusCode status(StatusCode::FAILURE,true); 00078 switch( typ ) { 00079 case CREATE_OBJ: 00080 pObject = 0; 00081 status = svc->createObj(pAddress, pObject); 00082 break; 00083 case FILL_OBJ_REFS: 00084 status = svc->fillObjRefs(pAddress, pObject); 00085 break; 00086 case UPDATE_OBJ: 00087 status = svc->updateObj(pAddress, pObject); 00088 break; 00089 case UPDATE_OBJ_REFS: 00090 status = svc->updateObjRefs(pAddress, pObject); 00091 break; 00092 case CREATE_REP: 00093 status = svc->createRep(pObject, pAddress); 00094 break; 00095 case FILL_REP_REFS: 00096 status = svc->fillRepRefs(pAddress, pObject); 00097 break; 00098 case UPDATE_REP: 00099 status = svc->updateRep(pAddress, pObject); 00100 break; 00101 case UPDATE_REP_REFS: 00102 status = svc->updateRepRefs(pAddress, pObject); 00103 break; 00104 default: 00105 status = StatusCode::FAILURE; 00106 break; 00107 } 00108 status.ignore(); 00109 return status; 00110 } 00111 return StatusCode::SUCCESS; 00112 }
| bool PersistencySvc::enable | ( | bool | value | ) | [protected] |
Set enabled flag.
Definition at line 639 of file PersistencySvc.cpp.
References m_enable.
Referenced by HistogramPersistencySvc::reinitialize().
| void PersistencySvc::svcNamesHandler | ( | Property & | theProp | ) | [protected] |
Handlers for Service Names Property.
Definition at line 633 of file PersistencySvc.cpp.
References endreq(), MSG::INFO, Service::msgSvc(), and Service::name().
Referenced by PersistencySvc().
friend class SvcFactory< PersistencySvc > [friend] |
Definition at line 58 of file PersistencySvc.h.
friend class Factory< PersistencySvc, IService *(std::string, ISvcLocator *)> [friend] |
Definition at line 59 of file PersistencySvc.h.
long PersistencySvc::m_cnvDefType [protected] |
IDataProviderSvc* PersistencySvc::m_dataSvc [protected] |
Pointer to datma provider service.
Definition at line 278 of file PersistencySvc.h.
Referenced by addCnvService(), dataProvider(), and setDataProvider().
Services PersistencySvc::m_cnvServices [protected] |
List of convermsion workers.
Definition at line 280 of file PersistencySvc.h.
Referenced by addCnvService(), addressCreator(), finalize(), getService(), removeCnvService(), removeConverter(), service(), and setDataProvider().
IConversionSvc* PersistencySvc::m_cnvDefault [protected] |
Default output service.
Definition at line 282 of file PersistencySvc.h.
Referenced by addCnvService(), conversionSvc(), makeCall(), repSvcType(), setConversionSvc(), and setDefaultCnvService().
StringArrayProperty PersistencySvc::m_svcNames [protected] |
Names of services to be requested from the service locator and added by default.
Definition at line 286 of file PersistencySvc.h.
Referenced by getService(), PersistencySvc(), and service().
bool PersistencySvc::m_enable [protected] |
Flag to indicate that the service is enabled.
Definition at line 288 of file PersistencySvc.h.
Referenced by enable(), and makeCall().