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.
19 * @file AccountWrapper.cpp
20 * @author Jihwa Park (jh7979.park@samsung.com)
28 #include <dpl/log/log.h>
29 #include <Commons/Exception.h>
30 #include "AccountWrapper.h"
31 #include "AccountService.h"
36 using namespace TizenApis::Api::Account;
37 using namespace WrtDeviceApis::Commons;
38 //using namespace WrtDeviceApis::CommonsJavaScript;
42 #define _QUERY_DB_NAME "/opt/dbspace/.test-accounts.db"
43 #define _QUERY_SQL_STRING_LEN 4096 //short sql string length
44 #define _USER_ACCOUNT_TABLE_NAME "user_account"
45 #define _SERVICES_TABLE_NAME "service"
46 #define _SERVICETYPE_TABLE_NAME "service_type"
47 #define _PROVIDER_LIST_TABLE_NAME "provider_list"
48 #define _TAGS_MIME_TABLE_NAME "tags_mime"
49 #define _RELATION_TABLE_NAME "relation"
50 #define _REL_PROVIDER_TABLE_NAME "provider_to_svctype"
52 static sqlite3 *test_hDBCt;
53 typedef sqlite3_stmt* stmt;
55 #define __USER_ACCOUNT_SCHEMA "create table %s \n"\
57 "user_id INTEGER PRIMARY KEY AUTOINCREMENT, "\
62 "credential_id REAL, "\
69 #define __SERVICE_SCHEMA "create table %s \n"\
71 "_svc_id INTEGER PRIMARY KEY AUTOINCREMENT, "\
73 "service_name TEXT, "\
74 "application_id TEXT, "\
75 "display_name TEXT, "\
77 "serviceType_id TEXT, "\
80 "enable INTEGER DEFAULT 0"\
83 #define __SERVICETYPE_SCHEMA "create table %s \n"\
85 "type_id INTEGER PRIMARY KEY AUTOINCREMENT, "\
86 "serviceType_id TEXT, "\
87 "display_name TEXT, "\
91 #define __TAGS_MIMETYPE_SCHEMA "create table %s \n"\
93 "tags_id INTEGER PRIMARY KEY AUTOINCREMENT, "\
97 #define __RELATION_SCHEMA "create table %s \n"\
99 "relation_id INTEGER PRIMARY KEY AUTOINCREMENT, "\
106 #define __REL_PROVIDER_SCHEMA "create table %s \n"\
108 "_id INTEGER PRIMARY KEY AUTOINCREMENT, "\
109 "_list_id INTEGER, "\
113 #define __PROVIDER_LIST_SCHEMA "create table %s \n"\
115 "_list_id INTEGER PRIMARY KEY AUTOINCREMENT, "\
116 "provider_id TEXT, "\
117 "display_name TEXT, "\
121 stmt __query_prepare(char *query)
126 printf("!! query : %s \n", query);
128 rc = sqlite3_prepare_v2(test_hDBCt, query, strlen(query), &pStmt, NULL);
138 int _query_exec(char *query)
141 char* pszErrorMsg = NULL;
143 rc = sqlite3_exec(test_hDBCt, query, NULL, NULL, &pszErrorMsg);
146 sqlite3_free(pszErrorMsg);
153 _create_all_tables(void)
157 char query[_QUERY_SQL_STRING_LEN + 1] = {0, };
161 memset(query, 0, sizeof(query));
162 snprintf(query, sizeof(query) - 1, __USER_ACCOUNT_SCHEMA, _USER_ACCOUNT_TABLE_NAME);
163 rc = _query_exec(query);
165 memset(query, 0, sizeof(query));
166 snprintf(query, sizeof(query) - 1, __SERVICE_SCHEMA, _SERVICES_TABLE_NAME);
167 rc = _query_exec(query);
169 memset(query, 0, sizeof(query));
170 snprintf(query, sizeof(query) - 1, __SERVICETYPE_SCHEMA, _SERVICETYPE_TABLE_NAME);
171 rc = _query_exec(query);
173 memset(query, 0, sizeof(query));
174 snprintf(query, sizeof(query) - 1, __TAGS_MIMETYPE_SCHEMA, _TAGS_MIME_TABLE_NAME);
175 rc = _query_exec(query);
177 memset(query, 0, sizeof(query));
178 snprintf(query, sizeof(query) - 1, __RELATION_SCHEMA, _RELATION_TABLE_NAME);
179 rc = _query_exec(query);
181 memset(query, 0, sizeof(query));
182 snprintf(query, sizeof(query) - 1, __REL_PROVIDER_SCHEMA, _REL_PROVIDER_TABLE_NAME);
183 rc = _query_exec(query);
185 memset(query, 0, sizeof(query));
186 snprintf(query, sizeof(query) - 1, __PROVIDER_LIST_SCHEMA, _PROVIDER_LIST_TABLE_NAME);
187 rc = _query_exec(query);
194 int _query_bind_text(stmt pStmt, int pos, char* str)
200 return sqlite3_bind_text(pStmt, pos, (const char*)str, len, SQLITE_STATIC);
205 int _query_step(stmt pStmt)
207 return sqlite3_step(pStmt);
210 void _query_finalize(stmt pStmt)
217 rc = sqlite3_finalize(pStmt);
224 int _query_bind_int(stmt pStmt, int pos, int num)
226 return sqlite3_bind_int(pStmt, pos, num);
229 void insert_dummy_data()
232 char query[_QUERY_SQL_STRING_LEN + 1] = {0, };
236 _create_all_tables();
238 // insert to tag_name to tag_mime table
239 memset(query, 0x00, sizeof(query));
240 sprintf(query, "insert into %s(tag_name) values (?) ", _TAGS_MIME_TABLE_NAME);
253 for(i = 0; i < 7; i++)
255 hstmt = __query_prepare(query);
257 _query_bind_text(hstmt, 1, (char*)tag_name[i]);
258 rc = _query_step(hstmt);
259 if(rc != SQLITE_DONE)
261 printf("\n !! rc : %d \n", rc);
264 _query_finalize(hstmt);
268 // rc = sqlite3_exec(test_hDBCt, "BEGIN IMMEDIATE TRANSACTION", NULL, NULL, &pszErrorMsg);
270 // insert to _USER_ACCOUNT_TABLE_NAME
271 memset(query, 0x00, sizeof(query));
272 sprintf(query, "insert into %s(displayname, icon, account_id, provider_id, login_id) values "
273 "(?, ?, ?, ?, ?) ", _USER_ACCOUNT_TABLE_NAME);
275 char* displayname[] =
277 "Jamie's google account",
278 "William's facebook account",
279 "Craig's twitter account",
285 "/opt/icon/image1.jpg",
287 "/opt/icon/image1.jpg",
288 "/opt/icon/image2.jpg"
293 "com.google:Jamie@gmail.com",
294 "com.facebook:William@facebook.com",
295 "com.twitter:Craig@twitter.com",
296 "com.custom:Lucille@gmail.com"
299 char* provider_id[] =
310 "William@facebook.com",
315 for(i = 0; i < 4; i++)
317 hstmt = __query_prepare(query);
319 _query_bind_text(hstmt, 1, (char*)displayname[i]);
320 _query_bind_text(hstmt, 2, (char*)icon[i]);
321 _query_bind_text(hstmt, 3, (char*)account_id[i]);
322 _query_bind_text(hstmt, 4, (char*)provider_id[i]);
323 _query_bind_text(hstmt, 5, (char*)login_id[i]);
325 rc = _query_step(hstmt);
326 if(rc != SQLITE_DONE)
328 printf("\n !! rc : %d \n", rc);
331 _query_finalize(hstmt);
335 // insert to _SERVICETYPE_TABLE_NAME
336 memset(query, 0x00, sizeof(query));
337 sprintf(query, "insert into %s(serviceType_id) values (?) ", _SERVICETYPE_TABLE_NAME);
339 char* service_type_id[] =
346 for(i = 0; i < 3; i++)
348 hstmt = __query_prepare(query);
349 _query_bind_text(hstmt, 1, (char*)service_type_id[i]);
351 rc = _query_step(hstmt);
352 if(rc != SQLITE_DONE)
354 printf("\n !! rc : %d \n", rc);
357 _query_finalize(hstmt);
361 // insert to _SERVICE_TABLE_NAME
362 memset(query, 0x00, sizeof(query));
363 sprintf(query, "insert into %s(service_id, provider_id, serviceType_id) values "
364 "(?, ?, ?) ", _SERVICES_TABLE_NAME);
371 "com.facebook.facebook",
372 "com.twitter.twitter",
376 for(i = 0; i < 6; i++)
378 hstmt = __query_prepare(query);
380 _query_bind_text(hstmt, 1, (char*)service_id[i]);
384 _query_bind_text(hstmt, 2, (char*)provider_id[0]);
385 _query_bind_text(hstmt, 3, (char*)service_type_id[i]);
388 _query_bind_text(hstmt, 2, (char*)provider_id[i-2]);
389 _query_bind_text(hstmt, 3, (char*)service_type_id[2]);
392 rc = _query_step(hstmt);
393 if(rc != SQLITE_DONE)
395 printf("\n !! rc : %d \n", rc);
398 _query_finalize(hstmt);
402 // insert to _PROVIDER_LIST_TABLE_NAME
403 memset(query, 0x00, sizeof(query));
404 sprintf(query, "insert into %s(provider_id, display_name) values (?, ?) ", _PROVIDER_LIST_TABLE_NAME);
406 char* provider_display_name[] =
408 "provider:com.google",
409 "provider:com.facebook",
410 "provider:com.twitter",
411 "provider:com.custom",
414 for(i = 0; i < 4; i++)
416 hstmt = __query_prepare(query);
418 _query_bind_text(hstmt, 1, (char*)provider_id[i]);
419 _query_bind_text(hstmt, 2, (char*)provider_display_name[i]);
421 rc = _query_step(hstmt);
422 if(rc != SQLITE_DONE)
424 printf("\n !! rc : %d \n", rc);
427 _query_finalize(hstmt);
431 // insert to _RELATION_TABLE_NAME
432 memset(query, 0x00, sizeof(query));
433 sprintf(query, "insert into %s(tags_id, _svc_id, type_id, tag_name) values (?, ?, ?, ?) ", _RELATION_TABLE_NAME);
435 hstmt = __query_prepare(query);
437 _query_bind_int(hstmt, 1, 2);
438 _query_bind_int(hstmt, 2, 1);
439 _query_bind_int(hstmt, 3, 0);
440 _query_bind_text(hstmt, 4, (char*)tag_name[1]);
442 rc = _query_step(hstmt);
443 if(rc != SQLITE_DONE)
444 printf("\n !! rc : %d \n", rc);
445 _query_finalize(hstmt);
448 hstmt = __query_prepare(query);
449 _query_bind_int(hstmt, 1, 5);
450 _query_bind_int(hstmt, 2, 2);
451 _query_bind_int(hstmt, 3, 0);
452 _query_bind_text(hstmt, 4, (char*)tag_name[4]);
454 rc = _query_step(hstmt);
455 if(rc != SQLITE_DONE)
456 printf("\n !! rc : %d \n", rc);
457 _query_finalize(hstmt);
460 hstmt = __query_prepare(query);
461 _query_bind_int(hstmt, 1, 7);
462 _query_bind_int(hstmt, 2, 3);
463 _query_bind_int(hstmt, 3, 0);
464 _query_bind_text(hstmt, 4, (char*)tag_name[6]);
466 rc = _query_step(hstmt);
467 if(rc != SQLITE_DONE)
468 printf("\n !! rc : %d \n", rc);
469 _query_finalize(hstmt);
472 hstmt = __query_prepare(query);
474 _query_bind_int(hstmt, 1, 7);
475 _query_bind_int(hstmt, 2, 4);
476 _query_bind_int(hstmt, 3, 0);
477 _query_bind_text(hstmt, 4, (char*)tag_name[6]);
479 rc = _query_step(hstmt);
480 if(rc != SQLITE_DONE)
481 printf("\n !! rc : %d \n", rc);
482 _query_finalize(hstmt);
485 hstmt = __query_prepare(query);
487 _query_bind_int(hstmt, 1, 7);
488 _query_bind_int(hstmt, 2, 5);
489 _query_bind_int(hstmt, 3, 0);
490 _query_bind_text(hstmt, 4, (char*)tag_name[6]);
492 rc = _query_step(hstmt);
493 if(rc != SQLITE_DONE)
494 printf("\n !! rc : %d \n", rc);
495 _query_finalize(hstmt);
498 hstmt = __query_prepare(query);
500 _query_bind_int(hstmt, 1, 7);
501 _query_bind_int(hstmt, 2, 6);
502 _query_bind_int(hstmt, 3, 0);
503 _query_bind_text(hstmt, 4, (char*)tag_name[6]);
505 rc = _query_step(hstmt);
506 if(rc != SQLITE_DONE)
507 printf("\n !! rc : %d \n", rc);
508 _query_finalize(hstmt);
511 hstmt = __query_prepare(query);
513 _query_bind_int(hstmt, 1, 1);
514 _query_bind_int(hstmt, 2, 0);
515 _query_bind_int(hstmt, 3, 1);
516 _query_bind_text(hstmt, 4, (char*)tag_name[0]);
518 rc = _query_step(hstmt);
519 if(rc != SQLITE_DONE)
520 printf("\n !! rc : %d \n", rc);
521 _query_finalize(hstmt);
524 hstmt = __query_prepare(query);
526 _query_bind_int(hstmt, 1, 3);
527 _query_bind_int(hstmt, 2, 0);
528 _query_bind_int(hstmt, 3, 1);
529 _query_bind_text(hstmt, 4, (char*)tag_name[2]);
531 rc = _query_step(hstmt);
532 if(rc != SQLITE_DONE)
533 printf("\n !! rc : %d \n", rc);
534 _query_finalize(hstmt);
537 hstmt = __query_prepare(query);
539 _query_bind_int(hstmt, 1, 4);
540 _query_bind_int(hstmt, 2, 0);
541 _query_bind_int(hstmt, 3, 1);
542 _query_bind_text(hstmt, 4, (char*)tag_name[3]);
544 rc = _query_step(hstmt);
545 if(rc != SQLITE_DONE)
546 printf("\n !! rc : %d \n", rc);
547 _query_finalize(hstmt);
550 hstmt = __query_prepare(query);
552 _query_bind_int(hstmt, 1, 1);
553 _query_bind_int(hstmt, 2, 0);
554 _query_bind_int(hstmt, 3, 2);
555 _query_bind_text(hstmt, 4, (char*)tag_name[0]);
557 rc = _query_step(hstmt);
558 if(rc != SQLITE_DONE)
559 printf("\n !! rc : %d \n", rc);
560 _query_finalize(hstmt);
563 hstmt = __query_prepare(query);
565 _query_bind_int(hstmt, 1, 4);
566 _query_bind_int(hstmt, 2, 0);
567 _query_bind_int(hstmt, 3, 2);
568 _query_bind_text(hstmt, 4, (char*)tag_name[3]);
570 rc = _query_step(hstmt);
571 if(rc != SQLITE_DONE)
572 printf("\n !! rc : %d \n", rc);
573 _query_finalize(hstmt);
576 hstmt = __query_prepare(query);
578 _query_bind_int(hstmt, 1, 5);
579 _query_bind_int(hstmt, 2, 0);
580 _query_bind_int(hstmt, 3, 3);
581 _query_bind_text(hstmt, 4, (char*)tag_name[4]);
583 rc = _query_step(hstmt);
584 if(rc != SQLITE_DONE)
585 printf("\n !! rc : %d \n", rc);
586 _query_finalize(hstmt);
589 hstmt = __query_prepare(query);
591 _query_bind_int(hstmt, 1, 6);
592 _query_bind_int(hstmt, 2, 0);
593 _query_bind_int(hstmt, 3, 3);
594 _query_bind_text(hstmt, 4, (char*)tag_name[5]);
596 rc = _query_step(hstmt);
597 if(rc != SQLITE_DONE)
598 printf("\n !! rc : %d \n", rc);
599 _query_finalize(hstmt);
602 // insert to _REL_PROVIDER_TABLE_NAME
603 memset(query, 0x00, sizeof(query));
604 sprintf(query, "insert into %s(_list_id, type_id) values (?, ?) ", _REL_PROVIDER_TABLE_NAME);
606 for(i = 0; i < 6; i++)
608 hstmt = __query_prepare(query);
612 _query_bind_int(hstmt, 1, 1);
613 _query_bind_int(hstmt, 2, i+1);
616 _query_bind_int(hstmt, 1, i-1);
617 _query_bind_int(hstmt, 2, 3);
620 rc = _query_step(hstmt);
621 if(rc != SQLITE_DONE)
623 printf("\n !! rc : %d \n", rc);
626 _query_finalize(hstmt);
629 // rc = sqlite3_exec(test_hDBCt, "COMMIT TRANSACTION", NULL, NULL, &pszErrorMsg);
651 TIZEN_MESSAGING = 0x00000001,
652 TIZEN_SMS = 0x00000002,
653 TIZEN_MMS = 0x00000004,
654 TIZEN_EMAIL = 0x00000008,
655 TIZEN_CHAT = 0x00000010,
656 TIZEN_CALL = 0x00000020,
657 TIZEN_TEL = 0x00000040,
658 TIZEN_VIDEOCALL = 0x00000080,
659 TIZEN_VOIP = 0x00000100,
660 TIZEN_SKYPE = 0x00000200,
661 TIZEN_SHARING = 0x00000400,
662 TIZEN_CUSTOM = 0x01000000
673 char* AccountServiceTypeId;
676 GList* tags_info; // tags_info_t
677 }AccountServiceType_t;
681 char* AccountServiceId;
687 char* AccountServiceTypeId;
688 char* AccountServiceProviderId;
690 GList* tags_info; // tags_info_t
696 char* AccountServiceProviderId;
707 char* AccountServiceProviderId;
708 unsigned long credentialId;
709 GList* services; // AccountService_t
711 provider_t* provider;
720 UserAccount_t user_account = {0, };
721 UserProperties_t property = {0, };
722 AccountServiceType_t serviceType = {0, };
723 provider_t provider = {0, };
725 int addAccount(const char* providerId, UserProperties_t* properties, UserAccount_t* account)
739 filter_e filter_type;
743 int set_account_filter(search_list_t* search_list, filter_e filter_type, char* value)
745 filter_value_t* object = NULL;
746 object = g_new0(filter_value_t, 1);
748 object->filter_type = filter_type;
749 object->value = g_strdup(value);
750 if(filter_type == TAGS)
751 search_list->tags_count++;
752 search_list->filter_list = g_list_append(search_list->filter_list, object);
757 static char* filter_attribute[FILTER_ATTRIBUTE_MAX] =
766 USE_FILTER_NONE = 0x00000000,
767 USE_SERVICE_TYPE_ID = 0x00000001,
768 USE_TAGS = 0x00000002,
769 USE_PROVIDER_ID = 0x00000004
784 int _query_column_int(stmt pStmt, int pos)
786 return sqlite3_column_int(pStmt, pos);
789 char* _query_column_text(stmt pStmt, int pos)
791 return (char *)sqlite3_column_text(pStmt, pos);
794 double _query_column_double(stmt pStmt, int pos)
796 return sqlite3_column_double(pStmt, pos);
799 #define QUERY_MAX_LEN 4096
800 #define SUB_QUERY_LEN 2048
801 #define TABLE_LEN 512
803 void _get_tags(tags_owner owner, int id, GList** tags_list)
806 char query[QUERY_MAX_LEN + 1] = {0, };
811 snprintf(query, sizeof(query) - 1, "select tag_name from relation where _svc_id = %d", id);
813 case TAG_SERVICE_TYPE :
814 snprintf(query, sizeof(query) - 1, "select tag_name from relation where type_id = %d", id);
819 stmt hstmt = __query_prepare(query);
821 rc = _query_step(hstmt);
822 while(rc == SQLITE_ROW)
824 tags_info_t* tag_info = NULL;
825 tag_info = g_new0(tags_info_t, 1);
826 tag_info->tag_info = g_strdup(_query_column_text(hstmt, 0));
828 *tags_list = g_list_append(*tags_list, tag_info);
829 rc = _query_step(hstmt);
831 _query_finalize(hstmt);
834 char* _make_condition_part(search_list_t* search_list, query_type_e type)
837 char tmp_query[SUB_QUERY_LEN + 1] = {0, };
838 char pre_query[TABLE_LEN + 1] = {0, };
839 char table[TABLE_LEN + 1] = {0, };
840 used_filter_attr use_filter = USE_FILTER_NONE;
841 int filter_count = 0;
844 query = g_new0(char, QUERY_MAX_LEN);
846 if(type == FIND_ACCOUNT)
847 snprintf(pre_query, sizeof(pre_query) - 1, "where user_account.provider_id in (select a.provider_id from service a ");
849 snprintf(pre_query, sizeof(pre_query) - 1, "where service._svc_id in (select a._svc_id from service a ");
851 GList* tmp_filter_list = search_list->filter_list;
852 while(tmp_filter_list)
854 filter_value_t* object = (filter_value_t*)tmp_filter_list->data;
856 if(object->value != NULL)
858 if(object->filter_type == SERVICE_TYPE_ID)
860 use_filter = (used_filter_attr)(use_filter | USE_SERVICE_TYPE_ID);
862 if(tmp_query[0] == '\0')
863 sprintf(tmp_query, "a.%s = ? ", filter_attribute[object->filter_type]);
865 sprintf(tmp_query, "and %s a.%s = ? ", tmp_query, filter_attribute[object->filter_type]);
867 }else if(object->filter_type == TAGS)
869 use_filter = (used_filter_attr)(use_filter | USE_TAGS);
875 sprintf(table, ", relation b ");
877 sprintf(table, "%s, relation b ", table);
879 if(tmp_query[0] == '\0')
881 if(search_list->tags_count > 1)
882 sprintf(tmp_query, "(a._svc_id = b._svc_id) and (b.%s = ? ", filter_attribute[object->filter_type]);
884 sprintf(tmp_query, "(a._svc_id = b._svc_id) and b.%s = ? ", filter_attribute[object->filter_type]);
887 if(search_list->tags_count > 1)
888 sprintf(tmp_query, "%s and (a._svc_id = b._svc_id) and (b.%s = ? ", tmp_query, filter_attribute[object->filter_type]);
890 sprintf(tmp_query, "%s and (a._svc_id = b._svc_id) and b.%s = ? ", tmp_query, filter_attribute[object->filter_type]);
894 sprintf(tmp_query, "%s or b.%s = ? ", tmp_query, filter_attribute[object->filter_type]);
895 if(search_list->tags_count > 1 && search_list->tags_count == tags_count)
896 sprintf(tmp_query, "%s) ", tmp_query);
898 }else if(object->filter_type == PROVIDER_ID)
900 use_filter = (used_filter_attr)(use_filter | USE_PROVIDER_ID);
902 if(tmp_query[0] == '\0')
903 sprintf(tmp_query, "a.%s = ? ", filter_attribute[object->filter_type]);
905 sprintf(tmp_query, "%s and a.%s = ? ", tmp_query, filter_attribute[object->filter_type]);
909 tmp_filter_list = g_list_next(tmp_filter_list);
913 snprintf(query, QUERY_MAX_LEN, "%s %s where %s)", pre_query, table, tmp_query);
915 snprintf(query, QUERY_MAX_LEN, "%s where %s)", pre_query, tmp_query);
917 if(type == FIND_ACCOUNT)
919 if((use_filter | USE_PROVIDER_ID) == USE_PROVIDER_ID && filter_count == 1)
921 memset(query, 0x00, QUERY_MAX_LEN);
922 snprintf(query, QUERY_MAX_LEN, "where user_account.provider_id = ? ");
923 }else if((use_filter | USE_SERVICE_TYPE_ID) == USE_SERVICE_TYPE_ID && filter_count == 1)
925 memset(query, 0x00, QUERY_MAX_LEN);
926 snprintf(query, QUERY_MAX_LEN, ",service where (user_account.provider_id = service.provider_id) and service.serviceType_id = ? ");
930 if((use_filter | USE_PROVIDER_ID) == USE_PROVIDER_ID && filter_count == 1)
932 memset(query, 0x00, QUERY_MAX_LEN);
933 snprintf(query, QUERY_MAX_LEN, ",service where (user_account.provider_id = service.provider_id) and user_account.provider_id = ? ");
934 }else if((use_filter | USE_SERVICE_TYPE_ID) == USE_SERVICE_TYPE_ID && filter_count == 1)
936 memset(query, 0x00, QUERY_MAX_LEN);
937 snprintf(query, QUERY_MAX_LEN, " where service.serviceType_id = ? ");
941 if(filter_count == 0)
947 void _get_service_list_by_account(char* provider_id, GList** service_list)
951 char query[QUERY_MAX_LEN + 1] = {0, };
953 snprintf(query, sizeof(query) - 1, "select service_id, service_name, application_id, display_name, icon, serviceType_id, provider_id, setting, enable, _svc_id "
954 "from %s where provider_id = %s", _SERVICES_TABLE_NAME, provider_id);
956 stmt hstmt = __query_prepare(query);
958 rc = _query_step(hstmt);
959 while(rc == SQLITE_ROW)
961 AccountService_t* service_info = NULL;
962 service_info = g_new0(AccountService_t, 1);
964 service_info->AccountServiceId = g_strdup(_query_column_text(hstmt, 0));
965 service_info->serviceName = g_strdup(_query_column_text(hstmt, 1));
966 service_info->applicationId = g_strdup(_query_column_text(hstmt, 2));
967 service_info->displayName = g_strdup(_query_column_text(hstmt, 3));
968 service_info->icon = g_strdup(_query_column_text(hstmt, 4));
969 service_info->AccountServiceTypeId = g_strdup(_query_column_text(hstmt, 5));
970 service_info->AccountServiceProviderId = g_strdup(_query_column_text(hstmt, 6));
971 service_info->setting = g_strdup(_query_column_text(hstmt, 7));
972 service_info->enabled = _query_column_int(hstmt, 8);
973 id = _query_column_int(hstmt, 9);
975 _get_tags(TAG_SERVICE, id, &(service_info->tags_info));
977 *service_list = g_list_append(*service_list, service_info);
978 rc = _query_step(hstmt);
980 _query_finalize(hstmt);
983 void _make_account_info(int user_id, UserAccount_t* account_info)
985 char query[QUERY_MAX_LEN + 1] = {0, };
989 snprintf(query, sizeof(query) - 1, "select displayname, icon, account_id, enable, credential_id, settings, provider_id "
990 "from %s where user_id = %d", _USER_ACCOUNT_TABLE_NAME, user_id);
992 stmt hstmt = __query_prepare(query);
994 rc = _query_step(hstmt);
995 account_info->displayName = g_strdup(_query_column_text(hstmt, 0));
996 account_info->icon = g_strdup(_query_column_text(hstmt, 1));
997 account_info->AccountId = g_strdup(_query_column_text(hstmt, 2));
998 account_info->enabled = _query_column_int(hstmt, 3);
999 account_info->credentialId = _query_column_double(hstmt, 4);
1000 account_info->settings = g_strdup(_query_column_text(hstmt, 5));
1001 account_info->AccountServiceProviderId = g_strdup(_query_column_text(hstmt, 6));
1003 _query_finalize(hstmt);
1007 snprintf(query, sizeof(query) - 1, "select provider_id, display_name, icon "
1008 "from %s where provider_id = '%s'", _PROVIDER_LIST_TABLE_NAME, account_info->AccountServiceProviderId);
1010 hstmt = __query_prepare(query);
1012 rc = _query_step(hstmt);
1014 account_info->provider = g_new0(provider_t, 1);
1015 account_info->provider->AccountServiceProviderId = g_strdup(_query_column_text(hstmt, 0));
1016 account_info->provider->displayName = g_strdup(_query_column_text(hstmt, 1));
1017 account_info->provider->icon = g_strdup(_query_column_text(hstmt, 2));
1019 _query_finalize(hstmt);
1023 _get_service_list_by_account(account_info->AccountServiceProviderId, &(account_info->services));
1026 void _make_service_info(int id, AccountService_t* service_info)
1028 char query[QUERY_MAX_LEN + 1] = {0, };
1033 snprintf(query, sizeof(query) - 1, "select service_id, service_name, application_id, display_name, icon, serviceType_id, provider_id, setting, enable "
1034 "from %s where _svc_id = %d", _SERVICES_TABLE_NAME, id);
1036 hstmt = __query_prepare(query);
1038 rc = _query_step(hstmt);
1039 service_info->AccountServiceId = g_strdup(_query_column_text(hstmt, 0));
1040 service_info->serviceName = g_strdup(_query_column_text(hstmt, 1));
1041 service_info->applicationId = g_strdup(_query_column_text(hstmt, 2));
1042 service_info->displayName = g_strdup(_query_column_text(hstmt, 3));
1043 service_info->icon = g_strdup(_query_column_text(hstmt, 4));
1044 service_info->AccountServiceTypeId = g_strdup(_query_column_text(hstmt, 5));
1045 service_info->AccountServiceProviderId = g_strdup(_query_column_text(hstmt, 6));
1046 service_info->setting = g_strdup(_query_column_text(hstmt, 7));
1047 service_info->enabled = _query_column_int(hstmt, 8);
1049 _query_finalize(hstmt);
1053 snprintf(query, sizeof(query) - 1, "select account_id from %s where provider_id = %s", _USER_ACCOUNT_TABLE_NAME, service_info->AccountServiceProviderId);
1055 hstmt = __query_prepare(query);
1057 rc = _query_step(hstmt);
1058 service_info->AccountId = g_strdup(_query_column_text(hstmt, 0));
1060 _query_finalize(hstmt);
1064 _get_tags(TAG_SERVICE, id, &(service_info->tags_info));
1068 int find_accounts(search_list_t* search_list, status_e status, GList** account_list)
1071 char query[QUERY_MAX_LEN + 1] = {0, };
1073 int index_list[SUB_QUERY_LEN + 1] = {0, };
1074 int index_count = 0;
1078 char* filter = _make_condition_part(search_list, FIND_ACCOUNT);
1085 snprintf(query, sizeof(query) - 1, "select user_account.user_id from user_account %s and user_account.enable = 1", filter);
1087 snprintf(query, sizeof(query) - 1, "select user_account.user_id from user_account where user_account.enable = 1");
1093 snprintf(query, sizeof(query) - 1, "select user_account.user_id from user_account %s and user_account.enable = 0", filter);
1095 snprintf(query, sizeof(query) - 1, "select user_account.user_id from user_account where user_account.enable = 0");
1102 snprintf(query, sizeof(query) - 1, "select user_account.user_id from user_account %s", filter);
1104 snprintf(query, sizeof(query) - 1, "select user_account.user_id from user_account");
1109 hstmt = __query_prepare(query);
1111 GList* filter_list_val = search_list->filter_list;
1112 while(filter_list_val)
1114 filter_value_t* object = (filter_value_t*)filter_list_val->data;
1116 if(object->value != NULL)
1117 _query_bind_text(hstmt, i++, object->value);
1119 printf("input value : %s \n", object->value);
1121 filter_list_val = g_list_next(filter_list_val);
1124 rc = _query_step(hstmt);
1125 printf("rc : %d \n", rc);
1128 while(rc == SQLITE_ROW)
1130 ret = _query_column_int(hstmt, 0);
1131 index_list[index_count++] = ret;
1132 rc = _query_step(hstmt);
1135 _query_finalize(hstmt);
1137 // make account object by index_list
1138 for(i = 0; i< index_count; i++)
1141 UserAccount_t* account_info = NULL;
1142 account_info = g_new0(UserAccount_t, 1);
1143 _make_account_info(index_list[i], account_info);
1145 // Generate account list
1146 *account_list = g_list_append(*account_list, account_info);
1155 int find_services(search_list_t* search_list, status_e status, GList** service_list)
1158 char query[QUERY_MAX_LEN + 1] = {0, };
1160 int index_list[SUB_QUERY_LEN + 1] = {0, };
1161 int index_count = 0;
1164 char* filter = _make_condition_part(search_list, FIND_SERVICE);
1171 snprintf(query, sizeof(query) - 1, "select service._id from service %s and service.enable = 1", filter);
1173 snprintf(query, sizeof(query) - 1, "select service._id from service where service.enable = 1");
1179 snprintf(query, sizeof(query) - 1, "select service._id from service %s and service.enable = 0", filter);
1181 snprintf(query, sizeof(query) - 1, "select service._id from service where service.enable = 0");
1188 snprintf(query, sizeof(query) - 1, "select service._id from service %s", filter);
1190 snprintf(query, sizeof(query) - 1, "select service._id from service");
1195 stmt hstmt = __query_prepare(query);
1197 GList* filter_list_val = search_list->filter_list;
1198 while(filter_list_val)
1200 filter_value_t* object = (filter_value_t*)filter_list_val->data;
1202 if(object->value != NULL)
1203 _query_bind_text(hstmt, i++, object->value);
1205 filter_list_val = g_list_next(filter_list_val);
1208 rc = _query_step(hstmt);
1209 while(rc == SQLITE_ROW)
1211 index_list[index_count++] = _query_column_int(hstmt, 0);
1212 rc = _query_step(hstmt);
1215 _query_finalize(hstmt);
1217 for(i = 0; i< index_count; i++)
1220 AccountService_t* service_info = NULL;
1221 service_info = g_new0(AccountService_t, 1);
1222 _make_service_info(index_list[i], service_info);
1224 // Generate service list
1225 *service_list = g_list_append(*service_list, service_info);
1234 int find_providers(const char* serviceTypeId, GList** provider_list)
1238 char query[QUERY_MAX_LEN + 1] = {0, };
1239 char sub_query[SUB_QUERY_LEN + 1] = {0, };
1241 if(serviceTypeId == NULL)
1243 snprintf(query, sizeof(query) - 1, "select provider_id, display_name, icon from provider_list");
1246 snprintf(sub_query, sizeof(sub_query) - 1, "select type_id from service_type where serviceType_id = ?");
1247 snprintf(query, sizeof(query) - 1, "select a.provider_id, a.display_name, a.icon from provider_list a, provider_to_svctype b "
1248 "where (a._list_id = b._list_id) and b.type_id in (%s) ", sub_query);
1251 stmt hstmt = __query_prepare(query);
1253 rc = _query_step(hstmt);
1254 while(rc == SQLITE_ROW)
1256 provider_t* provider = NULL;
1257 provider = g_new0(provider_t, 1);
1258 provider->AccountServiceProviderId = g_strdup(_query_column_text(hstmt, 0));
1259 provider->displayName = g_strdup(_query_column_text(hstmt, 1));
1260 provider->icon = g_strdup(_query_column_text(hstmt, 2));
1262 *provider_list = g_list_append(*provider_list, provider);
1263 rc = _query_step(hstmt);
1266 _query_finalize(hstmt);
1271 int find_service_types(char* prefix, GList** servicetype_list)
1276 char query[QUERY_MAX_LEN + 1] = {0, };
1279 snprintf(query, sizeof(query) - 1, "select type_id, serviceType_id, display_name, icon from service_type");
1281 snprintf(query, sizeof(query) - 1, "select type_id, serviceType_id, display_name, icon from service_type where serviceType_id like (? || '%%')");
1283 stmt hstmt = __query_prepare(query);
1286 _query_bind_text(hstmt, 1, prefix);
1288 rc = _query_step(hstmt);
1289 while(rc == SQLITE_ROW)
1291 type_id = _query_column_int(hstmt, 0);
1293 AccountServiceType_t* servicetype = NULL;
1294 servicetype = g_new0(AccountServiceType_t, 1);
1295 servicetype->AccountServiceTypeId = g_strdup(_query_column_text(hstmt, 1));
1296 servicetype->displayName = g_strdup(_query_column_text(hstmt, 2));
1297 servicetype->icon = g_strdup(_query_column_text(hstmt, 3));
1299 _get_tags(TAG_SERVICE_TYPE, type_id, &(servicetype->tags_info));
1301 *servicetype_list = g_list_append(*servicetype_list, servicetype);
1302 rc = _query_step(hstmt);
1304 _query_finalize(hstmt);
1309 // use mandatory input parameter
1310 int getAccountById(char* accountId, UserAccount_t* account)
1315 char query[QUERY_MAX_LEN + 1] = {0, };
1317 snprintf(query, sizeof(query) - 1, "select user_id from user_account where account_id = ?");
1319 stmt hstmt = __query_prepare(query);
1320 _query_bind_text(hstmt, 1, accountId);
1322 rc = _query_step(hstmt);
1324 user_id = _query_column_int(hstmt, 0);
1325 _query_finalize(hstmt);
1327 _make_account_info(user_id, account);
1332 int getServiceTypeById(char* serviceTypeId, AccountServiceType_t* serviceType)
1337 char query[QUERY_MAX_LEN + 1] = {0, };
1339 snprintf(query, sizeof(query) - 1, "select type_id, serviceType_id, display_name, icon from service_type where serviceType_id = ?");
1341 stmt hstmt = __query_prepare(query);
1342 _query_bind_text(hstmt, 1, serviceTypeId);
1344 rc = _query_step(hstmt);
1346 type_id = _query_column_int(hstmt, 0);
1348 serviceType->AccountServiceTypeId = g_strdup(_query_column_text(hstmt, 1));
1349 serviceType->displayName = g_strdup(_query_column_text(hstmt, 2));
1350 serviceType->icon = g_strdup(_query_column_text(hstmt, 3));
1352 _get_tags(TAG_SERVICE_TYPE, type_id, &(serviceType->tags_info));
1354 _query_finalize(hstmt);
1359 int getProviderById(char* serviceProviderId, provider_t* provider)
1363 char query[QUERY_MAX_LEN + 1] = {0, };
1365 snprintf(query, sizeof(query) - 1, "select provider_id, display_name, icon from provider_list where provider_id = ?");
1367 stmt hstmt = __query_prepare(query);
1368 _query_bind_text(hstmt, 1, serviceProviderId);
1370 rc = _query_step(hstmt);
1372 provider->AccountServiceProviderId = g_strdup(_query_column_text(hstmt, 0));
1373 provider->displayName = g_strdup(_query_column_text(hstmt, 1));
1374 provider->icon = g_strdup(_query_column_text(hstmt, 2));
1376 _query_finalize(hstmt);
1381 namespace TizenApis {
1382 namespace Platform {
1384 AccountWrapper::AccountWrapper() : m_platformAccount(NULL), m_abstractAccount(NULL)
1386 LogDebug("entered");
1387 m_abstractAccount = EventAccountPtr(new EventAccount());
1388 if (!m_abstractAccount) {
1389 ThrowMsg(UnknownException, "abstract object is not created");
1393 AccountWrapper::AccountWrapper(const EventAccountPtr &event) : m_platformAccount(NULL), m_abstractAccount(event)
1395 LogDebug("entered");
1398 AccountWrapper::~AccountWrapper()
1400 LogDebug("entered");
1401 //TODO: After inserting ,It seems like F/W frees handle. I need to review this later.
1402 // After inserting and call freePlatformAccount, Segment fault occurs.
1403 //freePlatformAccount();
1406 int AccountWrapper::getIDFromPlatformAccount() const
1408 LogDebug("Entered");
1409 int error_code = -1;
1411 if (m_platformAccount == NULL) {
1412 ThrowMsg(NullPointerException, "m_platformAccount is not set");
1415 error_code = account_get_account_id(m_platformAccount, &accountid);
1417 if(ACCOUNT_ERROR_NONE != error_code)
1419 ThrowMsg(PlatformException, "Can't get a account id");
1424 //TODO: check if it works to dicriminate update/insert with account id.
1425 void AccountWrapper::saveAccount()
1427 LogDebug("entered");
1430 //Check if platform struct is set.
1431 //It could be set here, but forcing user to do it manually can help to avoid problems.
1432 if (m_platformAccount == NULL) {
1433 ThrowMsg(NullPointerException, "m_platformAccount is not set");
1436 accountID = m_abstractAccount->getID();
1438 displayPlatformAccount();
1442 //insert new record or update existing one
1443 if (accountID < 0) { // insert new account
1444 int err = addAccount(m_abstractAccount->getProviderName().c_str(), &property, &user_account);
1445 user_account.AccountId = g_strdup("com.google:myaccount1@gmail.com");
1447 // int err = account_insert_to_db(m_platformAccount, &returnID);
1448 if (ACCOUNT_ERROR_NONE != err) {
1449 LogError("Can't insert new account, error code: " << returnID);
1450 ThrowMsg(PlatformException, "Can't insert new account.");
1452 m_abstractAccount->setID(returnID);
1453 m_abstractAccount->setAccountId(user_account.AccountId);
1455 LogInfo("New event inserted");
1458 //accountID = getIDFromPlatformAccount();
1459 LogDebug("accountID: " << accountID);
1460 if (ACCOUNT_ERROR_NONE != account_update_to_db_by_id(m_platformAccount, accountID)) {
1461 ThrowMsg(PlatformException, "Can't update new account.");
1463 LogDebug("Account updated");
1468 void AccountWrapper::loadAccount(int id)
1470 LogDebug("Entered. ID of account to load: " << id);
1472 freePlatformAccount();
1474 if (ACCOUNT_ERROR_NONE != account_create(&m_platformAccount)) {
1475 ThrowMsg(PlatformException, "Can't create handle");
1478 int errorCode = account_query_account_by_account_id(id, &m_platformAccount);
1480 if (ACCOUNT_ERROR_NONE != errorCode) {
1481 LogError("Can't get account with ID = " << id << ", error code: " << errorCode);
1482 ThrowMsg(PlatformException, "Can't get account with ID = " << id << ", error code: " << errorCode);
1484 convertPlatformAccountToAbstractAccount();
1485 displayAbstractAccount();
1488 void AccountWrapper::deleteAccount()
1490 if (m_platformAccount == NULL) {
1491 ThrowMsg(NullPointerException, "Failed to delete event (m_platformAccount==NULL)");
1493 int accountID = m_abstractAccount->getID();
1494 LogDebug("accountID : " << accountID);
1495 if (accountID < 0) {
1496 ThrowMsg(InvalidArgumentException, "Failed to delete account from account DB (account is not saved in account DB)");
1500 err = account_delete_from_db_by_id(accountID);
1501 if (ACCOUNT_ERROR_NONE != err) {
1502 ThrowMsg(PlatformException, "Can't delete account. Error code " << err);
1504 //TODO: Is it necessary?
1505 //m_abstractAccount->resetId();
1506 //setIDToPlatformAccount();
1509 void AccountWrapper::getAccountbyId()
1511 std::string accountID = m_abstractAccount->getAccountId();
1512 LogDebug("accountID : " << accountID);
1513 unsigned long value = 123;
1514 bool b_value = true;
1516 // int errorCode = getAccountById(m_abstractAccount->getAccountId().c_str(), &user_account);
1518 m_abstractAccount->setAccountId("com.google:getaccountbyid@gmail.com");
1519 m_abstractAccount->setDisplayName("samsung");
1520 m_abstractAccount->setIconPath("/path/icon/icon.png");
1521 m_abstractAccount->setProviderName("com.google");
1522 m_abstractAccount->setEnabled(b_value);
1523 m_abstractAccount->setCredentailId(value);
1524 m_abstractAccount->setSettings("port:8080, server:http://test.com");
1526 m_abstractAccount->setAccountId(user_account.AccountId);
1527 m_abstractAccount->setDisplayName(user_account.displayName);
1528 m_abstractAccount->setIconPath(user_account.icon);
1529 m_abstractAccount->setProviderName(user_account.AccountServiceProviderId);
1530 m_abstractAccount->setEnabled(user_account.enabled);
1531 m_abstractAccount->setCredentailId(user_account.credentialId);
1532 m_abstractAccount->setSettings(user_account.settings);
1535 if (ACCOUNT_ERROR_NONE != errorCode) {
1536 LogError("Can't get account with ID = " << id << ", error code: " << errorCode);
1537 ThrowMsg(PlatformException, "Can't get account with ID = " << id << ", error code: " << errorCode);
1540 // convertPlatformAccountToAbstractAccount();
1543 void AccountWrapper::getServiceTypebyId()
1545 std::string serviceTypeId = m_abstractAccount->getServiceTypeId();
1546 LogDebug("serviceTypeId : " << serviceTypeId);
1548 // getServiceTypeById(m_abstractAccount->getServiceTypeId().c_str(), &serviceType);
1549 m_abstractAccount->setAccountId("com.google:getaccountbyid@gmail.com");
1553 void AccountWrapper::getProviderbyId()
1555 std::string providerId = m_abstractAccount->getProviderId();
1556 LogDebug("providerId : " << providerId);
1558 // getProviderById(m_abstractAccount->getProviderId().c_str(), &provider);
1559 m_abstractAccount->setAccountId("com.google:getaccountbyid@gmail.com");
1563 void AccountWrapper::findProviders()
1565 std::string serviceTypeId = m_abstractAccount->getServiceTypeId();
1566 LogDebug("serviceTypeId : " << serviceTypeId);
1568 db_util_open(_QUERY_DB_NAME, &test_hDBCt, 0);
1569 // insert_dummy_data();
1572 GList* provider_list = NULL;
1575 GList* account_list = NULL;
1576 UserAccount_t* account = NULL;
1578 search_list_t search_list = {0, };
1579 set_account_filter(&search_list, SERVICE_TYPE_ID, "tizen.sms");
1580 find_accounts(&search_list, DISABLE, &account_list);
1583 UserAccount_t* account_info = (UserAccount_t*)account_list->data;
1584 printf("account_info->AccountId : %s \n", account_info->AccountId);
1585 printf("account_info->AccountServiceProviderId : %s \n\n\n", account_info->AccountServiceProviderId);
1586 account_list = g_list_next(account_list);
1589 search_list_t search_list1 = {0, };
1590 set_account_filter(&search_list1, TAGS, "tizen.sharing");
1591 find_accounts(&search_list1, DISABLE, &account_list);
1594 UserAccount_t* account_info = (UserAccount_t*)account_list->data;
1595 printf("account_info->AccountId : %s \n", account_info->AccountId);
1596 printf("account_info->AccountServiceProviderId : %s \n\n\n", account_info->AccountServiceProviderId);
1597 account_list = g_list_next(account_list);
1600 search_list_t search_list2 = {0, };
1601 set_account_filter(&search_list2, PROVIDER_ID, "com.google");
1602 find_accounts(&search_list2, DISABLE, &account_list);
1605 UserAccount_t* account_info = (UserAccount_t*)account_list->data;
1606 printf("account_info->AccountId : %s \n", account_info->AccountId);
1607 printf("account_info->AccountServiceProviderId : %s \n\n\n", account_info->AccountServiceProviderId);
1608 account_list = g_list_next(account_list);
1611 search_list_t search_list3 = {0, };
1612 set_account_filter(&search_list3, SERVICE_TYPE_ID, "tizen.sms");
1613 set_account_filter(&search_list3, TAGS, "tizen.sharing");
1614 set_account_filter(&search_list3, TAGS, "tizen.email");
1615 set_account_filter(&search_list3, PROVIDER_ID, "com.google");
1616 find_accounts(&search_list3, DISABLE, &account_list);
1619 UserAccount_t* account_info = (UserAccount_t*)account_list->data;
1620 printf("account_info->AccountId : %s \n", account_info->AccountId);
1621 printf("account_info->AccountServiceProviderId : %s \n\n\n", account_info->AccountServiceProviderId);
1622 account_list = g_list_next(account_list);
1625 search_list_t search_list4 = {0, };
1626 find_accounts(&search_list4, DISABLE, &account_list);
1629 UserAccount_t* account_info = (UserAccount_t*)account_list->data;
1630 printf("account_info->AccountId : %s \n", account_info->AccountId);
1631 printf("account_info->AccountServiceProviderId : %s \n\n\n", account_info->AccountServiceProviderId);
1632 account_list = g_list_next(account_list);
1635 search_list_t search_list5 = {0, };
1636 set_account_filter(&search_list5, TAGS, "tizen.sms");
1637 set_account_filter(&search_list5, TAGS, "tizen.mms");
1638 find_accounts(&search_list5, DISABLE, &account_list);
1642 UserAccount_t* account_info = (UserAccount_t*)account_list->data;
1643 printf("account_info->AccountId : %s \n", account_info->AccountId);
1644 printf("account_info->AccountServiceProviderId : %s \n", account_info->AccountServiceProviderId);
1646 // Add service info to Javascript obj
1647 account_list = g_list_next(account_list);
1651 GList* servicetype_list = NULL;
1653 find_service_types("tizen", &servicetype_list);
1654 while(servicetype_list)
1656 AccountServiceType_t* service_type_info = (AccountServiceType_t*)servicetype_list->data;
1657 printf("service_type_info->AccountServiceTypeId : %s \n", service_type_info->AccountServiceTypeId);
1658 printf("service_type_info->displayName : %s \n", service_type_info->displayName);
1659 printf("service_type_info->icon : %s \n", service_type_info->icon);
1661 GList* tmp_tag_list = service_type_info->tags_info;
1665 tags_info_t* tag = (tags_info_t*)tmp_tag_list->data;
1666 printf("tag->tag_info : %s \n", tag->tag_info);
1668 tmp_tag_list = g_list_next(tmp_tag_list);
1671 servicetype_list = g_list_next(servicetype_list);
1674 m_abstractAccount->setAccountId("com.google:findProviders@gmail.com");
1678 void AccountWrapper::findServiceTypes()
1680 std::string prefix = m_abstractAccount->getprefix();
1681 LogDebug("prefix : " << prefix);
1682 // GList* servicetype_list = NULL;
1684 // find_service_types(m_abstractAccount->getprefix().c_str(), &servicetype_list);
1686 // m_abstractAccount->setAccountId("com.google:findServiceTypes@gmail.com");
1690 char *AccountWrapper::getPlatformAccount() const
1692 LogDebug("entered");
1693 return (char*)m_platformAccount;
1696 EventAccountPtr AccountWrapper::getAbstractAccount() const
1698 LogDebug("entered");
1699 return m_abstractAccount;
1702 void AccountWrapper::freePlatformAccount()
1704 LogDebug("entered");
1705 if (m_platformAccount != NULL) {
1706 if (ACCOUNT_ERROR_NONE != account_destroy(m_platformAccount)) {
1707 LogError("Can't free account handle.");
1709 m_platformAccount = NULL;
1713 char *AccountWrapper::convertAbstractAccountToPlatformAccount()
1715 LogDebug("entered");
1716 freePlatformAccount();
1718 if (ACCOUNT_ERROR_NONE != account_create(&m_platformAccount)) {
1719 ThrowMsg(PlatformException, "Can't create handle");
1722 property.displayName = g_strdup(m_abstractAccount->getDisplayName().c_str());
1723 property.icon = g_strdup(m_abstractAccount->getIconPath().c_str());
1725 setDisplayNameToPlatformAccount();
1726 setIconPathToPlatformAccount();
1727 setProviderNameToPlatformAccount();
1729 setUserNameToPlatformAccount();
1730 setPackageNameToPlatformAccount();
1732 //TODO: check if we need to have user be able to set the ID.
1733 //setIDToPlatformAccount();
1734 setEmailAddressToPlatformAccount();
1735 setDomainNameToPlatformAccount();
1737 setAccountServices();
1739 return getPlatformAccount();
1742 void AccountWrapper::setIDToPlatformAccount()
1744 LogDebug("entered");
1746 //TODO: check if we need to have user be able to set the ID.
1749 if (!m_platformAccount) {
1750 ThrowMsg(UnknownException, "Null platform pointer.");
1752 if (m_abstractAccount->getIdIsSet()) {
1753 if (CAL_SUCCESS != calendar_svc_struct_set_int(m_platformEvent,
1754 CAL_VALUE_INT_INDEX,
1755 m_abstractEvent->getId()))
1757 ThrowMsg(PlatformException, "Can't set event ID.");
1760 if (CAL_SUCCESS != calendar_svc_struct_set_int(m_platformEvent,
1761 CAL_VALUE_INT_INDEX,
1763 ThrowMsg(PlatformException, "Can't set event ID.");
1769 void AccountWrapper::setDisplayNameToPlatformAccount()
1771 LogDebug("entered");
1772 if (!m_platformAccount) {
1773 ThrowMsg(UnknownException, "Null platform pointer.");
1776 if (ACCOUNT_ERROR_NONE != account_set_display_name(m_platformAccount, m_abstractAccount->getDisplayName().c_str()))
1778 ThrowMsg(PlatformException, "Can't set displayname.");
1783 void AccountWrapper::setIconPathToPlatformAccount()
1785 LogDebug("entered");
1786 if (!m_platformAccount) {
1787 ThrowMsg(UnknownException, "Null platform pointer.");
1790 if (ACCOUNT_ERROR_NONE != account_set_icon_path(m_platformAccount, m_abstractAccount->getIconPath().c_str()))
1792 ThrowMsg(PlatformException, "Can't set iconPath.");
1797 void AccountWrapper::setProviderNameToPlatformAccount()
1799 LogDebug("entered");
1800 if (!m_platformAccount) {
1801 ThrowMsg(UnknownException, "Null platform pointer.");
1804 if (ACCOUNT_ERROR_NONE != account_set_source(m_platformAccount, m_abstractAccount->getProviderName().c_str()))
1806 ThrowMsg(PlatformException, "Can't set providername.");
1810 void AccountWrapper::setEmailAddressToPlatformAccount()
1812 LogDebug("entered");
1813 if (!m_platformAccount) {
1814 ThrowMsg(UnknownException, "Null platform pointer.");
1817 if (ACCOUNT_ERROR_NONE != account_set_email_address(m_platformAccount, m_abstractAccount->getEmailAddress().c_str()))
1819 ThrowMsg(PlatformException, "Can't set packagename.");
1823 void AccountWrapper::setDomainNameToPlatformAccount()
1825 LogDebug("entered");
1826 if (!m_platformAccount) {
1827 ThrowMsg(UnknownException, "Null platform pointer.");
1830 if (ACCOUNT_ERROR_NONE != account_set_domain_name(m_platformAccount, m_abstractAccount->getDomainName().c_str()))
1832 ThrowMsg(PlatformException, "Can't set packagename.");
1837 void AccountWrapper::setHasContactFeatureToPlatformAccount()
1839 LogDebug("entered");
1840 if (!m_platformAccount) {
1841 ThrowMsg(UnknownException, "Null platform pointer.");
1843 account_set_capability(m_platformAccount, ACCOUNT_CAPABILITY_CONTACT, ACCOUNT_CAPABILITY_ENABLED);
1847 void AccountWrapper::setAccountServices()
1849 LogDebug("entered");
1850 if (!m_platformAccount) {
1851 ThrowMsg(UnknownException, "Null platform pointer.");
1854 AccountServicesArrayPtr services = m_abstractAccount->getService();
1855 if ((services == NULL) || (services->size() == 0))
1859 for (size_t i = 0; i < services->size(); ++i)
1861 LogDebug("getServiceName : " << services->at(i)->getName().c_str());
1862 // LogDebug("getServiceType : " << services->at(i)->getServiceType().c_str());
1867 void AccountWrapper::getAccountServices()
1869 LogDebug("entered");
1870 if (!m_platformAccount) {
1871 ThrowMsg(UnknownException, "Null platform pointer.");
1874 AccountServicesArrayPtr services(new AccountServicesArray());
1875 for(int i = 0; i < 2; i++)
1877 AccountServicesPtr service(new AccountServices());
1879 service->setName("gmail");
1880 // service->setServiceType("google_service");
1882 services->push_back(service);
1884 m_abstractAccount->setService(services);
1888 AccountServiceTypePropertyPtr AccountWrapper::getDummyAccountServiceType(){
1890 std::string serviceTypeId = m_abstractAccount->getServiceTypeId();
1892 AccountServiceTypePropertyPtr accountServiceTypePropertyPtr(new AccountServiceTypeProperty);
1893 accountServiceTypePropertyPtr->setId(serviceTypeId);
1894 accountServiceTypePropertyPtr->setDisplayName("dummyDisplayName");
1895 accountServiceTypePropertyPtr->setIconPath("dummyIconPath");
1896 std::vector<std::string> dummyVector;
1897 dummyVector.push_back("dummyTag1");
1898 dummyVector.push_back("dummyTag2");
1899 accountServiceTypePropertyPtr->setTags(dummyVector);
1901 return accountServiceTypePropertyPtr;
1904 AccountServiceProviderPropertyPtr AccountWrapper::getDummyAccountServiceProviderProperty(){
1905 std::string accountServiceProviderId = m_abstractAccount->getProviderId();
1907 AccountServiceProviderPropertyPtr accountServiceProviderPropertyPtr(new AccountServiceProviderProperty);
1908 accountServiceProviderPropertyPtr->setId(accountServiceProviderId);
1909 accountServiceProviderPropertyPtr->setDisplayName("dummyDisplayName");
1910 accountServiceProviderPropertyPtr->setIconPath("dummyIconPath");
1912 return accountServiceProviderPropertyPtr;
1915 void AccountWrapper::setDummyServices(){
1918 AccountServicesArrayPtr services(new AccountServicesArray());
1919 for (int i = 0; i < 2; i++) {
1920 AccountServicesPtr service(new AccountServices());
1922 service->setId("dummy_id");
1923 service->setName("dummy_name");
1924 service->setApplicationId("dummy_applicationId");
1925 service->setDisplayName("dummy_displayName");
1926 service->setIcon("dummy_Icon");
1927 service->setAccountId("dummy_accountId");
1928 service->setServiceTypeId("dummy_serviceTypeId");
1929 service->setProviderId("dummy_ProviderId");
1930 // service->setTags("dummy_");
1931 service->setSettings("dummy_settings");
1933 services->push_back(service);
1936 m_abstractAccount->setService(services);
1942 EventAccountPtr AccountWrapper::convertPlatformAccountToAbstractAccount()
1944 LogDebug("entered");
1945 setDisplayNameFromPlatformAccount();
1946 setIconPathFromPlatformAccount();
1947 setProviderNameFromPlatformAccount();
1950 setUserNameFromPlatformAccount();
1951 setPackageNameFromPlatformAccount();
1952 setIDFromPlatformAccount();
1953 setEmailAddressFromPlatformAccount();
1954 setDomainNameFromPlatformAccount();
1956 getAccountServices();
1958 displayPlatformAccount();
1959 return getAbstractAccount();
1962 EventAccountPtr AccountWrapper::convertPlatformAccountToAbstractAccount(account_h account_info)
1964 LogDebug("entered");
1965 m_platformAccount = account_info;
1966 setDisplayNameFromPlatformAccount();
1967 setIconPathFromPlatformAccount();
1968 setProviderNameFromPlatformAccount();
1970 setUserNameFromPlatformAccount();
1971 setPackageNameFromPlatformAccount();
1972 setIDFromPlatformAccount();
1973 setEmailAddressFromPlatformAccount();
1974 setDomainNameFromPlatformAccount();
1976 getAccountServices();
1978 displayPlatformAccount();
1979 return getAbstractAccount();
1982 void AccountWrapper::setIDFromPlatformAccount()
1984 LogDebug("entered");
1985 if (!m_platformAccount) {
1986 ThrowMsg(UnknownException, "Null platform pointer.");
1988 m_abstractAccount->setID(getIDFromPlatformAccount());
1991 void AccountWrapper::setDisplayNameFromPlatformAccount()
1993 LogDebug("entered");
1994 if (!m_platformAccount) {
1995 ThrowMsg(UnknownException, "Null platform pointer.");
1998 char *displayname = NULL;
1999 account_get_display_name(m_platformAccount, &displayname);
2001 m_abstractAccount->setDisplayName(displayname);
2005 void AccountWrapper::setIconPathFromPlatformAccount()
2007 LogDebug("entered");
2008 if (!m_platformAccount) {
2009 ThrowMsg(UnknownException, "Null platform pointer.");
2012 char *iconPath = NULL;
2013 account_get_icon_path(m_platformAccount, &iconPath);
2015 m_abstractAccount->setIconPath(iconPath);
2019 void AccountWrapper::setProviderNameFromPlatformAccount()
2021 LogDebug("entered");
2022 if (!m_platformAccount) {
2023 ThrowMsg(UnknownException, "Null platform pointer.");
2026 char *providername = NULL;
2027 account_get_source(m_platformAccount, &providername);
2029 m_abstractAccount->setProviderName(providername);
2033 void AccountWrapper::setEmailAddressFromPlatformAccount()
2035 LogDebug("entered");
2036 if (!m_platformAccount) {
2037 ThrowMsg(UnknownException, "Null platform pointer.");
2040 char *emailaddress = NULL;
2041 account_get_email_address(m_platformAccount, &emailaddress);
2043 m_abstractAccount->setEmailAddress(emailaddress);
2047 void AccountWrapper::setDomainNameFromPlatformAccount()
2049 LogDebug("entered");
2050 if (!m_platformAccount) {
2051 ThrowMsg(UnknownException, "Null platform pointer.");
2054 char *domainname = NULL;
2055 account_get_domain_name(m_platformAccount, &domainname);
2057 m_abstractAccount->setDomainName(domainname);
2061 void AccountWrapper::displayAbstractAccount()
2063 LogDebug("account id : " << m_abstractAccount->getID());
2064 LogDebug("Display name : " << m_abstractAccount->getDisplayName());
2067 void AccountWrapper::displayPlatformAccount()