34 #include "../../af/ApplicationController.h" 39 #include <QJsonDocument> 40 #include <QJsonObject> 42 #include <QTextStream> 49 #include <boost/format.hpp> 52 #include <wtss-cxx/wtss.hpp> 54 namespace cxx = wtss::cxx;
59 "/wtss_settings.json";
64 f.open(QIODevice::ReadOnly);
65 QJsonParseError j_parse_error;
66 QString input_data = f.readAll();
67 j_doc = QJsonDocument::fromJson(input_data.toUtf8(), &j_parse_error);
76 "/wtss_settings.json";
78 f.open(QIODevice::WriteOnly);
80 out << j_doc.toJson();
87 QJsonObject j_object = j_doc.object();
89 QJsonObject j_servers = j_object.find(
"servers").value().toObject();
91 if(!j_servers.contains(server_uri))
93 QJsonObject j_coverages;
96 cxx::client remote(server_uri.toStdString());
99 std::vector<std::string> result = remote.list_coverages();
101 for(std::string cv_name : result)
103 cxx::geoarray_t g_array = remote.describe_coverage(cv_name);
105 QJsonObject j_attributes;
106 QJsonObject j_coverage;
108 for(cxx::attribute_t
attribute : g_array.attributes)
110 QJsonObject j_attribute;
111 j_attribute[
"active"] = QJsonValue(
false);
112 j_attribute[
"scale_factor"] = attribute.scale_factor;
113 j_attribute[
"missing_value"] = attribute.missing_value;
114 j_attributes[QString::fromStdString(attribute.name)] = j_attribute;
116 j_coverage[
"active"] = QJsonValue(
false);
117 j_coverage[
"attributes"] = j_attributes;
118 j_coverages[QString::fromStdString(cv_name)] = j_coverage;
121 j_server[
"active"] = QJsonValue(
false);
122 j_server[
"coverages"] = j_coverages;
123 j_servers[server_uri] = j_server;
125 j_object[
"servers"] = j_servers;
126 j_doc.setObject(j_object);
129 catch(
const std::exception &e)
131 boost::format err_msg(
132 "The server %1% could not be added.\n" 133 "Due to the following error: %2%");
136 (err_msg % server_uri.toUtf8().data() % e.what()).str());
144 QJsonObject j_object = j_doc.object();
146 QJsonObject j_servers = j_object.find(
"servers").value().toObject();;
148 if(j_servers.contains(server_uri))
150 QJsonObject j_coverages;
151 QJsonObject j_server;
153 cxx::client remote(server_uri.toStdString());
156 std::vector<std::string> result = remote.list_coverages();
158 for(std::string cv_name : result)
160 cxx::geoarray_t g_array = remote.describe_coverage(cv_name);
162 QJsonObject j_attributes;
163 QJsonObject j_coverage;
165 for(cxx::attribute_t
attribute : g_array.attributes)
167 QJsonObject j_attribute;
168 j_attribute[
"active"] = QJsonValue(
false);
169 j_attribute[
"scale_factor"] = attribute.scale_factor;
170 j_attribute[
"missing_value"] = attribute.missing_value;
171 j_attributes[QString::fromStdString(attribute.name)] = j_attribute;
173 j_coverage[
"active"] = QJsonValue(
false);
174 j_coverage[
"attributes"] = j_attributes;
175 j_coverages[QString::fromStdString(cv_name)] = j_coverage;
178 j_server[
"active"] = QJsonValue(
false);
179 j_server[
"coverages"] = j_coverages;
180 j_servers[server_uri] = j_server;
182 j_object[
"servers"] = j_servers;
183 j_doc.setObject(j_object);
186 catch(
const std::exception &e)
188 boost::format err_msg(
189 "The server %1% could not reloaded..\n" 190 "Due to the following error: %2%");
193 (err_msg % server_uri.toUtf8().data() % e.what()).str());
201 QJsonObject j_object = j_doc.object();
203 QJsonObject j_servers = j_object.find(
"servers").value().toObject();
205 if(j_servers.contains(server_uri))
207 j_servers.remove(server_uri);
208 j_object[
"servers"] = j_servers;
209 j_doc.setObject(j_object);
215 const QString endDate)
218 QJsonObject j_object = j_doc.object();
220 QJsonObject j_dateFilter;
221 j_dateFilter[
"start_date"] = startDate;
222 j_dateFilter[
"end_date"] = endDate;
224 j_object[
"date_filter"] = j_dateFilter;
225 j_doc.setObject(j_object);
232 QJsonObject j_object = j_doc.object();
234 QJsonObject j_dateFilter = j_object.find(
"date_filter").value().toObject();
240 const QString &cv_name,
244 QJsonObject j_object = j_doc.object();
246 QJsonObject j_servers = j_object.find(
"servers").value().toObject();
248 if(!j_servers.contains(server_uri))
250 boost::format err_msg(
"Could not find the server: %1%");
255 QJsonObject j_server = j_servers.find(server_uri).value().toObject();
257 if(!j_server.contains(
"coverages"))
259 boost::format err_msg(
"The server %1% has no coverages");
264 if(!j_server[
"coverages"].toObject().contains(cv_name))
266 boost::format err_msg(
"The server %1% has no coverage named: %2%");
268 (err_msg % server_uri.toUtf8().data() % cv_name.toUtf8().data()).str());
271 QJsonObject j_coverage =
272 j_server[
"coverages"].toObject().find(cv_name).value().toObject();
274 if(!j_coverage.contains(
"attributes"))
276 boost::format err_msg(
"The coverage %1% has no attributes.");
281 QJsonObject j_attributes = j_coverage.find(
"attributes").value().toObject();
283 if(!j_attributes.contains(attribute))
285 boost::format err_msg(
"The coverage %1% has no attribute named: %2%.");
287 (err_msg % cv_name.toUtf8().data() % attribute.toUtf8().data()).str());
290 return j_attributes.find(attribute).value().toObject();
296 QJsonObject j_object = j_doc.object();
298 QJsonObject j_servers = j_object.find(
"servers").value().toObject();
300 if(!j_servers.contains(server_uri))
302 boost::format err_msg(
"Could not find the server: %1%");
307 QJsonObject j_server = j_servers.find(server_uri).value().toObject();
309 bool active = j_server.find(
"active").value().toBool();
310 j_server[
"active"] = !active;
314 for(QJsonObject::iterator it = j_servers.begin(); it != j_servers.end(); ++it)
316 if(it.key() != server_uri)
318 QJsonObject j_sv = it.value().toObject();
319 j_sv[
"active"] = QJsonValue(
false);
320 j_servers[it.key()] = j_sv;
325 j_servers[server_uri] = j_server;
326 j_object[
"servers"] = j_servers;
327 j_doc.setObject(j_object);
332 const QString &cv_name)
335 QJsonObject j_object = j_doc.object();
337 QJsonObject j_servers = j_object.find(
"servers").value().toObject();
339 if(!j_servers.contains(server_uri))
341 boost::format err_msg(
"Could not find the server: %1%");
346 QJsonObject j_server = j_servers.find(server_uri).value().toObject();
348 if(!j_server.contains(
"coverages"))
350 boost::format err_msg(
"The server %1% has no coverages");
355 QJsonObject j_coverages = j_server.find(
"coverages").value().toObject();
356 QJsonObject j_coverage = j_coverages.find(cv_name).value().toObject();
357 bool active = j_coverage.find(
"active").value().toBool();
358 j_coverage[
"active"] = !active;
361 for(QJsonObject::iterator it = j_coverages.begin(); it != j_coverages.end();
364 if(it.key() != cv_name)
366 QJsonObject j_cv = it.value().toObject();
367 j_cv[
"active"] = QJsonValue(
false);
368 j_coverages[it.key()] = j_cv;
372 if(!j_coverages.contains(cv_name))
374 boost::format err_msg(
"The server %1% has no coverage named: %2%");
376 (err_msg % server_uri.toUtf8().data() % cv_name.toUtf8().data()).str());
379 j_coverages[cv_name] = j_coverage;
380 j_server[
"coverages"] = j_coverages;
381 j_servers[server_uri] = j_server;
383 j_object[
"servers"] = j_servers;
384 j_doc.setObject(j_object);
390 const QString &cv_name,
394 QJsonObject j_object = j_doc.object();
396 QJsonObject j_servers = j_object.find(
"servers").value().toObject();
398 if(!j_servers.contains(server_uri))
400 boost::format err_msg(
"Could not find the server: %1%");
405 QJsonObject j_server = j_servers.find(server_uri).value().toObject();
407 if(!j_server.contains(
"coverages"))
409 boost::format err_msg(
"The server %1% has no coverages");
414 QJsonObject j_coverages = j_server.find(
"coverages").value().toObject();
416 if(!j_coverages.contains(cv_name))
418 boost::format err_msg(
"The server %1% has no coverage named: %2%");
420 (err_msg % server_uri.toUtf8().data() % cv_name.toUtf8().data()).str());
423 QJsonObject j_coverage = j_coverages.find(cv_name).value().toObject();
425 if(!j_coverage.contains(
"attributes"))
427 boost::format err_msg(
"The coverage %1% has no attributes.");
432 QJsonObject j_attributes = j_coverage.find(
"attributes").value().toObject();
434 if(!j_attributes.contains(attribute))
436 boost::format err_msg(
"The coverage %1% has no attribute named: %2%.");
438 (err_msg % cv_name.toUtf8().data() % attribute.toUtf8().data()).str());
441 QJsonObject j_attribute = j_attributes.find(attribute).value().toObject();
443 if(!j_attribute.contains(
"active"))
445 boost::format err_msg(
"The coverage %1% has no attribute named: %2%.");
447 (err_msg % cv_name.toUtf8().data() % attribute.toUtf8().data()).str());
450 j_attribute[
"active"] = !j_attribute.find(
"active").value().toBool();
453 j_coverage[
"attributes"] = j_attributes;
455 j_coverages[cv_name] = j_coverage;
456 j_server[
"coverages"] = j_coverages;
458 j_servers[server_uri] = j_server;
459 j_object[
"servers"] = j_servers;
461 j_doc.setObject(j_object);
QJsonDocument loadSettings()
void addServer(const QString &server_uri)
QJsonObject getAttribute(const QString &server_uri, const QString &cv_name, const QString &attribute)
void saveSettings(QJsonDocument j_doc)
Base exception class for plugin module.
QJsonObject getDateFilter()
void changeStatusAttribute(const QString &server_uri, const QString &cv_name, const QString &attribute)
Base Exception class Exceptions in WTSS.TL.
Manage the JSON file for services configuration of the Web Time Series Services plugin.
boost::error_info< struct tag_error_description, std::string > ErrorDescription
The base type for error report messages.
void removeServer(const QString &server_uri)
static ApplicationController & getInstance()
It returns a reference to the singleton instance.
void changeStatusServer(const QString &server_uri)
void refreshServer(const QString &server_uri)
An exception indicating that a given item was not found in a collection (or range).
void addDateFilter(const QString startDate, const QString endDate)
void changeStatusCoverage(const QString &server_uri, const QString &cv_name)