hce-node application  1.4.3
HCE Hierarchical Cluster Engine node application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
HandlerProperties.cpp
Go to the documentation of this file.
1 #include <fstream>
2 #include <stdexcept>
3 #include <Poco/File.h>
4 #include <Poco/JSON/Object.h>
5 #include <Poco/JSON/Array.h>
6 #include <Poco/JSON/JSON.h>
7 #include <Poco/JSON/Stringifier.h>
8 #include <Poco/JSON/Parser.h>
9 #include <Poco/JSON/JSONException.h>
10 
11 #include "HandlerProperties.hpp"
12 #include "HandlerTypes.hpp"
13 
14 namespace HCE
15 {
16 namespace handlers
17 {
18 //-----------------------------------------------------------------------------
21 {
22 }
23 //-----------------------------------------------------------------------------
24 bool HandlerProperties::serialize(std::string& json)
25 {
26  resetError();
27  try
28  {
29  Poco::JSON::Object::Ptr pObj = new Poco::JSON::Object();
30  if (pObj.isNull())
31  throw Poco::Exception("Object instance was not created");
32 
33  for (ConstIterator iter=begin();iter!=end();++iter)
34  {
35  pObj->set((*iter).first, (*iter).second);
36  }
37 
38  std::stringstream ostr;
39  Poco::JSON::Stringifier::stringify(pObj, ostr);
40  json = ostr.str();
41  }
42  catch(Poco::Exception& e)
43  {
44  setIsError(true);
45  setErrorMsg(e.displayText());
47  }
48  catch(std::exception& e)
49  {
50  setIsError(true);
51  setErrorMsg(e.what());
53  }
54  return !isError();
55 }
56 //-----------------------------------------------------------------------------
57 bool HandlerProperties::unserialize(const std::string& json)
58 {
59  resetError();
60  try
61  {
62  Poco::JSON::Parser parser;
63  Poco::Dynamic::Var res = parser.parse(json);
64 
65  Poco::JSON::Object::Ptr pObj = res.extract<Poco::JSON::Object::Ptr>();
66 
67  if (!pObj.isNull())
68  {
69  std::vector<std::string> names;
70  pObj->getNames(names);
71 
72  for (size_t i=0;i<names.size();++i)
73  {
74  Poco::Dynamic::Var tmp = pObj->get(names[i]);
75  if (!tmp.isEmpty())
76  {
77  if (tmp.isString())
78  {
79  setItem(names[i], tmp.convert<std::string>());
80  }
81  else if(tmp.isNumeric())
82  {
83  if (tmp.isInteger())
84  {
85  if (tmp.isSigned())
86  {
87  setItem(names[i], static_cast<long int>(tmp.convert<Poco::Int64>()));
88  }
89  else
90  {
91  setItem(names[i], static_cast<unsigned long int>(tmp.convert<Poco::UInt64>()));
92  }
93  }
94  else
95  {
96  setItem(names[i], tmp.convert<double>());
97  }
98  }
99  }
100  }
101  }
102  }
103  catch(Poco::JSON::JSONException& e)
104  {
105  setIsError(true);
106  setErrorMsg(e.displayText());
108  }
109  catch(Poco::Exception& e)
110  {
111  setIsError(true);
112  setErrorMsg(e.displayText());
114  }
115  catch(std::exception& e)
116  {
117  setIsError(true);
118  setErrorMsg(e.what());
120  }
121  return !isError();
122 }
123 //-----------------------------------------------------------------------------
124 bool HandlerProperties::load(const std::string& fileName)
125 {
126  bool result = false;
127  resetError();
128  try
129  {
130  Poco::File jsonFile(fileName);
131  if (jsonFile.exists())
132  {
133  if (!jsonFile.isFile())
134  throw std::runtime_error(fileName+" is not file");
135 
136  if (!jsonFile.canRead())
137  throw std::runtime_error(fileName+" is cannot be read");
138 
139  std::ifstream ifs(fileName.c_str());
140  if (!ifs.is_open())
141  throw std::runtime_error(fileName+" is not opened");
142 
143  ifs >> (*this);
144  ifs.close();
145  }
146  result = !isError();
147  }
148  catch(std::exception& e)
149  {
150  setIsError(true);
152  setErrorMsg(e.what());
153  }
154  return result;
155 }
156 //-----------------------------------------------------------------------------
157 bool HandlerProperties::save(const std::string& fileName)
158 {
159  std::ofstream ofs(fileName, std::fstream::trunc);
160  ofs << (*this);
161  ofs.close();
162  return Poco::File(fileName).exists();
163 }
164 //-----------------------------------------------------------------------------
165 std::istream& operator>>(std::istream& is, HandlerProperties& handlerProperties)
166 {
167  std::string json;
168  is.seekg(0, std::ios::end);
169  json.resize(is.tellg());
170  is.seekg(0, std::ios::beg);
171  is.read(const_cast<char*>(json.c_str()), json.size());
172  handlerProperties.unserialize(json);
173  return is;
174 }
175 //-----------------------------------------------------------------------------
176 std::ostream& operator<<(std::ostream& os, const HandlerProperties& handlerProperties)
177 {
178  std::string json;
179  const_cast<HandlerProperties&>(handlerProperties).serialize(json);
180  return os << json;
181 }
182 //-----------------------------------------------------------------------------
183 //-----------------------------------------------------------------------------
184 } // end namespace handlers
185 } // end namespace HCE