v2.0.0
Loading...
Searching...
No Matches
command_parser.cpp
Go to the documentation of this file.
1//=============================================================================================================
22
23//=============================================================================================================
24// INCLUDES
25//=============================================================================================================
26
27#include "command_parser.h"
28#include "command_manager.h"
29
30//=============================================================================================================
31// QT INCLUDES
32//=============================================================================================================
33
34#include <QDebug>
35#include <QStringList>
36#include <QJsonObject>
37#include <QJsonDocument>
38#include <QDebug>
39
40//=============================================================================================================
41// USED NAMESPACES
42//=============================================================================================================
43
44using namespace COMLIB;
45
46//=============================================================================================================
47// DEFINE MEMBER METHODS
48//=============================================================================================================
49
51: QObject(parent)
52{
53}
54
55//=============================================================================================================
56
57bool CommandParser::exists(const QString& p_sCommand)
58{
59 Subject::t_Observers::Iterator itObservers;
60 for(itObservers = this->observers().begin(); itObservers != this->observers().end(); ++itObservers)
61 {
62 CommandManager* t_pCommandManager = static_cast<CommandManager*> (*itObservers);
63 if(t_pCommandManager->hasCommand(p_sCommand))
64 return true;
65 }
66 return false;
67}
68
69//=============================================================================================================
70
71bool CommandParser::parse(const QString &p_sInput, QStringList &p_qListCommandsParsed)
72{
73 if(p_sInput.size() <= 0)
74 return false;
75
76 p_qListCommandsParsed.clear();
77
78 //Check if JSON format;
79 bool isJson = false;
80 if(QString::compare(p_sInput.at(0), QString("{")) == 0)
81 isJson = true;
82
83 if(isJson)
84 {
85 qDebug() << "JSON command recognized";
86
87 QJsonObject t_jsonObjectCommand;
88 QJsonObject t_jsonObjectParameters;
89 QJsonDocument t_jsonDocument(QJsonDocument::fromJson(p_sInput.toUtf8()));
90
91 //Switch to command object
92 if(t_jsonDocument.isObject() && t_jsonDocument.object().value(QString("commands")) != QJsonValue::Undefined)
93 t_jsonObjectCommand = t_jsonDocument.object().value(QString("commands")).toObject();
94 else
95 return false;
96
97 //iterate over commands
98 QJsonObject::Iterator it;
99 QJsonObject::Iterator itParam;
100 for(it = t_jsonObjectCommand.begin(); it != t_jsonObjectCommand.end(); ++it)
101 {
102 //Print Command
103 qInfo("%s\r\n", it.key().toUtf8().constData());
104
105 if(exists(it.key()))
106 {
107 RawCommand t_rawCommand(it.key(), true);
108 m_rawCommand = t_rawCommand;
109 t_jsonObjectParameters = it.value().toObject();
110
111 // push command to processed commands
112 p_qListCommandsParsed.push_back(it.key());
113
114 //append the parameters
115 for(itParam= t_jsonObjectParameters.begin(); itParam != t_jsonObjectParameters.end(); ++itParam)
116 {
117 qInfo(" %s", itParam.value().toString().toUtf8().constData());
118 //ToDo do a cross check with the param naming and key
119 m_rawCommand.pValues().append(itParam.value().toString());
120// qDebug() << itParam.key() << " + " << itParam.value().toString();
121 }
122
123 //Notify attached command manager
124 notify();
125 }
126 qInfo("\r\n");
127 }
128 }
129 else
130 {
131 QStringList t_qCommandList = p_sInput.split(" ");
132
133 //Print command
134 qInfo("%s\r\n", t_qCommandList[0].toUtf8().constData());
135
136 if(!exists(t_qCommandList[0]))
137 {
138 qInfo("\r\n");
139 return false;
140 }
141
142 RawCommand t_rawCommand(t_qCommandList[0], false);
143 m_rawCommand = t_rawCommand;
144
145 // push command to processed commands
146 p_qListCommandsParsed.push_back(t_qCommandList[0]);
147
148 if(t_qCommandList.size() > 1) //Parameter parsing
149 {
150 //Parse Parameters
151 for(qint32 i = 1; i < t_qCommandList.size(); ++i)
152 {
153 qInfo(" %s", t_qCommandList[i].toUtf8().constData());
154 m_rawCommand.pValues().append(t_qCommandList[i]);
155 }
156 }
157 qInfo("\r\n");
158 notify();
159 }
160
161 return true;
162}
Per-component registry of COMLIB::Command schemas; receives COMLIB::RawCommand from the parser and di...
Front-end tokeniser that turns incoming JSON or CLI payloads into COMLIB::RawCommand objects and noti...
Real-time client/server communication primitives for talking to mne_rt_server.
Observer-side registry of Command schemas a subsystem accepts from the shared CommandParser.
bool hasCommand(const QString &p_sCommand) const
bool exists(const QString &p_sCommand)
CommandParser(QObject *parent=0)
bool parse(const QString &p_sInput, QStringList &p_qListCommandsParsed)
Tokenised but unresolved command: a keyword plus a list of raw string arguments awaiting type binding...
Definition raw_command.h:71
t_Observers & observers()