00001
00002
00003 #ifndef DETDESCCNV_XMLGENERICCNV_H
00004 #define DETDESCCNV_XMLGENERICCNV_H
00005
00006
00007 #include "GaudiKernel/Converter.h"
00008 #include "GaudiKernel/IConversionSvc.h"
00009
00010 #include "XmlTools/IXmlSvc.h"
00011
00012 #include <string>
00013
00014 #include <xercesc/dom/DOMElement.hpp>
00015 #include <xercesc/dom/DOMText.hpp>
00016
00017
00018
00019 class ISvcLocator;
00020 class IXmlSvc;
00021 class GenericAddress;
00022 template <class TYPE> class CnvFactory;
00023
00024
00035 class XmlGenericCnv : public Converter {
00036
00037 public:
00038
00043 virtual StatusCode initialize();
00044
00049 virtual StatusCode finalize();
00050
00057 virtual StatusCode createObj (IOpaqueAddress* addr,
00058 DataObject*& refpObject);
00065 virtual StatusCode updateObj (IOpaqueAddress* pAddress,
00066 DataObject* pObject);
00067
00074 virtual StatusCode createRep (DataObject* pObject,
00075 IOpaqueAddress*& refpAddress);
00076
00083 virtual StatusCode updateRep (IOpaqueAddress* pAddress,
00084 DataObject* pObject);
00085
00091 IXmlSvc* xmlSvc() {
00092 if (!m_xmlSvc) m_xmlSvc = dynamic_cast<IXmlSvc*>(conversionSvc());
00093 return m_xmlSvc;
00094 }
00095
00100 static long storageType() {
00101 return XML_StorageType;
00102 }
00103
00108 virtual long repSvcType() const {
00109 return XML_StorageType;
00110 }
00111
00112
00113 protected:
00114
00120 XmlGenericCnv (ISvcLocator* svc,const CLID& clid);
00121
00125 ~XmlGenericCnv();
00126
00137 virtual StatusCode internalCreateObj (xercesc::DOMElement* element,
00138 DataObject*& refpObject,
00139 IOpaqueAddress* address);
00140
00149 virtual StatusCode i_createObj (xercesc::DOMElement* element,
00150 DataObject*& refpObject);
00151
00159 virtual StatusCode i_fillObj (xercesc::DOMElement* childElement,
00160 DataObject* pObject,
00161 IOpaqueAddress* address);
00162
00170 virtual StatusCode i_fillObj (xercesc::DOMText* childText,
00171 DataObject* pObject,
00172 IOpaqueAddress* address);
00173
00180 virtual StatusCode i_processObj (DataObject* pObject,
00181 IOpaqueAddress* address);
00182
00195 IOpaqueAddress* createAddressForHref (std::string href,
00196 CLID clid,
00197 IOpaqueAddress* parent) const;
00198
00206 IOpaqueAddress* createXmlAddress (std::string location,
00207 std::string entryName,
00208 CLID clid) const;
00209
00218 IOpaqueAddress* createCondDBAddress (std::string path,
00219 std::string entryName,
00220 unsigned long channelId,
00221 CLID clid) const;
00222
00228 static const std::string dom2Std (const XMLCh* domString);
00229
00231 IXmlSvc* m_xmlSvc;
00232
00233 private:
00234
00235
00236 const XMLCh* DDDBString;
00237 const XMLCh* materialsString;
00238 const XMLCh* versionString;
00239 const XMLCh* DTD_VersionString;
00240 const XMLCh* macroString;
00241 const XMLCh* nameString;
00242 const XMLCh* valueString;
00243 const XMLCh* parameterString;
00244 const XMLCh* detelemString;
00245 const XMLCh* conditionString;
00246 const XMLCh* classIDString;
00247
00249 bool m_have_CONDDB_StorageType;
00250
00251 };
00252
00253 #endif // DETDESCCNV_XMLGENERICCNV_H