forked from espakm/qRestAPI
-
Notifications
You must be signed in to change notification settings - Fork 0
/
qRestResult.h
116 lines (89 loc) · 2.81 KB
/
qRestResult.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/*==============================================================================
Library: qRestAPI
Copyright (c) 2010 Kitware Inc.
See Doc/copyright/copyright.txt
or http://www.slicer.org/copyright/copyright.txt for details.
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
This file was originally developed by Jean-Christophe Fillion-Robin, Kitware Inc.
and was partially funded by NIH grant 3P41RR013218-12S1
==============================================================================*/
#ifndef __qRestResult_h
#define __qRestResult_h
// qRestAPI includes
#include "qRestAPI.h"
class QIODevice;
// --------------------------------------------------------------------------
class qRestResult : public QObject
{
Q_OBJECT
friend class qRestAPI;
friend class qRestAPIPrivate;
QUuid QueryId;
QList<QVariantMap> Result;
QString Error;
bool done;
QIODevice* ioDevice;
public:
qRestResult(const QUuid& queryId, QObject* parent = 0);
virtual ~qRestResult();
const QUuid& queryId() const;
void waitForDone();
const QList<QVariantMap>& results() const;
const QVariantMap result() const;
const QString& error() const;
template <class Q>
QList<Q*> results() const;
template <class Q>
Q* result() const;
public slots:
void setResult();
void setResult(const QList<QVariantMap>& result);
void setError(const QString& error);
void downloadReadyRead();
void downloadFinished();
void uploadReadyWrite();
void uploadFinished();
signals:
void ready();
private:
static QVariantMap qObjectToPropertyMap(QObject* object);
template <class Q>
static Q* propertyMapToQObject(QVariantMap propertyMap);
};
// --------------------------------------------------------------------------
template <class Q>
Q* qRestResult::result() const
{
QVariantMap propertyMap = this->Result[0];
Q* object = qRestResult::propertyMapToQObject<Q>(propertyMap);
return object;
}
// --------------------------------------------------------------------------
template <class Q>
QList<Q*> qRestResult::results() const
{
QList<Q*> results;
foreach (QVariantMap propertyMap, this->Result)
{
results.push_back(propertyMapToQObject<Q>(propertyMap));
}
return results;
}
// --------------------------------------------------------------------------
template <class Q>
Q* qRestResult::propertyMapToQObject(QVariantMap propertyMap)
{
Q* object = new Q();
QMapIterator<QString, QVariant> it(propertyMap);
while (it.hasNext())
{
it.next();
object->setProperty(it.key().toAscii().data(), it.value());
}
return object;
}
#endif