v2.0.0
Loading...
Searching...
No Matches
command_manager.cpp
Go to the documentation of this file.
1//=============================================================================================================
36
37//=============================================================================================================
38// Includes
39//=============================================================================================================
40
41#include "command_manager.h"
42#include "raw_command.h"
43
44//=============================================================================================================
45// Qt Includes
46//=============================================================================================================
47
48#include <QVector>
49#include <QDebug>
50#include <QJsonObject>
51#include <QStringList>
52
53//=============================================================================================================
54// USED NAMESPACES
55//=============================================================================================================
56
57using namespace COMLIB;
58
59//=============================================================================================================
60// DEFINE MEMBER METHODS
61//=============================================================================================================
62
63CommandManager::CommandManager(bool p_bIsActive, QObject *parent)
64: QObject(parent)
65, m_bIsActive(p_bIsActive)
66{
67 init();
68}
69
70//=============================================================================================================
71
72CommandManager::CommandManager(const QByteArray &p_qByteArrayJsonDoc, bool p_bIsActive, QObject *parent)
73: QObject(parent)
74, m_bIsActive(p_bIsActive)
75{
76 init();
77
78 m_jsonDocumentOrigin = QJsonDocument::fromJson(p_qByteArrayJsonDoc);
79
80 insert(m_jsonDocumentOrigin);
81}
82
83//=============================================================================================================
84
85CommandManager::CommandManager(const QJsonDocument &p_jsonDoc, bool p_bIsActive, QObject *parent)
86: QObject(parent)
87, m_bIsActive(p_bIsActive)
88, m_jsonDocumentOrigin(p_jsonDoc)
89{
90 init();
91
92 insert(m_jsonDocumentOrigin);
93}
94
95//=============================================================================================================
96
98{
99 //Disconnect all connections which are created with the help of this manager.
100// this->disconnectAll();
101
102 //Remove commands which where inserted into the static command list
103}
104
105//=============================================================================================================
106
108{
109 m_qMapCommands.clear();
110}
111
112//=============================================================================================================
113
114void CommandManager::init()
115{
116}
117
118//=============================================================================================================
119//ToDo connect all commands inserted in this class by default.
120void CommandManager::insert(const QJsonDocument &p_jsonDocument)
121{
122 QJsonObject t_jsonObjectCommand;
123
124 //Switch to command object
125 if(p_jsonDocument.isObject() && p_jsonDocument.object().value(QString("commands")) != QJsonValue::Undefined)
126 t_jsonObjectCommand = p_jsonDocument.object().value(QString("commands")).toObject();
127 else
128 return;
129
130 QJsonObject::Iterator it;
131 for(it = t_jsonObjectCommand.begin(); it != t_jsonObjectCommand.end(); ++it)
132 {
133 if(!m_qMapCommands.contains(it.key()))
134 m_qMapCommands.insert(it.key(), Command(it.key(), it.value().toObject(), true, this));
135 else
136 qWarning("Warning: CommandMap contains command %s already. Insertion skipped.\n", it.key().toUtf8().constData());
137 }
138
139 emit commandMapChanged();
140}
141
142//=============================================================================================================
143
144void CommandManager::insert(const QString &p_sKey, const QString &p_sDescription)
145{
146 Command t_command(p_sKey, p_sDescription, false, this);
147 insert(p_sKey, t_command);
148}
149
150//=============================================================================================================
151
152void CommandManager::insert(const QString &p_sKey, const Command &p_command)
153{
154 Command t_command(p_command);
155 t_command.setParent(this);
156 m_qMapCommands.insert(p_sKey, t_command);
157 emit commandMapChanged();
158}
159
160//=============================================================================================================
161
163{
164 // If Manager is not active do not parse commands
165 if(!m_bIsActive)
166 return;
167
168 CommandParser* t_pCommandParser = static_cast<CommandParser*>(p_pSubject);
169
170 RawCommand t_rawCommand(t_pCommandParser->getRawCommand());
171 QString t_sCommandName = t_rawCommand.command();
172
173 if(!this->hasCommand(t_sCommandName))
174 return;
175
176 // check if number of parameters is right
177 if(t_rawCommand.count() >= m_qMapCommands[t_sCommandName].count())
178 {
179 m_qMapCommands[t_sCommandName].isJson() = t_rawCommand.isJson();
180
181 //Parse Parameters
182 for(quint32 i = 0; i < m_qMapCommands[t_sCommandName].count(); ++i)
183 {
184 QMetaType t_metaType = m_qMapCommands[t_sCommandName][i].metaType();
185
186 QVariant t_qVariantParam(t_rawCommand.pValues()[i]);
187
188 if(t_qVariantParam.canConvert(t_metaType) && t_qVariantParam.convert(t_metaType))
189 m_qMapCommands[t_sCommandName][i] = t_qVariantParam;
190 else
191 return;
192 }
193
194 m_qMapCommands[t_sCommandName].execute();
195 }
196}
197
198//=============================================================================================================
199
201{
202 return m_qMapCommands[key];
203}
204
205//=============================================================================================================
206
207const Command CommandManager::operator[] (const QString &key) const
208{
209 return m_qMapCommands[key];
210}
Declaration of the CommandManager Class.
Real-time client/server communication (commands, raw data streaming).
Named command with typed parameters for real-time server control.
Definition command.h:78
virtual void update(UTILSLIB::Subject *p_pSubject)
bool hasCommand(const QString &p_sCommand) const
CommandManager(bool p_bIsActive=true, QObject *parent=0)
Command & operator[](const QString &key)
void insert(const QJsonDocument &p_jsonDocument)
Tokenizes and parses JSON or CLI command strings into RawCommand objects.
RawCommand & getRawCommand()
Parsed but untyped command holding raw string parameters before type resolution.
Definition raw_command.h:70
bool isJson() const
QString command() const
QList< QString > & pValues()
quint32 count() const
The Subject class provides the base class of every subject of the observer design pattern.