Beta merge 2
[profile/ivi/wrt-plugins-tizen.git] / src / platform / Tizen / Contact / ContactSearchEngine.h
1 /*
2  * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.0 (the License);
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an AS IS BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 /**
18  * @file        ContactSearchEngine.h
19  * @author      Kisub Song (kisubs.song@samsung.com)
20  * @version     0.1
21  * @brief
22  */
23
24 #ifndef _PLATFORM_CONTACT_CONTACT_SEARCH_ENGINE_H_
25 #define _PLATFORM_CONTACT_CONTACT_SEARCH_ENGINE_H_
26
27 #include <string>
28 #include <dpl/shared_ptr.h>
29 #include <dpl/enable_shared_from_this.h>
30 #include <map>
31 #include <API/Filter/IFilterVisitor.h>
32 #include <API/Contact/IAddressBook.h>
33 #include <API/Contact/Contact.h>
34 #include <API/Contact/ContactTypes.h>
35 #include "query-svc/query-service.h"
36
37 namespace TizenApis {
38 namespace Platform {
39 namespace Contact {
40
41 class ContactSearchEngine :
42         public TizenApis::Api::Tizen::IFilterVisitor,
43         public DPL::EnableSharedFromThis<ContactSearchEngine>
44 {
45 public:
46         enum ContactQueryType
47         {
48                 PERSON_QUERY,
49                 CONTACT_QUERY,
50         };
51
52         ContactSearchEngine(ContactQueryType);
53         virtual ~ContactSearchEngine();
54
55         // setting search options.
56         void setCondition(TizenApis::Api::Tizen::FilterPtr filter);
57         void setAttributeOfInterest(TizenApis::Api::Contact::StringArrayPtr attr = TizenApis::Api::Contact::StringArrayPtr(NULL));
58         void setSortMode(TizenApis::Api::Tizen::SortModePtr attr = TizenApis::Api::Tizen::SortModePtr(NULL));
59
60         // getting results
61         TizenApis::Api::Contact::ContactArrayPtr getContactSearchResult();
62
63         // inherited from IFilterVisitor
64         virtual void visitPreComposite(TizenApis::Api::Tizen::FilterType& type, int depth);
65         virtual void visitInComposite(TizenApis::Api::Tizen::FilterType& type, int depth);
66         virtual void visitPostComposite(TizenApis::Api::Tizen::FilterType& type, int depth);
67         virtual void visitAttribute(std::string& attrName,
68                         TizenApis::Api::Tizen::MatchFlag& matchFlag,
69                         TizenApis::Api::Tizen::AnyArrayPtr& matchValues,
70                         int depth);
71         virtual void visitAttributeRange(std::string& attrName,
72                         TizenApis::Api::Tizen::AnyPtr& initialValue,
73                         TizenApis::Api::Tizen::AnyPtr& endValue,
74                         int depth);
75
76 private:
77         static std::map<std::string, int> attrEnumMap;
78
79         ADVANCED_HANDLE m_contact_query_service;
80         TizenApis::Api::Contact::StringArrayPtr m_attributesOfInterest;
81
82         void visitAttributeEach(contact_attribute_e attr, TizenApis::Api::Tizen::AnyPtr& value, condition_e flag);
83         void visitAttributeID(TizenApis::Api::Tizen::AnyArrayPtr &ids);
84
85         contact_attribute_e getPlatformAttr(std::string attrName);
86 #if 0
87         void setPlatformAttrValue(TizenApis::Api::Contact::Contact& contact, contact_attribute_e attr, char* val);
88 #endif
89
90         void setPhoneNumber(TizenApis::Api::Contact::ContactPtr& contact, char *number, char *type);
91         void setEmailAddresses(TizenApis::Api::Contact::ContactPtr& contact, char *email, char *type);
92         void setUrlAddresses(TizenApis::Api::Contact::ContactPtr& contact, char *url, char *type);
93         void setAddresses(TizenApis::Api::Contact::ContactPtr& contact, char *country, char *region, char* city, char *county, char *street, char *postal_code, char *additional);
94         void setEvent(TizenApis::Api::Contact::ContactPtr& contact, char *date, char *type);
95         void setOrganization(TizenApis::Api::Contact::ContactPtr& contact, char* org_name, char* org_dept, char* org_title, char* org_role);
96
97         // utility functions
98         void tokenize(const std::string& str, std::vector<std::string>& tokens, const std::string& delimiters = " ");
99         bool toBool(char* val);
100         std::tm toDateTm(char* arg);
101         std::string toDateDbStr(const std::tm &date) const;
102         std::tm toDateTmFromDateDbStr(const char* arg) const;
103 };
104
105 typedef DPL::SharedPtr<ContactSearchEngine> ContactSearchEnginePtr;
106
107 } // Contact
108 } // Platform
109 } // TizenApis
110
111 #endif // _PLATFORM_CONTACT_CONTACT_SEARCH_ENGINE_H_