Changes: Drop usage of emitResultLater
[qtcontacts-tracker:qtcontacts-tracker.git] / src / engine / abstractrequest.h
1 /** This file is part of QtContacts tracker storage plugin
2  **
3  ** Copyright (c) 2010-2011 Nokia Corporation and/or its subsidiary(-ies).
4  **
5  ** Contact:  Nokia Corporation (info@qt.nokia.com)
6  **
7  ** GNU Lesser General Public License Usage
8  ** This file may be used under the terms of the GNU Lesser General Public License
9  ** version 2.1 as published by the Free Software Foundation and appearing in the
10  ** file LICENSE.LGPL included in the packaging of this file.  Please review the
11  ** following information to ensure the GNU Lesser General Public License version
12  ** 2.1 requirements will be met:
13  ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
14  **
15  ** In addition, as a special exception, Nokia gives you certain additional rights.
16  ** These rights are described in the Nokia Qt LGPL Exception version 1.1, included
17  ** in the file LGPL_EXCEPTION.txt in this package.
18  **
19  ** Other Usage
20  ** Alternatively, this file may be used in accordance with the terms and
21  ** conditions contained in a signed written agreement between you and Nokia.
22  **/
23
24 #ifndef QTRACKERABSTRACTREQUEST_H_
25 #define QTRACKERABSTRACTREQUEST_H_
26
27 #include <qtcontacts.h>
28
29 #define QTC_NO_GLOBAL_LOGGER 1
30 #include <lib/logger.h>
31 #undef QTC_NO_GLOBAL_LOGGER
32
33 #include <dao/sparqlconnectionmanager.h>
34 #include <QtSparql>
35
36 QTM_USE_NAMESPACE
37
38 ////////////////////////////////////////////////////////////////////////////////////////////////////
39
40 class QContactTrackerEngine;
41
42 ////////////////////////////////////////////////////////////////////////////////////////////////////
43
44 class QTrackerAbstractRequest : public QObject
45 {
46     Q_DISABLE_COPY(QTrackerAbstractRequest)
47     Q_OBJECT
48
49 public: // constants
50     static const QSparqlQueryOptions AsyncQueryOptions;
51     static const QSparqlQueryOptions SyncQueryOptions;
52     static const QSparqlQueryOptions SyncBatchQueryOptions;
53
54 protected: // typedefs
55     typedef QMap<int, QContactManager::Error> ErrorMap;
56
57 protected: // constructors
58     QTrackerAbstractRequest(QContactTrackerEngine *engine, QObject *parent = 0);
59
60 public: // destructor
61     virtual ~QTrackerAbstractRequest();
62
63 public: // attributes
64     const QContactTrackerEngine * engine() const { return m_engine; }
65     QContactTrackerEngine * engine() { return m_engine; }
66
67 public: // abstract API which must be implemented
68     virtual void run() = 0;
69
70 protected: // abstract API which must be implemented
71     virtual void updateRequest(QContactManager::Error error) = 0;
72
73 protected slots:
74     virtual void emitResult();
75
76 public: // overriddable methods
77     /**
78      * Returns \c true if cancel was successful, \c false if not.
79      */
80     virtual bool cancel();
81
82 protected: // overriddable methods
83     virtual bool handleQuerySuccess(QSparqlResult */*result*/) { return true; }
84     virtual bool handleQueryError(QSparqlResult */*result*/, QContactManager::Error /*error*/) { return true; }
85
86 protected: // internal attributes
87     QContactManager::Error lastError() const { return m_lastError; }
88     void setLastError(QContactManager::Error error) { m_lastError = error; }
89     const QctLogger & qctLogger() const { return m_logger; }
90     bool canceled() const;
91     bool canBeCanceled() const;
92
93 protected: // internal methods
94     /**
95      * Run a QSparqlQuery
96      */
97     QSparqlResult * runQuery(const QSparqlQuery &query,
98                              const QSparqlQueryOptions &options = AsyncQueryOptions,
99                              QSparqlConnection &connection = QctSparqlConnectionManager::defaultConnection(),
100                              const char *slot = SLOT(onSparqlQueryFinished()));
101
102     /**
103       * Logs error message and reports requested error code from event loop
104       */
105     void reportError(const QString &message, QContactManager::Error error = QContactManager::UnspecifiedError);
106     void reportError(const QList<QSparqlError> &error, const QString &details = QString());
107     void reportError(const QSparqlError &error, const QString &details = QString());
108
109     /**
110      * Reports weither the request can be canceled.
111      * To be used if actions are started which cannot be reverted.
112      */
113     void setCancelable(bool cancelable = true);
114     bool cancelable() const;
115
116     static QContactManager::Error translateError(const QSparqlError &error);
117
118 private slots: //slots
119     void onSparqlQueryFinished();
120
121 private: // fields
122     QContactTrackerEngine *const m_engine;
123     QctLogger m_logger;
124
125     QContactManager::Error m_lastError;
126
127     bool m_canceled : 1;
128     bool m_cancelable : 1;
129 };
130
131 #endif /* QTRACKERABSTRACTREQUEST_H_ */