merge wrt-plugins-tizen_0.2.0-3
[platform/framework/web/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/IContact.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 setCondition(std::string contactId);
58         void setAttributeOfInterest(TizenApis::Api::Contact::StringArrayPtr attr = TizenApis::Api::Contact::StringArrayPtr(NULL));
59         void setSortMode(TizenApis::Api::Tizen::SortModePtr attr = TizenApis::Api::Tizen::SortModePtr(NULL));
60
61         // getting results
62         TizenApis::Api::Contact::ContactArrayPtr getContactSearchResult();
63
64         // inherited from IFilterVisitor
65         virtual void visitPreComposite(TizenApis::Api::Tizen::FilterType& type, int depth);
66         virtual void visitInComposite(TizenApis::Api::Tizen::FilterType& type, int depth);
67         virtual void visitPostComposite(TizenApis::Api::Tizen::FilterType& type, int depth);
68         virtual void visitAttribute(std::string& attrName,
69                         TizenApis::Api::Tizen::MatchFlag& matchFlag,
70                         TizenApis::Api::Tizen::AnyPtr& matchValue,
71                         int depth);
72         virtual void visitAttributeRange(std::string& attrName,
73                         TizenApis::Api::Tizen::AnyPtr& initialValue,
74                         TizenApis::Api::Tizen::AnyPtr& endValue,
75                         int depth);
76
77 private:
78         static std::map<std::string, int> attrEnumMap;
79
80         ADVANCED_HANDLE m_contact_query_service;
81         TizenApis::Api::Contact::StringArrayPtr m_attributesOfInterest;
82
83         void visitAttributeEach(contact_attribute_e attr, TizenApis::Api::Tizen::AnyPtr& value, condition_e flag);
84         void visitAttributeID(TizenApis::Api::Tizen::AnyArrayPtr &ids);
85
86         contact_attribute_e getPlatformAttr(std::string attrName);
87 #if 0
88         void setPlatformAttrValue(TizenApis::Api::Contact::Contact& contact, contact_attribute_e attr, char* val);
89 #endif
90
91         void setName(TizenApis::Api::Contact::ContactPtr& contact, char *prefix, char *firstName, char *middleName, char *lastName, char *phoneticName, char *displayName);
92         void setPhoneNumber(TizenApis::Api::Contact::ContactPtr& contact, char *number, char *type);
93         void setEmailAddresses(TizenApis::Api::Contact::ContactPtr& contact, char *email, char *type);
94         void setUrlAddresses(TizenApis::Api::Contact::ContactPtr& contact, char *url, char *type);
95         void setAddresses(TizenApis::Api::Contact::ContactPtr& contact, char *country, char *region, char* city, char *county, char *street, char *postal_code, char *additional);
96         void setEvent(TizenApis::Api::Contact::ContactPtr& contact, char *date, char *type);
97         void setOrganization(TizenApis::Api::Contact::ContactPtr& contact, char* org_name, char* org_dept, char* org_title, char* org_role);
98
99         // utility functions
100         void tokenize(const std::string& str, std::vector<std::string>& tokens, const std::string& delimiters = " ");
101         bool toBool(char* val);
102         std::tm toDateTm(char* arg);
103         std::string toDateDbStr(const std::tm &date) const;
104         std::tm toDateTmFromDateDbStr(const char* arg) const;
105 };
106
107 typedef DPL::SharedPtr<ContactSearchEngine> ContactSearchEnginePtr;
108
109 } // Contact
110 } // Platform
111 } // TizenApis
112
113 #endif // _PLATFORM_CONTACT_CONTACT_SEARCH_ENGINE_H_