hce-node application  1.4.3
HCE Hierarchical Cluster Engine node application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
SphinxSchemaFile.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 
10 #include <Poco/SharedPtr.h>
11 #include <Poco/AutoPtr.h>
12 
13 #include <fstream>
14 #include <sstream>
15 
16 #include "SphinxDataSource.hpp"
17 #include "SphinxSchemaFile.hpp"
18 #include "SphinxMessageConst.hpp"
19 
20 namespace HCE
21 {
22 namespace sphinx
23 {
24 //-----------------------------------------------------------------------------
25 SphinxSchemaFile::SphinxSchemaFile(std::istream& istrSchema)
26 :sourceSchema(istrSchema), errorMsg(""), _IsError(false), attributesCount(0)
27 {
28 }
29 //-----------------------------------------------------------------------------
30 bool SphinxSchemaFile::getFields(std::vector<std::pair<std::string, int> >& Vec)
31 {
32  errorMsg.clear();
33  Vec.clear();
34  try
35  {
36  Poco::XML::DOMParser parser;
37  Poco::AutoPtr<Poco::XML::Document> pDoc = parser.parse(&sourceSchema);
38  Poco::XML::NodeIterator it_doc(pDoc, Poco::XML::NodeFilter::SHOW_ALL);
39  Poco::XML::Node* pNode = it_doc.nextNode();
40 
41  while (pNode)
42  {
43  if (pNode->nodeName() == sphinx_data_source_const::fieldTag)
44  {
45  Poco::AutoPtr<Poco::XML::NamedNodeMap> pMap = pNode->attributes();
46  if (!pMap.isNull())
47  {
48  std::string name;
49  int weight=0;
50  for (size_t i=0;i<pMap->length();++i)
51  {
52  if (pMap->item(i)->nodeName()==sphinx_data_source_const::nameAttrTag)
53  name = pMap->item(i)->nodeValue();
54  if (pMap->item(i)->nodeName()==sphinx_data_source_const::weightAttrTag)
55  {
56  try
57  {
58  weight = std::stoul(pMap->item(i)->nodeValue());
59  }
60  catch(std::exception& exc)
61  {
64  }
65  }
66  }
67  Vec.push_back(std::make_pair(name, weight));
68  }
69  }
70  pNode = it_doc.nextNode();
71  }
72  _IsError = false;
73  }
74  catch(Poco::Exception& e)
75  {
76  errorMsg = e.message();
77  _IsError = true;
78  }
79  return !_IsError;
80 }
81 //-----------------------------------------------------------------------------
82 bool SphinxSchemaFile::getNames(std::vector<std::string>& names)
83 {
84  errorMsg.clear();
85  names.clear();
86  attributesCount = 0;
87  try
88  {
89  Poco::XML::DOMParser parser;
90  Poco::AutoPtr<Poco::XML::Document> pDoc = parser.parse(&sourceSchema);
91  Poco::XML::NodeIterator it_doc(pDoc, Poco::XML::NodeFilter::SHOW_ALL);
92  Poco::XML::Node* pNode = it_doc.nextNode();
93 
94  while (pNode)
95  {
96  if ((pNode->nodeName()==sphinx_data_source_const::fieldTag) || (pNode->nodeName()==sphinx_data_source_const::attrTag))
97  {
98  Poco::AutoPtr<Poco::XML::NamedNodeMap> pMap = pNode->attributes();
99  if (!pMap.isNull())
100  {
101  for (size_t i=0;i<pMap->length();++i)
102  if (pMap->item(i)->nodeName()==sphinx_data_source_const::nameAttrTag)
103  names.push_back(pMap->item(i)->nodeValue());
104  }
105  if (pNode->nodeName()==sphinx_data_source_const::attrTag)
106  ++attributesCount;
107  }
108  pNode = it_doc.nextNode();
109  }
110  _IsError = false;
111  }
112  catch(Poco::Exception& e)
113  {
114  errorMsg = e.message();
115  _IsError = true;
116  }
117  return !_IsError;
118 }
119 //-----------------------------------------------------------------------------
120 //-----------------------------------------------------------------------------
121 } // namespace sphinx
122 } // namespace HCE