2 // Tizen Web Device API
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
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
9 // http://www.apache.org/licenses/LICENSE-2.0
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.
19 * @file ContactSearchEngine.h
20 * @author Kisub Song (kisubs.song@samsung.com)
25 #ifndef _PLATFORM_CONTACT_CONTACT_SEARCH_ENGINE_H_
26 #define _PLATFORM_CONTACT_CONTACT_SEARCH_ENGINE_H_
33 #include <dpl/shared_ptr.h>
34 #include <dpl/enable_shared_from_this.h>
35 #include <IFilterVisitor.h>
36 #include "IAddressBook.h"
38 #include "ContactTypes.h"
44 class ContactSearchEngine :
45 public DeviceAPI::Tizen::IFilterVisitor,
46 public DPL::EnableSharedFromThis<ContactSearchEngine>
49 ContactSearchEngine();
50 virtual ~ContactSearchEngine();
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));
58 ContactArrayPtr getContactSearchResult();
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,
68 virtual void visitAttributeRange(std::string& attrName,
69 DeviceAPI::Tizen::AnyPtr& initialValue,
70 DeviceAPI::Tizen::AnyPtr& endValue,
74 enum ContactSvcPrimitiveType
76 ContactSvcPrimitiveType_Boolean,
77 ContactSvcPrimitiveType_Int,
78 ContactSvcPrimitiveType_String
81 struct AttributeProperties
84 const unsigned int propertyContactId;
85 const unsigned int propertyId;
86 const ContactSvcPrimitiveType type;
87 const DeviceAPI::Tizen::PrimitiveType jsType;
89 typedef std::map<std::string, AttributeProperties> AttributePropertiesMap;
91 typedef std::vector<int> ContactIdArray;
92 typedef DPL::SharedPtr<ContactIdArray> ContactIdArrayPtr;
94 typedef std::set<int> ContactIdSet;
95 typedef DPL::SharedPtr<ContactIdSet> ContactIdSetPtr;
97 typedef std::vector<ContactIdSetPtr> ContactIdSetArray;
98 typedef DPL::SharedPtr<ContactIdSetArray> ContactIdSetArrayPtr;
101 static AttributePropertiesMap attributePropertiesMap;
104 bool m_isAddressBookIdSet;
106 bool m_isSortModeSet;
108 std::stack<ContactIdSetArrayPtr> m_contactIdSetArrayStack;
110 ContactIdSetPtr m_filteredContactIds;
111 ContactIdArrayPtr m_sortedContactIds;
113 DeviceAPI::Tizen::SortOrder m_sortOrder;
114 std::string m_attributeNameForSort;
117 ContactArrayPtr getAllContactsSorted(AttributeProperties& attributeProperties,
119 ContactArrayPtr getAllContacts();
120 ContactArrayPtr getContacts(ContactIdArrayPtr& ids);
121 ContactArrayPtr getContacts(ContactIdSetPtr& ids);
122 ContactPtr getContact(int id);
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,
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,
143 void getIntersection(ContactIdSetArrayPtr& idSets, ContactIdSetPtr& result);
144 void getUnion(ContactIdSetArrayPtr& idSets, ContactIdSetPtr& result);
147 typedef DPL::SharedPtr<ContactSearchEngine> ContactSearchEnginePtr;
152 #endif // _PLATFORM_CONTACT_CONTACT_SEARCH_ENGINE_H_