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

In This Package:

A full ef classlist @htmlinclude used_packages.html @verbinclude requirements XmlBaseConditionCnv.h

Go to the documentation of this file.
00001 
00002 
00003 #ifndef DETDESCCNV_XMLCONDITIONCNV_H
00004 #define DETDESCCNV_XMLCONDITIONCNV_H
00005 
00007 #include "DetDescCnv/XmlGenericCnv.h"
00008 #include "DetDesc/Condition.h"
00009 
00010 #include "GaudiKernel/Converter.h"
00011 
00012 #include <xercesc/dom/DOMNodeList.hpp>
00013 
00015 class     ISvcLocator;
00016 template <class TYPE> class CnvFactory;
00017 
00018 
00025 class XmlBaseConditionCnv : public XmlGenericCnv {
00026 
00027 public:
00028   
00033   virtual StatusCode initialize();
00034   
00039   static const CLID& classID();
00040   
00041 protected:
00042   
00047   XmlBaseConditionCnv(ISvcLocator* svcs);
00048 
00054   XmlBaseConditionCnv(ISvcLocator* svc, const CLID& clsID );
00055 
00059   virtual ~XmlBaseConditionCnv();
00060 
00064   virtual StatusCode fillObjRefs(IOpaqueAddress* pAddress, 
00065                                  DataObject* pObject);
00066 
00070   virtual StatusCode updateObjRefs(IOpaqueAddress* pAddress,
00071                                    DataObject* pObject);
00072 
00079   virtual StatusCode i_createObj (xercesc::DOMElement* element,
00080                                   DataObject*& refpObject);
00081 
00089   virtual StatusCode i_fillObj (xercesc::DOMElement* childElement,
00090                                 DataObject* refpObject,
00091                                 IOpaqueAddress* address);
00092 
00103   virtual StatusCode i_fillSpecificObj (xercesc::DOMElement* childElement,
00104                                         Condition* refpObject,
00105                                         IOpaqueAddress* address) = 0;
00106 
00107 private:
00108   
00110   bool m_doGenericCnv;
00111   
00112   // Constant strings for element names
00113   const XMLCh* specificString;
00114   const XMLCh* paramString;
00115   const XMLCh* paramVectorString;
00116   const XMLCh* mapString;
00117   const XMLCh* itemString;
00118 
00119   // Constant Strings for parameter names
00120   const XMLCh* typeString;
00121   const XMLCh* nameString;
00122   const XMLCh* commentString;
00123   const XMLCh* keytypeString;
00124   const XMLCh* valuetypeString;
00125   const XMLCh* keyString;
00126   const XMLCh* valueString;
00127 
00128   // Functions used for the map parameter
00129   template <class T>
00130   inline T i_convert(const XMLCh *value){
00131     return (T)xmlSvc()->eval(i_convert<std::string>(value), false);
00132   }
00133   
00134   template <class T>
00135   inline T i_convert(const std::string &value){
00136     return (T)xmlSvc()->eval(value, false);
00137   }
00138 
00139   template <class T>
00140   inline T i_convertVect(XMLCh *value){
00141     std::vector<T> v;
00142     std::istringstream cstr(i_convert<std::string>(value));
00143     std::string itemval;
00144     while (cstr >> itemval) {
00145       v.push_back(i_convert<T>(itemval));
00146     }
00147     return v;
00148   }
00149     
00150   template <class K, class V>
00151   std::map<K,V> i_makeMap(xercesc::DOMNodeList* entries){
00152     std::map<K,V> map;
00153     XMLSize_t i;
00154     for (i = 0; i < entries->getLength(); i++) {
00155       xercesc::DOMNode* entryNode = entries->item(i);
00156       if (entryNode->getNodeType() == xercesc::DOMNode::ELEMENT_NODE) {
00157         xercesc::DOMElement* entry = static_cast<xercesc::DOMElement*>(entryNode);
00158         map[i_convert<K>(entry->getAttribute(keyString))] =
00159           i_convert<V>(entry->getAttribute(valueString));
00160       }
00161     }
00162     return map;
00163   }
00164 };
00165 
00166 template <> inline std::string XmlBaseConditionCnv::i_convert<std::string>(const XMLCh *value){
00167   return dom2Std(value);
00168 }
00169 
00170 template <> inline std::string XmlBaseConditionCnv::i_convert<std::string>(const std::string &value){
00171   return value;
00172 }
00173 
00174 #endif // DETDESCCNV_XMLCONDITIONCNV_H
00175 
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:00:54 2011 for DetDescCnv by doxygen 1.4.7