summaryrefslogtreecommitdiffstats
path: root/Websocket/query.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Websocket/query.cpp')
-rw-r--r--Websocket/query.cpp230
1 files changed, 230 insertions, 0 deletions
diff --git a/Websocket/query.cpp b/Websocket/query.cpp
new file mode 100644
index 00000000..d7221ff8
--- /dev/null
+++ b/Websocket/query.cpp
@@ -0,0 +1,230 @@
+/*
+ * Copyright (c) 2017 Cisco and/or its affiliates.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "query.h"
+
+const std::string QueryKeys::ACTION = "action";
+const std::string QueryKeys::OBJECT_NAME = "object_name";
+const std::string QueryKeys::FILTER = "filter";
+const std::string QueryKeys::PARAMS = "params";
+const std::string QueryKeys::FIELD_NAMES = "field_names";
+const std::string QueryKeys::LAST = "last";
+
+Query::Query()
+ : query(Json::object())
+{
+}
+
+Query::Query(const std::string &action, const std::string &objectName, const std::list<std::vector<std::string>> &filter,
+ const std::map<std::string, std::string> &params, const std::list<std::string> &fields, bool last)
+{
+ this->action = action;
+ this->objectName = objectName;
+ this->filter = filter;
+ this->params = params;
+ this->fields = fields;
+ this->last = last;
+
+ if (fields.size() == 0) {
+ this->fields.push_back("*");
+ }
+
+ query[QueryKeys::ACTION] = action;
+ query[QueryKeys::OBJECT_NAME] = objectName;
+ query[QueryKeys::FILTER] = Json(filter);
+ query[QueryKeys::PARAMS] = Json(params);
+ query[QueryKeys::FIELD_NAMES] = Json(fields);
+ query[QueryKeys::LAST] = last;
+}
+
+Query
+Query::fromJsonString(const std::string &jsonString)
+{
+ Query query;
+ Json jsonQuery = Json::parse(jsonString);
+
+ std::cout << jsonQuery << std::endl;
+
+ std::cout << jsonQuery[QueryKeys::LAST] << std::endl;
+
+ query.setAction(jsonQuery[QueryKeys::ACTION]);
+ query.setLast(jsonQuery[QueryKeys::LAST]);
+ query.setObjectName(jsonQuery[QueryKeys::OBJECT_NAME]);
+
+ Json list = jsonQuery[QueryKeys::FIELD_NAMES];
+
+ for (Json::iterator it =list.begin(); it != list.end(); ++it) {
+ query.fields.push_back(*it);
+ }
+
+ if (query.fields.size() == 0) {
+ query.fields.push_back("*");
+ }
+
+ Json list2 = jsonQuery[QueryKeys::FILTER];
+
+ for (Json::iterator it = list2.begin(); it != list2.end(); ++it) {
+ query.filter.push_back(*it);
+ }
+
+ Json map = jsonQuery[QueryKeys::PARAMS];
+
+ for (Json::iterator it = map.begin(); it != map.end(); ++it) {
+ std::cout << it.key() << " " << it.value().dump() << std::endl;
+ query.params[it.key()] = it.value().dump();
+ }
+
+ query.query[QueryKeys::ACTION] = query.action;
+ query.query[QueryKeys::OBJECT_NAME] = query.objectName;
+ query.query[QueryKeys::FILTER] = Json(query.filter);
+ query.query[QueryKeys::PARAMS] = Json(query.params);
+ query.query[QueryKeys::FIELD_NAMES] = Json(query.fields);
+ query.query[QueryKeys::LAST] = query.last;
+
+ return query;
+}
+
+void
+Query::removeQuotes(std::string& string)
+{
+ std::cout << string.front() << std::endl;
+ string.erase(remove(string.begin(), string.end(), '\"'), string.end());
+}
+
+std::string
+Query::toJsonString(const Query &query)
+{
+ return query.query.dump();
+}
+
+std::string
+Query::toJsonString(const std::string &action, const std::string &objectName, const std::list<std::vector<std::string>> &filter,
+ const std::map<std::string, std::string> &params, const std::list<std::string> &fields, bool last)
+{
+ Json jsonQuery;
+
+ jsonQuery[QueryKeys::ACTION] = action;
+ jsonQuery[QueryKeys::OBJECT_NAME] = objectName;
+ jsonQuery[QueryKeys::FILTER] = Json(filter);
+ jsonQuery[QueryKeys::PARAMS] = Json(params);
+ jsonQuery[QueryKeys::FIELD_NAMES] = Json(fields);
+ jsonQuery[QueryKeys::LAST] = last;
+
+ return jsonQuery.dump();
+}
+
+std::string
+Query::toJsonString()
+{
+ return query.dump();
+}
+
+const std::string&
+Query::getAction() const
+{
+ return action;
+}
+
+void
+Query::setAction(const std::string &action)
+{
+ Query::action = action;
+ removeQuotes(this->action);
+ query[QueryKeys::ACTION] = this->action;
+}
+
+const std::string&
+Query::getObjectName() const
+{
+ return objectName;
+}
+
+void
+Query::setObjectName(const std::string &objectName)
+{
+ Query::objectName = objectName;
+ removeQuotes(this->objectName);
+ query[QueryKeys::OBJECT_NAME] = this->objectName;
+}
+
+const std::list<std::vector<std::string>>&
+Query::getFilter() const
+{
+ return filter;
+}
+
+void
+Query::setFilter(const std::list<std::vector<std::string>> &filter)
+{
+ Query::filter = filter;
+
+ for (auto f : this->filter) {
+ for (auto field : f) {
+ removeQuotes(field);
+ }
+ }
+
+ query[QueryKeys::FILTER] = this->filter;
+}
+
+const std::map<std::string, std::string>&
+Query::getParams() const
+{
+ return params;
+}
+
+void
+Query::setParams(const std::map<std::string, std::string> &params)
+{
+ Query::params = params;
+ query[QueryKeys::PARAMS] = this->params;
+}
+
+const std::list<std::string>&
+Query::getFields() const
+{
+ return fields;
+}
+
+void
+Query::setFields(const std::list<std::string> &fields)
+{
+ Query::fields = fields;
+
+ for (auto field : this->fields) {
+ removeQuotes(field);
+ }
+
+ query[QueryKeys::FIELD_NAMES] = this->fields;
+}
+
+bool
+Query::isLast() const
+{
+ return last;
+}
+
+void
+Query::setLast(int last)
+{
+ Query::last = last;
+ query[QueryKeys::LAST] = this->last;
+}
+
+bool
+Query::isEmpty()
+{
+ return query.empty();
+}