00001
00002
00003
00004
00005
00006
00007
00008 #include "otsdaq-core/ConfigurationDataFormats/RegisterConfigurationInfoReader.h"
00009 #include "otsdaq-core/ConfigurationDataFormats/RegisterBase.h"
00010 #include "otsdaq-core/XmlUtilities/ConvertFromXML.h"
00011 #include "otsdaq-core/XmlUtilities/DOMTreeErrorReporter.h"
00012
00013 #include <xercesc/util/XMLString.hpp>
00014 #include <xercesc/dom/DOMNode.hpp>
00015 #include <xercesc/dom/DOMElement.hpp>
00016 #include <xercesc/dom/DOMNodeList.hpp>
00017 #include <xercesc/parsers/XercesDOMParser.hpp>
00018 #include <iostream>
00019 #include <sys/stat.h>
00020
00021 using namespace ots;
00022
00023 RegisterConfigurationInfoReader::RegisterConfigurationInfoReader() {
00024
00025 initPlatform();
00026 rootTag_ = xercesc::XMLString::transcode("ROOT") ;
00027 headerTag_ = xercesc::XMLString::transcode("HEADER") ;
00028 typeTag_ = xercesc::XMLString::transcode("TYPE") ;
00029 extensionTableNameTag_ = xercesc::XMLString::transcode("EXTENSION_TABLE_NAME") ;
00030 nameTag_ = xercesc::XMLString::transcode("NAME") ;
00031 dataSetTag_ = xercesc::XMLString::transcode("DATA_SET") ;
00032 versionTag_ = xercesc::XMLString::transcode("VERSION") ;
00033 commentDescriptionTag_ = xercesc::XMLString::transcode("COMMENT_DESCRIPTION") ;
00034 createdByUserTag_ = xercesc::XMLString::transcode("CREATED_BY_USER") ;
00035 dataTag_ = xercesc::XMLString::transcode("DATA") ;
00036 typeNameTag_ = xercesc::XMLString::transcode("TYPE_NAME") ;
00037 registerNameTag_ = xercesc::XMLString::transcode("REGISTER_NAME") ;
00038 baseAddressTag_ = xercesc::XMLString::transcode("BASE_ADDRESS") ;
00039 sizeTag_ = xercesc::XMLString::transcode("REGISTER_SIZE") ;
00040 accessTag_ = xercesc::XMLString::transcode("ACCESS") ;
00041 }
00042
00043 RegisterConfigurationInfoReader::~RegisterConfigurationInfoReader() {
00044 try
00045 {
00046 xercesc::XMLString::release( &rootTag_ );
00047 xercesc::XMLString::release( &headerTag_ );
00048 xercesc::XMLString::release( &typeTag_ );
00049 xercesc::XMLString::release( &extensionTableNameTag_ );
00050 xercesc::XMLString::release( &nameTag_ );
00051 xercesc::XMLString::release( &dataSetTag_ );
00052 xercesc::XMLString::release( &versionTag_ );
00053 xercesc::XMLString::release( &commentDescriptionTag_ );
00054 xercesc::XMLString::release( &createdByUserTag_ );
00055 xercesc::XMLString::release( &typeNameTag_ );
00056 xercesc::XMLString::release( ®isterNameTag_ );
00057 xercesc::XMLString::release( &baseAddressTag_ );
00058 xercesc::XMLString::release( &sizeTag_ );
00059 xercesc::XMLString::release( &accessTag_ );
00060 }
00061 catch( ... )
00062 {
00063 mf::LogError(__FILE__) << "Unknown exception encountered in TagNames destructor" << " ";
00064 }
00065 terminatePlatform();
00066 }
00067
00068
00069 void RegisterConfigurationInfoReader::initPlatform(void)
00070 {
00071 try
00072 {
00073 xercesc::XMLPlatformUtils::Initialize();
00074 }
00075 catch( xercesc::XMLException& e )
00076 {
00077 mf::LogError(__FILE__) << "XML toolkit initialization error: " << XML_TO_CHAR(e.getMessage()) << " ";
00078
00079 }
00080 }
00081
00082
00083 void RegisterConfigurationInfoReader::terminatePlatform(void)
00084 {
00085 try
00086 {
00087 xercesc::XMLPlatformUtils::Terminate();
00088 }
00089 catch( xercesc::XMLException& e )
00090 {
00091 mf::LogError(__FILE__) << "XML toolkit teardown error: " << XML_TO_CHAR(e.getMessage()) << " ";
00092 }
00093 }
00094
00095
00096 xercesc::DOMNode* RegisterConfigurationInfoReader::getNode(XMLCh* tagName, xercesc::DOMNode* parent, unsigned int itemNumber)
00097 {
00098 return getNode(tagName, dynamic_cast< xercesc::DOMElement* >(parent), itemNumber);
00099 }
00100
00101
00102 xercesc::DOMNode* RegisterConfigurationInfoReader::getNode(XMLCh* tagName, xercesc::DOMElement* parent, unsigned int itemNumber)
00103 {
00104 xercesc::DOMNodeList* nodeList = parent->getElementsByTagName(tagName);
00105 if( !nodeList )
00106 {
00107 throw(std::runtime_error( std::string("Can't find ") + XML_TO_CHAR(tagName) + " tag!"));
00108 std::cout << __COUT_HDR_FL__ << (std::string("Can't find ") + XML_TO_CHAR(tagName) + " tag!") << std::endl;
00109 }
00110
00111
00112
00113 return nodeList->item(itemNumber);
00114 }
00115
00116
00117 xercesc::DOMElement* RegisterConfigurationInfoReader::getElement(XMLCh* tagName, xercesc::DOMNode* parent, unsigned int itemNumber)
00118 {
00119 return dynamic_cast< xercesc::DOMElement* >(getNode(tagName,parent,itemNumber));
00120 }
00121
00122
00123 xercesc::DOMElement* RegisterConfigurationInfoReader::getElement(XMLCh* tagName, xercesc::DOMElement* parent, unsigned int itemNumber)
00124 {
00125 return dynamic_cast< xercesc::DOMElement* >(getNode(tagName,parent,itemNumber));
00126 }
00127
00128
00129 void RegisterConfigurationInfoReader::read(RegisterBase& configuration)
00130 {
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219 }
00220
00221
00222 void RegisterConfigurationInfoReader::read(RegisterBase* configuration)
00223 {
00224 read(*configuration);
00225 }
00226