Fixed testRemoveContacts unit test after porting to Qt Mobility changes.
[qtcontacts-tracker:qtcontacts-tracker.git] / qcontacttrackerbackend_p.h
1 /****************************************************************************
2 **
3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
6 **
7 ** This file is part of the Qt Mobility Components.
8 **
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** No Commercial Usage
11 ** This file contains pre-release code and may not be distributed.
12 ** You may use this file in accordance with the terms and conditions
13 ** contained in the Technology Preview License Agreement accompanying
14 ** this package.
15 **
16 ** GNU Lesser General Public License Usage
17 ** Alternatively, this file may be used under the terms of the GNU Lesser
18 ** General Public License version 2.1 as published by the Free Software
19 ** Foundation and appearing in the file LICENSE.LGPL included in the
20 ** packaging of this file.  Please review the following information to
21 ** ensure the GNU Lesser General Public License version 2.1 requirements
22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23 **
24 ** In addition, as a special exception, Nokia gives you certain additional
25 ** rights.  These rights are described in the Nokia Qt LGPL Exception
26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27 **
28 ** If you have questions regarding the use of this file, please contact
29 ** Nokia at qt-info@nokia.com.
30 **
31 **
32 **
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #ifndef QCONTACTTRACKERBACKEND_P_H
43 #define QCONTACTTRACKERBACKEND_P_H
44
45 //
46 //  W A R N I N G
47 //  -------------
48 //
49 // This file is not part of the Qt API.  It exists purely as an
50 // implementation detail.  This header file may change from version to
51 // version without notice, or even be removed.
52 //
53 // We mean it.
54 //
55
56 #include <QSharedData>
57 #include <QtTracker/Tracker>
58 #include <QtTracker/ontologies/nco.h>
59 #include <QtTracker/QLive>
60
61 #include <qmobilityglobal.h>
62 #include "qtcontacts.h"
63 #include <qcontactmanagerenginefactory.h>
64
65 using namespace SopranoLive;
66 #include "qtrackercontactasyncrequest.h"
67
68 QTM_BEGIN_NAMESPACE
69 class QContactAbstractRequest;
70 class QContactChangeSet;
71 QTM_END_NAMESPACE
72
73 QTM_USE_NAMESPACE
74
75 class QContactTrackerEngineData : public QSharedData
76 {
77 public:
78     QContactTrackerEngineData()
79         : QSharedData(), m_refCount(QAtomicInt(1)),
80         m_engineName(QString("tracker")),
81         m_engineVersion(0)
82     {
83     }
84
85     QContactTrackerEngineData(const QContactTrackerEngineData& other)
86         : QSharedData(other), m_refCount(QAtomicInt(1)),
87         m_lastUsedId(other.m_lastUsedId),
88         m_definitions(other.m_definitions),
89         m_engineName(other.m_engineName),
90         m_engineVersion(other.m_engineVersion)
91     {
92     }
93
94     void init();
95
96     ~QContactTrackerEngineData() {}
97
98     QAtomicInt m_refCount;
99     mutable QContactLocalId m_lastUsedId;
100     mutable QMap<QString, QContactDetailDefinition> m_definitions;
101     mutable QMap<QContactAbstractRequest*, QTrackerContactAsyncRequest*> m_requests;
102     QString m_engineName;
103     int m_engineVersion;
104 };
105
106 class QContactTrackerEngine : public QContactManagerEngine
107 {
108 Q_OBJECT
109
110 public:
111     QContactTrackerEngine(const QString& managerName, int managerVersion, const QMap<QString, QString>& parameters);
112     QContactTrackerEngine(const QMap<QString, QString>& parameters);
113     QContactTrackerEngine(const QContactTrackerEngine& other);
114     ~QContactTrackerEngine();
115     QContactTrackerEngine& operator=(const QContactTrackerEngine& other);
116     QContactManagerEngine* clone();
117     void deref();
118
119     /* Filtering */
120     QList<QContactLocalId> contacts(const QContactFilter& filter, const QList<QContactSortOrder>& sortOrders, QContactManager::Error& error) const;
121
122     /* Contacts - Accessors and Mutators */
123     QList<QContactLocalId> contacts(const QList<QContactSortOrder>& sortOrders, QContactManager::Error& error) const;
124     QContact contact(const QContactLocalId& contactId, QContactManager::Error& error) const;
125
126     /* Save contacts - single and in batch */
127     bool saveContact( QContact* contact, QContactManager::Error& error);
128     bool saveContacts(QList<QContact>* contacts, QMap<int, QContactManager::Error>* errorMap, QContactManager::Error& error);
129
130     bool removeContact(const QContactLocalId& contactId, QContactManager::Error& error);
131     bool removeContacts(QList<QContactLocalId>* contactIds, QMap<int, QContactManager::Error>* errorMap, QContactManager::Error& error) ;
132
133     /* Definitions - Accessors and Mutators */
134     QMap<QString, QContactDetailDefinition> detailDefinitions(const QString& contactType, QContactManager::Error& error) const;
135
136     /* Asynchronous Request Support */
137     void requestDestroyed(QContactAbstractRequest* req);
138     bool startRequest(QContactAbstractRequest* req);
139     bool waitForRequestFinished(QContactAbstractRequest* req, int msecs);
140
141     /* Capabilities reporting */
142     bool hasFeature(QContactManager::ManagerFeature feature) const;
143     bool filterSupported(const QContactFilter& filter) const;
144     QList<QVariant::Type> supportedDataTypes() const;
145
146     /* Version Reporting */
147     QString managerName() const;
148     int implementationVersion() const;
149
150     /* Synthesise the display label of a contact */
151     QString synthesizeDisplayLabel(const QContact& contact, QContactManager::Error& error) const;
152
153
154 private:
155     //called from both constructors, connecting to all contact NodeList changes signals
156     void connectToSignals();
157     RDFVariable contactDetail2Rdf(const RDFVariable& rdfContact, const QString& definitionName, const QString& fieldName) const;
158     QContact contact_impl(const QContactLocalId& contactId, QContactManager::Error& error) const;
159 private:
160     QSharedDataPointer<QContactTrackerEngineData> d;
161     const QString contactArchiveFile;
162     const QString contactArchiveDir;
163     friend class ut_qtcontacts_trackerplugin;
164 };
165
166 class Q_DECL_EXPORT ContactTrackerFactory : public QObject, public QtMobility::QContactManagerEngineFactory
167 {
168     Q_OBJECT
169     Q_INTERFACES(QtMobility::QContactManagerEngineFactory)
170     public:
171         QContactManagerEngine* engine(const QMap<QString, QString>& parameters, QContactManager::Error&);
172         QString managerName() const;
173 };
174
175 #endif