HCE project C++ developers source code library  1.1.1
HCE project developer library
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
SphinxDataSourceParameters.cpp
Go to the documentation of this file.
1 #include <Poco/DOM/DOMParser.h>
2 #include <Poco/DOM/DOMWriter.h>
3 
4 #include <Poco/DOM/NodeIterator.h>
5 #include <Poco/DOM/NodeFilter.h>
6 #include <Poco/DOM/AutoPtr.h>
7 #include <Poco/DOM/NamedNodeMap.h>
8 #include <Poco/XML/XMLWriter.h>
9 #include <Poco/SAX/InputSource.h>
10 #include <Poco/DOM/Node.h>
11 #include <Poco/DOM/Document.h>
12 
13 #include <Poco/SharedPtr.h>
14 #include <Poco/AutoPtr.h>
15 
16 #include <fstream>
17 #include <sstream>
18 
19 #include "SphinxDataSource.hpp"
21 
22 namespace HCE
23 {
24 namespace sphinx
25 {
26 //-----------------------------------------------------------------------------
28 :Map(), errorMsg(""), _IsError(false)
29 {
30 }
31 //-----------------------------------------------------------------------------
33 :Map(), errorMsg(""), _IsError(false)
34 {
35  load(is);
36 }
37 //-----------------------------------------------------------------------------
38 bool SphinxDataSourceParameters::load(std::istream& is)
39 {
40  errorMsg.clear();
41  Map.clear();
42  try
43  {
44  Poco::XML::InputSource sourceDoc(is);
45  Poco::XML::DOMParser parser;
46  Poco::AutoPtr<Poco::XML::Document> pDoc = parser.parse(&sourceDoc);
47  Poco::XML::NodeIterator it_doc(pDoc, Poco::XML::NodeFilter::SHOW_ALL);
48  Poco::XML::Node* pNode = it_doc.nextNode();
49 
50  while (pNode)
51  {
52  if (pNode->nodeName() == sphinx_data_source_const::hceDocsTag)
53  {
54  Poco::AutoPtr<Poco::XML::NamedNodeMap> pMap = pNode->attributes();
55  if (!pMap.isNull())
56  {
57  for (size_t i=0;i<pMap->length();++i)
58  {
59  try
60  {
61  Map.insert(PARAM_ATTR__MAP::value_type(pMap->item(i)->nodeName(), std::stoull(pMap->item(i)->nodeValue())));
62  }
63  catch(std::exception& exc)
64  {
65  throw Poco::Exception("Attribute '"+pMap->item(i)->nodeName()+"' have invalid_argument ("+exc.what()+")");
66  }
67  }
68  }
69  }
70  pNode = it_doc.nextNode();
71  }
72  _IsError = false;
73  }
74  catch(Poco::Exception& e)
75  {
76  errorMsg = e.displayText();
77  _IsError = true;
78  }
79  return !_IsError;
80 }
81 //-----------------------------------------------------------------------------
83 {
85 }
86 //-----------------------------------------------------------------------------
87 // cppcheck-suppress unusedFunction
89 {
91 }
92 //-----------------------------------------------------------------------------
93 //-----------------------------------------------------------------------------
94 } // namespace sphinx
95 } // namespace HCE