MNE-CPP 0.1.9
A Framework for Electrophysiology
Loading...
Searching...
No Matches
commandmanager.cpp
1
2//=============================================================================================================
3// Includes
4//=============================================================================================================
5
6#include "commandmanager.h"
7#include "rawcommand.h"
8
9//=============================================================================================================
10// Qt Includes
11//=============================================================================================================
12
13#include <QVector>
14#include <QDebug>
15#include <QJsonObject>
16#include <QStringList>
17
18//=============================================================================================================
19// USED NAMESPACES
20//=============================================================================================================
21
22using namespace COMMUNICATIONLIB;
23
24//=============================================================================================================
25// DEFINE MEMBER METHODS
26//=============================================================================================================
27
28CommandManager::CommandManager(bool p_bIsActive, QObject *parent)
29: QObject(parent)
30, m_bIsActive(p_bIsActive)
31{
32 init();
33}
34
35//=============================================================================================================
36
37CommandManager::CommandManager(const QByteArray &p_qByteArrayJsonDoc, bool p_bIsActive, QObject *parent)
38: QObject(parent)
39, m_bIsActive(p_bIsActive)
40{
41 init();
42
43 m_jsonDocumentOrigin = QJsonDocument::fromJson(p_qByteArrayJsonDoc);
44
45 insert(m_jsonDocumentOrigin);
46}
47
48//=============================================================================================================
49
50CommandManager::CommandManager(const QJsonDocument &p_jsonDoc, bool p_bIsActive, QObject *parent)
51: QObject(parent)
52, m_bIsActive(p_bIsActive)
53, m_jsonDocumentOrigin(p_jsonDoc)
54{
55 init();
56
57 insert(m_jsonDocumentOrigin);
58}
59
60//=============================================================================================================
61
62CommandManager::~CommandManager()
63{
64 //Disconnect all connections which are created with the help of this manager.
65// this->disconnectAll();
66
67 //Remove commands which where inserted into the static command list
68}
69
70//=============================================================================================================
71
73{
74 m_qMapCommands.clear();
75}
76
77//=============================================================================================================
78
79void CommandManager::init()
80{
81}
82
83//=============================================================================================================
84//ToDo connect all commands inserted in this class by default.
85void CommandManager::insert(const QJsonDocument &p_jsonDocument)
86{
87 QJsonObject t_jsonObjectCommand;
88
89 //Switch to command object
90 if(p_jsonDocument.isObject() && p_jsonDocument.object().value(QString("commands")) != QJsonValue::Undefined)
91 t_jsonObjectCommand = p_jsonDocument.object().value(QString("commands")).toObject();
92 else
93 return;
94
95 QJsonObject::Iterator it;
96 for(it = t_jsonObjectCommand.begin(); it != t_jsonObjectCommand.end(); ++it)
97 {
98 if(!m_qMapCommands.contains(it.key()))
99 m_qMapCommands.insert(it.key(), Command(it.key(), it.value().toObject(), true, this));
100 else
101 qWarning("Warning: CommandMap contains command %s already. Insertion skipped.\n", it.key().toUtf8().constData());
102 }
103
104 emit commandMapChanged();
105}
106
107//=============================================================================================================
108
109void CommandManager::insert(const QString &p_sKey, const QString &p_sDescription)
110{
111 Command t_command(p_sKey, p_sDescription, false, this);
112 insert(p_sKey, t_command);
113}
114
115//=============================================================================================================
116
117void CommandManager::insert(const QString &p_sKey, const Command &p_command)
118{
119 Command t_command(p_command);
120 t_command.setParent(this);
121 m_qMapCommands.insert(p_sKey, t_command);
122 emit commandMapChanged();
123}
124
125//=============================================================================================================
126
128{
129 // If Manager is not active do not parse commands
130 if(!m_bIsActive)
131 return;
132
133 CommandParser* t_pCommandParser = static_cast<CommandParser*>(p_pSubject);
134
135 RawCommand t_rawCommand(t_pCommandParser->getRawCommand());
136 QString t_sCommandName = t_rawCommand.command();
137
138 if(!this->hasCommand(t_sCommandName))
139 return;
140
141 // check if number of parameters is right
142 if(t_rawCommand.count() >= m_qMapCommands[t_sCommandName].count())
143 {
144 m_qMapCommands[t_sCommandName].isJson() = t_rawCommand.isJson();
145
146 //Parse Parameters
147 for(quint32 i = 0; i < m_qMapCommands[t_sCommandName].count(); ++i)
148 {
149 QVariant::Type t_type = m_qMapCommands[t_sCommandName][i].type();
150
151 QVariant t_qVariantParam(t_rawCommand.pValues()[i]);
152
153 if(t_qVariantParam.canConvert(t_type) && t_qVariantParam.convert(t_type))
154 m_qMapCommands[t_sCommandName][i] = t_qVariantParam;
155 else
156 return;
157 }
158
159 m_qMapCommands[t_sCommandName].execute();
160 }
161}
162
163//=============================================================================================================
164
166{
167 return m_qMapCommands[key];
168}
169
170//=============================================================================================================
171
172const Command CommandManager::operator[] (const QString &key) const
173{
174 return m_qMapCommands[key];
175}
Declaration of the RawCommand Class.
virtual void update(UTILSLIB::Subject *p_pSubject)
bool hasCommand(const QString &p_sCommand) const
Command & operator[](const QString &key)
void insert(const QJsonDocument &p_jsonDocument)
QList< QString > & pValues()
Definition rawcommand.h:184
The Subject class provides the base class of every subject of the observer design pattern.