diff --git a/spectrum_manager/src/APIServer.cpp b/spectrum_manager/src/APIServer.cpp index c85a1a29f78324c6b6103b152c8aae7c90ab9896..3c7c449ba9ce3ca83f6ef89ab019288797e1a7f4 100644 --- a/spectrum_manager/src/APIServer.cpp +++ b/spectrum_manager/src/APIServer.cpp @@ -485,7 +485,7 @@ void APIServer::serve_instances_command_args(Server *server, Server::session *se tokens.push_back(*beg); } - if (tokens.size() != 5) { + if (tokens.size() != 7) { continue; } @@ -496,6 +496,7 @@ void APIServer::serve_instances_command_args(Server *server, Server::session *se arg.AddMember("name", tokens[0].c_str(), json.GetAllocator()); arg.AddMember("label", tokens[2].c_str(), json.GetAllocator()); arg.AddMember("example", tokens[4].c_str(), json.GetAllocator()); + arg.AddMember("type", tokens[6].c_str(), json.GetAllocator()); argList.PushBack(arg, json.GetAllocator()); } @@ -574,11 +575,64 @@ void APIServer::serve_instances_execute(Server *server, Server::session *session } response = server->send_command(instance, command); - boost::replace_all(response, "\n", "
"); if (response.find("Error:") == 0) { send_ack(conn, false, response); } + + std::vector fields; + boost::split(fields, response, boost::is_any_of("\n")); + if (!fields.empty() && /*fields[0].find(" - ") != std::string::npos &&*/ (fields[0].find(": ") != std::string::npos || fields[0].find(":\"") != std::string::npos)) { + Document json; + json.SetObject(); + json.AddMember("error", 0, json.GetAllocator()); + + std::vector tmp; + std::vector tmp2; + Value table(kArrayType); + + BOOST_FOREACH(const std::string &line, fields) { + escaped_list_separator els('\\', ' ', '\"'); + tokenizer > tok(line, els); + + Value arg; + arg.SetObject(); + + std::string key; + int i = 0; + bool hasDesc = true; + for(tokenizer >::iterator beg=tok.begin(); beg!=tok.end(); ++beg, ++i) { + if (i == 1 && *beg != "-") { + hasDesc = false; + } + if (i == 0) { + tmp.push_back(*beg); + arg.AddMember("Key", tmp.back().c_str(), json.GetAllocator()); + } + else if (i == 2 && hasDesc) { + tmp.push_back(*beg); + arg.AddMember("Description", tmp.back().c_str(), json.GetAllocator()); + } + else if (i > 1 || (!hasDesc && i > 0)) { + if (key.empty()) { + key = *beg; + } + else { + tmp.push_back(key); + tmp2.push_back(*beg); + arg.AddMember(tmp.back().c_str(), tmp2.back().c_str(), json.GetAllocator()); + key = ""; + } + } + } + table.PushBack(arg, json.GetAllocator()); + } + + json.AddMember("table", table, json.GetAllocator()); + json.AddMember("message", response.c_str(), json.GetAllocator()); + send_json(conn, json); + } else { + boost::replace_all(response, "\n", "
"); send_ack(conn, true, response); } }