Refactor: Added general helper function to find a subnode.
[qtcontacts-tracker:qtcontacts-tracker.git] / qcontacttrackerbackend_p.h
1 /* * This file is part of qtcontacts-tracker *
2  * Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
3  * Contact: Aleksandar Stojiljkovic <aleksandar.stojiljkovic@nokia.com>
4  * This software, including documentation, is protected by copyright controlled by
5  * Nokia Corporation. All rights are reserved. Copying, including reproducing, storing,
6  * adapting or translating, any or all of this material requires the prior written consent
7  * of Nokia Corporation. This material also contains confidential information which may
8  * not be disclosed to others without the prior written consent of Nokia.
9  */
10
11 #ifndef QCONTACTTRACKERBACKEND_P_H
12 #define QCONTACTTRACKERBACKEND_P_H
13
14 //
15 //  W A R N I N G
16 //  -------------
17 //
18 // This file is not part of the Qt API.  It exists purely as an
19 // implementation detail.  This header file may change from version to
20 // version without notice, or even be removed.
21 //
22 // We mean it.
23 //
24
25 #include <QSharedData>
26 #include <QtTracker/Tracker>
27 #include <QtTracker/ontologies/nco.h>
28
29 using namespace SopranoLive;
30
31 #include "qcontact.h"
32 #include "qcontactname.h"
33 #include "qcontactphonenumber.h"
34 #include "qcontactmanager.h"
35 #include "qcontactmanager_p.h"
36
37 namespace ContactContext {
38     typedef enum Location {
39         Unknown = 0,
40         Home,
41         Work
42     };
43 }
44
45 class QContactTrackerEngineData : public QSharedData
46 {
47 public:
48     QContactTrackerEngineData()
49         : QSharedData(), m_refCount(QAtomicInt(1))
50     {
51     }
52
53     QContactTrackerEngineData(const QContactTrackerEngineData& other)
54         : QSharedData(other), m_refCount(QAtomicInt(1)),
55         m_lastUsedId(other.m_lastUsedId),
56         m_definitions(other.m_definitions)
57     {
58     }
59
60     ~QContactTrackerEngineData() {}
61
62     QAtomicInt m_refCount;
63     mutable QUniqueId m_lastUsedId;
64     mutable QMap<QString, QContactDetailDefinition> m_definitions;
65
66     template <class T>
67     Live<T> nodeByClasstype(QList<Live<nco::ContactMedium> > contactMediums) const;
68
69     Live<nco::Contact> getContactByContext(const QContactDetail& det, const Live<nco::PersonContact>& ncoContact);
70     ContactContext::Location locationContext(const QContactDetail& det) const;
71 };
72
73 class QTCONTACTS_EXPORT QContactTrackerEngine : public QContactManagerEngine
74 {
75
76
77
78 public:
79     QContactTrackerEngine(const QMap<QString, QString>& parameters);
80     QContactTrackerEngine(const QContactTrackerEngine& other);
81     ~QContactTrackerEngine();
82     QContactTrackerEngine& operator=(const QContactTrackerEngine& other);
83     QContactManagerEngine* clone();
84     void deref();
85
86     /* Contacts - Accessors and Mutators */
87     QList<QUniqueId> contacts() const;
88     QList<QUniqueId> contactsWithDetail(const QString& definitionId, const QVariant& value) const;
89     bool saveContact(QContact* contact, bool batch, QContactManager::Error& error);
90     QContact contact(const QUniqueId& contactId, QContactManager::Error& error) const;
91     bool removeContact(const QUniqueId& contactId, bool batch = false);
92     QList<QContactManager::Error> saveContacts(QList<QContact>* contacts, QContactManager::Error& error);
93     QList<QContactManager::Error> removeContacts(QList<QUniqueId>* contactIds);
94
95     /* Groups - Accessors and Mutators */
96     QList<QUniqueId> groups() const;
97     QContactGroup group(const QUniqueId& groupId) const;
98     bool saveGroup(QContactGroup* group);
99     bool removeGroup(const QUniqueId& groupId);
100
101     /* Definitions - Accessors and Mutators */
102     QMap<QString, QContactDetailDefinition> detailDefinitions(QContactManager::Error& error) const;
103     QContactDetailDefinition detailDefinition(const QString& definitionId, QContactManager::Error& error) const;
104     bool saveDetailDefinition(const QContactDetailDefinition& def, QContactManager::Error& error);
105     bool removeDetailDefinition(const QContactDetailDefinition& def, QContactManager::Error& error);
106
107     /* Capabilities reporting */
108     QStringList capabilities() const;
109     QStringList fastFilterableDefinitions() const;
110     QList<QVariant::Type> supportedDataTypes() const;
111
112 private:
113     QSharedDataPointer<QContactTrackerEngineData> d;
114 };
115
116 class Q_DECL_EXPORT ContactTrackerFactory : public QObject, public QContactManagerEngineFactory
117 {
118     Q_OBJECT
119     Q_INTERFACES(QContactManagerEngineFactory)
120     public:
121         QContactManagerEngine* engine(const QMap<QString, QString>& parameters, QContactManager::Error&);
122         QString managerId() const;
123 };
124
125 #endif