Update change log and spec for wrt-plugins-tizen_0.4.50
[framework/web/wrt-plugins-tizen.git] / src / Contact / ContactSearchEngine.h
1 //
2 // Tizen Web Device API
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18 /**
19  * @file        ContactSearchEngine.h
20  * @author      Kisub Song (kisubs.song@samsung.com)
21  * @version     0.1
22  * @brief
23  */
24
25 #ifndef _PLATFORM_CONTACT_CONTACT_SEARCH_ENGINE_H_
26 #define _PLATFORM_CONTACT_CONTACT_SEARCH_ENGINE_H_
27
28 #include <string>
29 #include <map>
30 #include <set>
31 #include <vector>
32 #include <stack>
33 #include <dpl/shared_ptr.h>
34 #include <dpl/enable_shared_from_this.h>
35 #include <IFilterVisitor.h>
36 #include "IAddressBook.h"
37 #include "IContact.h"
38 #include "ContactTypes.h"
39 #include <contacts.h>
40
41 namespace DeviceAPI {
42 namespace Contact {
43
44 class ContactSearchEngine :
45         public DeviceAPI::Tizen::IFilterVisitor,
46         public DPL::EnableSharedFromThis<ContactSearchEngine>
47 {
48 public:
49         ContactSearchEngine();
50         virtual ~ContactSearchEngine();
51
52         // setting search options.
53         void setAddressBookId(int id);
54         void setCondition(DeviceAPI::Tizen::FilterPtr filter);
55         void setSortMode(DeviceAPI::Tizen::SortModePtr attr = DeviceAPI::Tizen::SortModePtr(NULL));
56
57         // getting results
58         ContactArrayPtr getContactSearchResult();
59
60         // inherited from IFilterVisitor
61         virtual void visitPreComposite(DeviceAPI::Tizen::FilterType& type, int depth);
62         virtual void visitInComposite(DeviceAPI::Tizen::FilterType& type, int depth);
63         virtual void visitPostComposite(DeviceAPI::Tizen::FilterType& type, int depth);
64         virtual void visitAttribute(std::string& attrName,
65                         DeviceAPI::Tizen::MatchFlag& matchFlag,
66                         DeviceAPI::Tizen::AnyPtr& matchValue,
67                         int depth);
68         virtual void visitAttributeRange(std::string& attrName,
69                         DeviceAPI::Tizen::AnyPtr& initialValue,
70                         DeviceAPI::Tizen::AnyPtr& endValue,
71                         int depth);
72
73 public:
74         enum ContactSvcPrimitiveType
75         {
76                 ContactSvcPrimitiveType_Boolean,
77                 ContactSvcPrimitiveType_Int,
78                 ContactSvcPrimitiveType_String
79         };
80
81         struct AttributeProperties
82         {
83                 const char* viewUri;
84                 const unsigned int propertyContactId;
85                 const unsigned int propertyId;
86                 const ContactSvcPrimitiveType type;
87                 const DeviceAPI::Tizen::PrimitiveType jsType;
88         };
89         typedef std::map<std::string, AttributeProperties> AttributePropertiesMap;
90
91         typedef std::vector<int> ContactIdArray;
92         typedef DPL::SharedPtr<ContactIdArray> ContactIdArrayPtr;
93
94         typedef std::set<int> ContactIdSet;
95         typedef DPL::SharedPtr<ContactIdSet> ContactIdSetPtr;
96
97         typedef std::vector<ContactIdSetPtr> ContactIdSetArray;
98         typedef DPL::SharedPtr<ContactIdSetArray> ContactIdSetArrayPtr;
99
100 private:
101         static AttributePropertiesMap attributePropertiesMap;
102
103         int m_addressBookId;
104         bool m_isAddressBookIdSet;
105         bool m_isFilterSet;
106         bool m_isSortModeSet;
107
108         std::stack<ContactIdSetArrayPtr> m_contactIdSetArrayStack;
109         // NULL means ALL
110         ContactIdSetPtr m_filteredContactIds;
111         ContactIdArrayPtr m_sortedContactIds;
112
113         DeviceAPI::Tizen::SortOrder m_sortOrder;
114         std::string m_attributeNameForSort;
115
116 private:
117         ContactArrayPtr getAllContactsSorted(AttributeProperties& attributeProperties,
118                         bool is_ascending);
119         ContactArrayPtr getAllContacts();
120         ContactArrayPtr getContacts(ContactIdArrayPtr& ids);
121         ContactArrayPtr getContacts(ContactIdSetPtr& ids);
122         ContactPtr getContact(int id);
123
124         void queryAttributeDate(std::string& attrName, AttributeProperties& attributeProperties, ContactIdSetPtr& result,
125                 contacts_match_int_flag_e match, int match_value);
126         void queryAttributeBool(AttributeProperties& attributeProperties, ContactIdSetPtr& result,
127                         bool match_value);
128         void queryAttributeInt(AttributeProperties& attributeProperties, ContactIdSetPtr& result,
129                         contacts_match_int_flag_e match, int match_value);
130         void queryAttributeString(AttributeProperties& attributeProperties, ContactIdSetPtr& result,
131                         contacts_match_str_flag_e match, const char* match_value);
132         void queryAttributeRangeBool(AttributeProperties& attributeProperties, ContactIdSetPtr& result,
133                         bool initial_value_is_set, bool initial_value, bool end_value_is_set, bool end_value);
134         void queryAttributeRangeInt(AttributeProperties& attributeProperties, ContactIdSetPtr& result,
135                         bool initial_value_is_set, int initial_value, bool end_value_is_set, int end_value);
136         void queryAttributeRangeString(AttributeProperties& attributeProperties, ContactIdSetPtr& result,
137                         const char* initial_value, const char* end_value);
138         void sortContacts(AttributeProperties& attributeProperties, ContactIdArrayPtr& result,
139                         bool is_ascending, ContactIdSetPtr& ids);
140         void sortContacts(AttributeProperties& attributeProperties, ContactIdArrayPtr& result,
141                         bool is_ascending);
142
143         void getIntersection(ContactIdSetArrayPtr& idSets, ContactIdSetPtr& result);
144         void getUnion(ContactIdSetArrayPtr& idSets, ContactIdSetPtr& result);
145 };
146
147 typedef DPL::SharedPtr<ContactSearchEngine> ContactSearchEnginePtr;
148
149 } // Contact
150 } // DeviceAPI
151
152 #endif // _PLATFORM_CONTACT_CONTACT_SEARCH_ENGINE_H_