MNE-CPP  0.1.9
A Framework for Electrophysiology
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 
22 using namespace COMMUNICATIONLIB;
23 
24 //=============================================================================================================
25 // DEFINE MEMBER METHODS
26 //=============================================================================================================
27 
28 CommandManager::CommandManager(bool p_bIsActive, QObject *parent)
29 : QObject(parent)
30 , m_bIsActive(p_bIsActive)
31 {
32  init();
33 }
34 
35 //=============================================================================================================
36 
37 CommandManager::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 
50 CommandManager::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 
62 CommandManager::~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 
79 void CommandManager::init()
80 {
81 }
82 
83 //=============================================================================================================
84 //ToDo connect all commands inserted in this class by default.
85 void 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 
109 void 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 
117 void 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 
172 const Command CommandManager::operator[] (const QString &key) const
173 {
174  return m_qMapCommands[key];
175 }
Command(bool p_bIsJson=true, QObject *parent=0)
Definition: command.cpp:27
Declaration of the RawCommand Class.
The Subject class provides the base class of every subject of the observer design pattern...
Command & operator[](const QString &key)
void insert(const QJsonDocument &p_jsonDocument)
virtual void update(UTILSLIB::Subject *p_pSubject)