2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 #include <dpl/log/log.h>
21 #include "CallHistoryFilter.h"
22 #include "CallHistoryQuery.h"
25 using namespace TizenApis::Api::Tizen;
26 using namespace TizenApis::Api::Call;
29 const std::string STR_LOG_TYPE ("log_type");
30 const std::string STR_CONTACT_ID ("contact_id");
31 const std::string STR_NUMBER ("number");
32 const std::string STR_LOG_TIME ("log_time");
33 const std::string STR_DURATION ("data1");
34 const std::string STR_VOICE_ANSWERED ("1");
35 const std::string STR_VOICE_OUTGOING ("2");
36 const std::string STR_VOICE_MISSED_UNCHECKED ("5");
37 const std::string STR_VOICE_MISSED_CHECKED ("6");
38 const std::string STR_VOICE_REJECTED ("9");
39 const std::string STR_VOICE_BLOCKED ("11");
40 const std::string STR_VIDEO_ANSWERED ("3");
41 const std::string STR_VIDEO_OUTGOING ("4");
42 const std::string STR_VIDEO_MISSED_UNCHECKED ("7");
43 const std::string STR_VIDEO_MISSED_CHECKED ("8");
44 const std::string STR_VIDEO_REJECTED ("10");
45 const std::string STR_VIDEO_BLOCKED ("12");
46 const std::string STR_LEFT_BRACKET(" (");
47 const std::string STR_RIGHT_BRACKET(")");
48 const std::string STR_AND(" AND ");
49 const std::string STR_OR(" OR ");
50 const std::string STR_GREATER_THAN (">");
51 const std::string STR_LESS_THAN ("<");
52 const std::string STR_EQUAL ("=");
53 const std::string STR_S_QUOTATION ("'");
59 CallHistoryFilter::CallHistoryFilter() : m_query("")
64 CallHistoryFilter::~CallHistoryFilter()
68 void CallHistoryFilter::visitPreComposite(FilterType& type, int depth)
70 m_query = m_query + STR_LEFT_BRACKET;
73 void CallHistoryFilter::visitInComposite(FilterType& type, int depth)
75 if(type == Api::Tizen::UNION_FILTER)
76 m_query = m_query + STR_OR;
77 else if(type == Api::Tizen::INTERSECTION_FILTER)
78 m_query = m_query + STR_AND;
81 void CallHistoryFilter::visitPostComposite(FilterType& type, int depth)
83 m_query = m_query + STR_RIGHT_BRACKET;
86 void CallHistoryFilter::visitAttribute(std::string& attrName, MatchFlag& matchFlag, Api::Tizen::AnyArrayPtr& values, int depth)
94 if (values->size() == 1) {
95 AnyPtr value = values->at(0);
96 str.append(convertAttribute(attrName, value));
97 } else if (values->size() > 1) {
98 str.append(convertAttributeArray(attrName, values));
101 m_query = m_query + str;
104 void CallHistoryFilter::visitAttributeRange(std::string& attrName, AnyPtr& initialValue, AnyPtr& endValue, int depth)
108 string initialValueStr ("");
109 string endValueStr ("");
111 if (attrName.compare("remoteParties.remoteParty") == 0) {
113 } else if (attrName.compare("remoteParties.contactId") == 0) {
114 name = STR_CONTACT_ID;
115 } else if (attrName.compare("startTime") == 0) {
117 } else if (attrName.compare("duration") == 0) {
123 if (initialValue != NULL) {
124 if(initialValue->getType() == PrimitiveType_Time) {
125 tm date = initialValue->getDateTm();
126 std::stringstream time;
127 time << mktime(&date);
128 initialValueStr = time.str();
130 initialValueStr = initialValue->toString();
134 if (endValue != NULL) {
135 if(endValue->getType() == PrimitiveType_Time) {
136 tm date = endValue->getDateTm();
137 std::stringstream time;
138 time << mktime(&date);
139 endValueStr = time.str();
142 endValueStr = endValue->toString();
146 if (initialValue != NULL && endValue == NULL) {
147 str = STR_LEFT_BRACKET + name + STR_GREATER_THAN + STR_EQUAL + STR_S_QUOTATION + initialValueStr + STR_S_QUOTATION + STR_RIGHT_BRACKET;
148 } else if (initialValue == NULL && endValue != NULL) {
149 str = STR_LEFT_BRACKET + name + STR_LESS_THAN + STR_S_QUOTATION + endValueStr + STR_S_QUOTATION + STR_RIGHT_BRACKET;
150 } else if (initialValue != NULL && endValue != NULL) {
151 str = STR_LEFT_BRACKET + name + STR_GREATER_THAN + STR_EQUAL + STR_S_QUOTATION + initialValueStr + STR_S_QUOTATION + STR_AND + name + STR_LESS_THAN + STR_S_QUOTATION + endValueStr + STR_S_QUOTATION + STR_RIGHT_BRACKET;
154 m_query = m_query + str;
157 void CallHistoryFilter::init()
160 m_query.append(" WHERE");
162 std::string CallHistoryFilter::convertAttributeArray(std::string &name, AnyArrayPtr& values)
164 std::string query("");
165 AnyArray::iterator it = values->begin();
166 query.append(STR_LEFT_BRACKET);
169 if (it != values->begin()) {
170 query.append(STR_OR);
172 query.append(convertAttribute(name, *it));
174 } while(it != values->end());
176 query.append(STR_RIGHT_BRACKET);
180 std::string CallHistoryFilter::convertAttribute(std::string &name, AnyPtr& value)
182 std::string query("");
183 if (name.compare("direction") == 0) {
184 if (value->toString().compare(STR_RECEIVED) == 0) {
185 query = STR_LEFT_BRACKET + STR_LOG_TYPE + STR_EQUAL + STR_VOICE_ANSWERED + STR_OR
186 + STR_LOG_TYPE + STR_EQUAL + STR_VIDEO_ANSWERED + STR_RIGHT_BRACKET;
187 } else if (value->toString().compare(STR_DIALED) == 0) {
188 query = STR_LEFT_BRACKET + STR_LOG_TYPE + STR_EQUAL + STR_VOICE_OUTGOING + STR_OR
189 + STR_LOG_TYPE + STR_EQUAL + STR_VIDEO_OUTGOING + STR_RIGHT_BRACKET;
190 } else if (value->toString().compare(STR_MISSED) == 0) {
191 query = STR_LEFT_BRACKET + STR_LOG_TYPE + STR_EQUAL + STR_VOICE_MISSED_CHECKED + STR_OR
192 + STR_LOG_TYPE + STR_EQUAL + STR_VIDEO_MISSED_CHECKED + STR_RIGHT_BRACKET;
193 } else if (value->toString().compare(STR_MISSED_NEW) == 0) {
194 query = STR_LEFT_BRACKET + STR_LOG_TYPE + STR_EQUAL + STR_VOICE_MISSED_UNCHECKED + STR_OR
195 + STR_LOG_TYPE + STR_EQUAL + STR_VIDEO_MISSED_UNCHECKED + STR_RIGHT_BRACKET;
196 } else if (value->toString().compare(STR_REJECTED) == 0) {
197 query = STR_LEFT_BRACKET + STR_LOG_TYPE + STR_EQUAL + STR_VOICE_REJECTED + STR_OR
198 + STR_LOG_TYPE + STR_EQUAL + STR_VIDEO_REJECTED + STR_RIGHT_BRACKET;
199 } else if (value->toString().compare(STR_BLOCKED) == 0) {
200 query = STR_LEFT_BRACKET + STR_LOG_TYPE + STR_EQUAL + STR_VOICE_BLOCKED + STR_OR
201 + STR_LOG_TYPE + STR_EQUAL + STR_VIDEO_BLOCKED + STR_RIGHT_BRACKET;
203 query = STR_LEFT_BRACKET + STR_LOG_TYPE + "=0" + STR_RIGHT_BRACKET;
205 } else if (name.compare("tags") == 0) {
206 if (value->toString().compare(STR_CALL) == 0) {
207 query = STR_LEFT_BRACKET + STR_LOG_TYPE + STR_GREATER_THAN + STR_EQUAL + STR_VOICE_ANSWERED + STR_AND
208 + STR_LOG_TYPE + STR_LESS_THAN + STR_EQUAL + STR_VIDEO_BLOCKED + STR_RIGHT_BRACKET;
209 } else if (value->toString().compare(STR_CALL_VOICE) == 0) {
210 query = STR_LEFT_BRACKET + STR_LOG_TYPE + STR_EQUAL + STR_VOICE_ANSWERED + STR_OR
211 + STR_LOG_TYPE + STR_EQUAL + STR_VOICE_OUTGOING + STR_OR
212 + STR_LOG_TYPE + STR_EQUAL + STR_VOICE_MISSED_UNCHECKED + STR_OR
213 + STR_LOG_TYPE + STR_EQUAL + STR_VOICE_MISSED_CHECKED + STR_OR
214 + STR_LOG_TYPE + STR_EQUAL + STR_VOICE_REJECTED + STR_OR
215 + STR_LOG_TYPE + STR_EQUAL + STR_VOICE_BLOCKED + STR_RIGHT_BRACKET;
216 } else if (value->toString().compare(STR_CALL_VIDEO) == 0) {
217 query = STR_LEFT_BRACKET + STR_LOG_TYPE + STR_EQUAL + STR_VIDEO_ANSWERED + STR_OR
218 + STR_LOG_TYPE + STR_EQUAL + STR_VIDEO_OUTGOING + STR_OR
219 + STR_LOG_TYPE + STR_EQUAL + STR_VIDEO_MISSED_UNCHECKED + STR_OR
220 + STR_LOG_TYPE + STR_EQUAL + STR_VIDEO_MISSED_CHECKED + STR_OR
221 + STR_LOG_TYPE + STR_EQUAL + STR_VIDEO_REJECTED + STR_OR
222 + STR_LOG_TYPE + STR_EQUAL + STR_VIDEO_BLOCKED + STR_RIGHT_BRACKET;
224 query = STR_LEFT_BRACKET + STR_LOG_TYPE + "=0" + STR_RIGHT_BRACKET;
226 } else if (name.compare("remoteParties.remoteParty") == 0) {
227 query = STR_LEFT_BRACKET + STR_NUMBER + STR_EQUAL + STR_S_QUOTATION + value->toString() + STR_S_QUOTATION + STR_RIGHT_BRACKET;
228 } else if (name.compare("remoteParties.contactId") == 0) {
229 query = STR_LEFT_BRACKET + STR_CONTACT_ID + STR_EQUAL + STR_S_QUOTATION + value->toString() + STR_S_QUOTATION + STR_RIGHT_BRACKET;
230 } else if (name.compare("startTime") == 0) {
231 std::string dateStr ("");
232 if(value->getType() == PrimitiveType_Time) {
233 tm date = value->getDateTm();
234 std::stringstream time;
235 time << mktime(&date);
236 dateStr = time.str();
240 query = STR_LEFT_BRACKET + STR_LOG_TIME + STR_EQUAL + STR_S_QUOTATION + dateStr + STR_S_QUOTATION + STR_RIGHT_BRACKET;
241 } else if (name.compare("duration") == 0) {
242 query = STR_LEFT_BRACKET + STR_DURATION + STR_EQUAL + STR_S_QUOTATION + value->toString() + STR_S_QUOTATION + STR_RIGHT_BRACKET;
248 std::string CallHistoryFilter::getResult() const