Changes: Use QString instead of QUrl for Iris
[qtcontacts-tracker:qtcontacts-tracker.git] / src / engine / engine_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 QTRACKERCONTACTENGINE_P_H
43 #define QTRACKERCONTACTENGINE_P_H
44
45 #include "displaylabelgenerator.h"
46 #include "abstractrequest.h"
47 #include "guidalgorithm.h"
48 #include "engine.h"
49
50 #include <dao/contactdetailschema.h>
51
52 #include <QtCore>
53
54 typedef QVector<DisplayLabelGenerator>                              DisplayLabelGeneratorList;
55 typedef QMap<QString, DisplayLabelGeneratorList>                    DisplayLabelGeneratorListMap;
56
57 class QctTrackerChangeListener;
58 class QctTrackerIdResolver;
59
60 class QContactTrackerEngineData : public QSharedData
61 {
62     typedef QMap<QString, QTrackerContactDetailSchema> DetailSchemaMap;
63     // Using void pointer for the key since it might point onto an already destructed object.
64     typedef QList<QTrackerAbstractRequest*> RequestList;
65     typedef QMap<QString, QString> ParameterMap;
66
67 public:
68     typedef QMap<void*, QTrackerAbstractRequest*> RequestMap;
69
70 public:
71     explicit QContactTrackerEngineData(const ParameterMap & parameters,
72                                        const QString & engineName,
73                                        int engineVersion);
74     QContactTrackerEngineData(const QContactTrackerEngineData & other);
75     ~QContactTrackerEngineData();
76
77     static ParameterMap readEnvironment();
78
79 private:
80     void parseParameters();
81     void setupDisplayNameFields();
82     void resolveTrackerIds();
83
84 public: // parameters
85     QString m_engineName;
86     int m_engineVersion;
87     int m_requestTimeout;
88     int m_trackerTimeout;
89     int m_coalescingDelay;
90     int m_concurrencyLevel;
91     int m_batchSize;
92     QString m_graphIri;
93
94     DetailSchemaMap m_detailSchemas;
95     QctGuidAlgorithm *m_guidAlgorithm;
96     QString m_syncTarget;
97
98     ParameterMap m_parameters;
99     mutable QScopedPointer<ParameterMap> m_managerParameters;
100     QContactTrackerEngine::DebugFlags m_debugFlags;
101
102 public: // caches
103     /// stores lookup table for different lists of generators for the display label, each sorted by priority
104     DisplayLabelGeneratorListMap m_displayNameGeneratorListMap;
105     mutable QList<QVariant::Type> m_supportedDataTypes;
106     bool m_mandatoryTokensFound : 1;
107     uint m_selfContactId;
108
109 public: // state
110     QScopedPointer<QctTrackerChangeListener> m_trackerChangeListener;
111     mutable RequestMap m_requests;
112     QMutex m_mutex;
113 };
114
115 /*!
116  * A helper used to exit request event loops for the the synchronous API
117  * and for the misguided users of waitForFinished facility.
118  */
119 class RequestEventLoop : public QEventLoop
120 {
121     Q_OBJECT
122
123 public slots:
124     /*!
125      * Exits the event loop when called.
126      */
127     void stateChanged(QContactAbstractRequest::State newState);
128 };
129
130 #endif // QTRACKERCONTACTENGINE_P_H