Make unit tests build again
[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 <QContactManagerEngine>
62 #include <QContactManagerEngineFactory>
63
64 using namespace SopranoLive;
65 #include "qtrackercontactasyncrequest.h"
66
67 QTM_BEGIN_NAMESPACE
68 class QContactAbstractRequest;
69 class QContactChangeSet;
70 QTM_END_NAMESPACE
71
72 QTM_USE_NAMESPACE
73
74 class QContactTrackerEngineData : public QSharedData
75 {
76 public:
77     QContactTrackerEngineData()
78         : QSharedData(), m_refCount(QAtomicInt(1)),
79         m_engineName(QString("tracker")),
80         m_engineVersion(0)
81     {
82     }
83
84     QContactTrackerEngineData(const QContactTrackerEngineData& other)
85         : QSharedData(other), m_refCount(QAtomicInt(1)),
86         m_lastUsedId(other.m_lastUsedId),
87         m_definitions(other.m_definitions),
88         m_engineName(other.m_engineName),
89         m_engineVersion(other.m_engineVersion)
90     {
91     }
92
93     void init();
94
95     ~QContactTrackerEngineData() {}
96
97     QAtomicInt m_refCount;
98     mutable QContactLocalId m_lastUsedId;
99     mutable QMap<QString, QContactDetailDefinition> m_definitions;
100     mutable QMap<QContactAbstractRequest*, QTrackerContactAsyncRequest*> m_requests;
101     QString m_engineName;
102     int m_engineVersion;
103 };
104
105 class QContactTrackerEngine : public QContactManagerEngine
106 {
107 Q_OBJECT
108
109 public:
110     QContactTrackerEngine(const QString& managerName, int managerVersion, const QMap<QString, QString>& parameters);
111     QContactTrackerEngine(const QMap<QString, QString>& parameters);
112     QContactTrackerEngine(const QContactTrackerEngine& other);
113     ~QContactTrackerEngine();
114     QContactTrackerEngine& operator=(const QContactTrackerEngine& other);
115     QContactManagerEngine* clone();
116     void deref();
117
118     // sync methods, wrapping async methods & waitForFinished
119     QList<QContactLocalId> contactIds(const QList<QContactSortOrder>& sortOrders, QContactManager::Error& error) const;
120     QList<QContactLocalId> contactIds(const QContactFilter& filter, const QList<QContactSortOrder>& sortOrders, QContactManager::Error& error) const;
121     QList<QContact> contacts(const QList<QContactSortOrder>& sortOrders, const QStringList& definitionRestrictions, QContactManager::Error& error) const;
122     QList<QContact> contacts(const QContactFilter& filter, const QList<QContactSortOrder>& sortOrders, const QStringList& definitionRestrictions, QContactManager::Error& error) const;
123     QContact contact(const QContactLocalId& contactId, const QStringList& definitionRestrictions, QContactManager::Error& error) const;
124
125     /* Save contacts - single and in batch */
126     bool saveContact( QContact* contact, QContactManager::Error& error);
127     bool saveContacts(QList<QContact>* contacts, QMap<int, QContactManager::Error>* errorMap, QContactManager::Error& error);
128
129     bool removeContact(const QContactLocalId& contactId, QContactManager::Error& error);
130     bool removeContacts(QList<QContactLocalId>* contactIds, QMap<int, QContactManager::Error>* errorMap, QContactManager::Error& error) ;
131
132     /* Definitions - Accessors and Mutators */
133     QMap<QString, QContactDetailDefinition> detailDefinitions(const QString& contactType, QContactManager::Error& error) const;
134
135     QContactLocalId selfContactId(QContactManager::Error& error) const;
136
137     /* Asynchronous Request Support */
138     void requestDestroyed(QContactAbstractRequest* req);
139     bool startRequest(QContactAbstractRequest* req);
140     bool waitForRequestFinished(QContactAbstractRequest* req, int msecs);
141
142     /* Capabilities reporting */
143     bool hasFeature(QContactManager::ManagerFeature feature, const QString& contactType) const;
144
145     bool isFilterSupported(const QContactFilter& filter) const;
146     QList<QVariant::Type> supportedDataTypes() const;
147
148     /* Version Reporting */
149     QString managerName() const;
150     int managerVersion() const;
151
152     /* Synthesise the display label of a contact */
153     QString synthesizedDisplayLabel(const QContact& contact, QContactManager::Error& error) const;
154
155
156 private:
157     //called from both constructors, connecting to all contact NodeList changes signals
158     void connectToSignals();
159     RDFVariable contactDetail2Rdf(const RDFVariable& rdfContact, const QString& definitionName, const QString& fieldName) const;
160     QContact contact_impl(const QContactLocalId& contactId, const QStringList& definitionRestrictions, QContactManager::Error& error) const;
161 private:
162     QSharedDataPointer<QContactTrackerEngineData> d;
163     const QString contactArchiveFile;
164     const QString contactArchiveDir;
165     friend class ut_qtcontacts_trackerplugin;
166 };
167
168 class Q_DECL_EXPORT ContactTrackerFactory : public QObject, public QtMobility::QContactManagerEngineFactory
169 {
170     Q_OBJECT
171     Q_INTERFACES(QtMobility::QContactManagerEngineFactory)
172     public:
173         QContactManagerEngine* engine(const QMap<QString, QString>& parameters, QContactManager::Error&);
174         QString managerName() const;
175 };
176
177 #endif