00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #define DBCNV_DBSVC_DBUSERCONVERTER_CPP
00017
00018
00019 #include "GaudiKernel/ICnvManager.h"
00020 #include "GaudiKernel/ISvcLocator.h"
00021 #include "GaudiKernel/IMessageSvc.h"
00022 #include "GaudiKernel/MsgStream.h"
00023 #include "GaudiDb/DbUserConverter.h"
00024
00025
00026 unsigned long DbUserConverter::addRef() {
00027 return m_implementation->addRef();
00028 }
00029
00030
00031 unsigned long DbUserConverter::release() {
00032 unsigned long count = m_implementation->release();
00033 if( count <= 0 ) {
00034 delete this;
00035 }
00036 return count;
00037 }
00038
00039
00040 StatusCode DbUserConverter::queryInterface(const IID& riid, void** ppvInterface) {
00041 return m_implementation->queryInterface(riid, ppvInterface);
00042 }
00043
00045 const CLID& DbUserConverter::objType() const {
00046 return m_implementation->objType();
00047 }
00048
00050 unsigned char DbUserConverter::repSvcType() const {
00051 return m_implementation->repSvcType();
00052 }
00053
00055 StatusCode DbUserConverter::createObj(IOpaqueAddress* pAddress,DataObject*& refpObject) {
00056 return m_implementation->createObj(pAddress, refpObject);
00057 }
00058
00059
00061 StatusCode DbUserConverter::fillObjRefs(IOpaqueAddress* pAddress, DataObject* pObject) {
00062 return m_implementation->fillObjRefs(pAddress, pObject);
00063 }
00064
00066 StatusCode DbUserConverter::updateObj(IOpaqueAddress* pAddress, DataObject* pObject) {
00067 return m_implementation->updateObj(pAddress, pObject);
00068 }
00069
00071 StatusCode DbUserConverter::updateObjRefs(IOpaqueAddress* pAddress, DataObject* pObject) {
00072 return m_implementation->updateObjRefs(pAddress, pObject);
00073 }
00074
00076 StatusCode DbUserConverter::createRep(DataObject* pObject, IOpaqueAddress*& refpAddress) {
00077 return m_implementation->createRep(pObject, refpAddress);
00078 }
00079
00081 StatusCode DbUserConverter::fillRepRefs(IOpaqueAddress* pAddress, DataObject* pObject) {
00082 return m_implementation->fillRepRefs(pAddress, pObject);
00083 }
00084
00086 StatusCode DbUserConverter::updateRep(IOpaqueAddress* pAddress, DataObject* pObject) {
00087 return m_implementation->updateRep(pAddress, pObject);
00088 }
00089
00091 StatusCode DbUserConverter::updateRepRefs(IOpaqueAddress* pAddress, DataObject* pObject) {
00092 return m_implementation->updateRepRefs(pAddress, pObject);
00093 }
00094
00096 StatusCode DbUserConverter::initialize() {
00097 if ( 0 == m_implementation ) {
00098 IMessageSvc* messageSvc = 0;
00099
00100 m_svcLocator->getService("MessageSvc",
00101 IID_IMessageSvc,
00102 (IInterface*&)messageSvc);
00103 MsgStream err(messageSvc, "DbUserConverter");
00104 err << MSG::ERROR << "Error initializing DbUserConverter: Cannot get implementation." << endreq;
00105 return StatusCode::FAILURE;
00106 }
00107 return m_implementation->initialize();
00108 }
00109
00111 StatusCode DbUserConverter::finalize() {
00112 return m_implementation->finalize();
00113 }
00114
00116 StatusCode DbUserConverter::setDataProvider(IDataProviderSvc* svc) {
00117 return m_implementation->setDataProvider( svc );
00118 }
00119
00121 IDataProviderSvc* DbUserConverter::dataProvider() {
00122 return m_implementation->dataProvider();
00123 }
00124
00126 DbUserConverter::DbUserConverter(DbUserConverter::Creator creator, const CLID& clid, IOODataBase* db, ISvcLocator* svc)
00127 : m_implementation(0), m_svcLocator(svc)
00128 {
00129 ICnvManager* manager = 0;
00130 StatusCode status = svc->queryInterface(IID_ICnvManager, (void**)&manager);
00131 if ( status.isSuccess() ) {
00132 const ICnvFactory* fac = 0;
00133 if ( clid & CLID_ObjectVector ) {
00134 fac = manager->factory(DBOOMS_StorageType, CLID_Any|CLID_ObjectVector);
00135 }
00136 else if ( clid & CLID_ObjectList ) {
00137 fac = manager->factory(DBOOMS_StorageType, CLID_Any|CLID_ObjectList);
00138 }
00139 else {
00140 fac = manager->factory(DBOOMS_StorageType, CLID_Any);
00141 }
00142 if ( 0 != fac ) {
00143 IDbUserCnvFactory* pFac = 0;
00144 ICnvFactory* p = const_cast<ICnvFactory*>(fac);
00145 StatusCode status = p->queryInterface(IID_IDbUserCnvFactory, (void**)&pFac);
00146 if ( status.isSuccess() ) {
00147 m_implementation = pFac->instantiate(creator, clid, db, svc);
00148 pFac->release();
00149 return;
00150 }
00151 }
00152 }
00153 }
00154
00156 DbUserConverter::~DbUserConverter() {
00157
00158 }
00159