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.
21 #include "utility/sync_util.h"
22 #include "plugin/data_connector_plugin.h"
24 #ifndef SYNC_AGENT_LOG
26 #define LOG_TAG "AF_PlugIn"
29 static int current_plugin_count_data_connector = 0;
31 static plugin_data_connector_s plugin_repository[PLUGIN_MAX_DATA_CONNECTOR];
33 static int _find_data_connector_plugin(int plugin_id);
35 plugin_data_connector_func_set_s plugin_get_data_connector_func_set(void *plugin_handle, plugin_error_e * error_code)
39 *error_code = PLUGIN_SUCCESS;
41 plugin_data_connector_func_set_s func_set;
43 func_set.func_open_service = dlsym(plugin_handle, "sync_agent_plugin_open_service");
44 func_set.func_close_service = dlsym(plugin_handle, "sync_agent_plugin_close_service");
45 func_set.func_begin_transaction = dlsym(plugin_handle, "sync_agent_plugin_begin_transaction");
46 func_set.func_end_transaction = dlsym(plugin_handle, "sync_agent_plugin_end_transaction");
47 func_set.func_add_item = dlsym(plugin_handle, "sync_agent_plugin_add_item");
48 func_set.func_add_bulk_item = dlsym(plugin_handle, "sync_agent_plugin_add_bulk_item");
49 func_set.func_update_item = dlsym(plugin_handle, "sync_agent_plugin_update_item");
50 func_set.func_update_bulk_item = dlsym(plugin_handle, "sync_agent_plugin_update_bulk_item");
51 func_set.func_delete_item = dlsym(plugin_handle, "sync_agent_plugin_delete_item");
52 func_set.func_delete_bulk_item = dlsym(plugin_handle, "sync_agent_plugin_delete_bulk_item");
53 func_set.func_delete_all_items = dlsym(plugin_handle, "sync_agent_plugin_delete_all_items");
54 func_set.func_get_item = dlsym(plugin_handle, "sync_agent_plugin_get_item");
55 func_set.func_add_folder = dlsym(plugin_handle, "sync_agent_plugin_add_folder");
56 func_set.func_delete_folder = dlsym(plugin_handle, "sync_agent_plugin_delete_folder");
57 func_set.func_get_folder = dlsym(plugin_handle, "sync_agent_plugin_get_folder");
58 func_set.func_execute = dlsym(plugin_handle, "sync_agent_plugin_execute");
59 func_set.func_get_used_item_cnt = dlsym(plugin_handle, "sync_agent_plugin_get_used_item_count");
60 func_set.func_get_deleted_exdate_item_cnt = dlsym(plugin_handle, "sync_agent_plugin_get_deleted_exdate_item_count");
61 func_set.func_is_exist_exdate_item = dlsym(plugin_handle, "sync_agent_plugin_is_exist_exdate_item");
62 func_set.func_construct_exdate_parent_item = dlsym(plugin_handle, "sync_agent_plugin_construct_exdate_parent_item");
63 func_set.func_get_used_cnt_for_folder = dlsym(plugin_handle, "sync_agent_plugin_get_used_item_count_for_folder");
64 func_set.func_get_folder_id_list = dlsym(plugin_handle, "sync_agent_plugin_get_folder_id_list");
65 func_set.func_get_account_id_list = dlsym(plugin_handle, "sync_agent_plugin_get_account_id_list");
66 func_set.func_backup_service_items_to_file = dlsym(plugin_handle, "sync_agent_plugin_backup_service_items_to_file");
67 func_set.func_restore_service_items_from_file = dlsym(plugin_handle, "sync_agent_plugin_restore_service_items_from_file");
68 func_set.func_get_chaned_item_for_folder_add = dlsym(plugin_handle, "sync_agent_plugin_get_changed_item_for_folder_add");
69 func_set.func_get_chaned_item_for_folder_delete = dlsym(plugin_handle, "sync_agent_plugin_get_changed_item_for_folder_delete");
70 func_set.func_get_chaned_item_for_folder_update = dlsym(plugin_handle, "sync_agent_plugin_get_changed_item_for_folder_update");
71 func_set.func_get_last_change_point = dlsym(plugin_handle, "sync_agent_plugin_get_last_change_point");
72 func_set.func_start_listening_change_noti = dlsym(plugin_handle, "sync_agent_plugin_start_listening_change_noti");
73 func_set.func_set_callback_add_item = dlsym(plugin_handle, "sync_agent_plugin_set_callback_add_item");
74 func_set.func_set_callback_delete_item = dlsym(plugin_handle, "sync_agent_plugin_set_callback_delete_item");
75 func_set.func_set_callback_delete_child_item = dlsym(plugin_handle, "sync_agent_plugin_set_callback_delete_child_item");
76 func_set.func_set_callback_update_item = dlsym(plugin_handle, "sync_agent_plugin_set_callback_update_item");
77 func_set.func_set_callback_get_account_id_list = dlsym(plugin_handle, "sync_agent_plugin_set_callback_get_account_id_list");
78 func_set.func_get_max_item_count = dlsym(plugin_handle, "sync_agent_plugin_get_max_item_count");
79 func_set.func_get_max_field_length = dlsym(plugin_handle, "sync_agent_plugin_get_max_field_length");
80 func_set.func_get_max_field_count = dlsym(plugin_handle, "sync_agent_plugin_get_max_field_count");
81 func_set.func_get_field_value = dlsym(plugin_handle, "sync_agent_plugin_get_field_value");
82 func_set.func_get_is_support_feature = dlsym(plugin_handle, "sync_agent_plugin_get_is_support_feature");
83 func_set.func_get_info_sim_contact_max_name_length = dlsym(plugin_handle, "sync_agent_plugin_get_info_sim_contact_max_name_length");
84 func_set.func_get_info_sim_contact_max_number_length = dlsym(plugin_handle, "sync_agent_plugin_get_info_sim_contact_max_number_length");
85 func_set.func_get_info_sim_contact_max_email_length = dlsym(plugin_handle, "sync_agent_plugin_get_info_sim_contact_max_email_length");
86 func_set.func_get_info_sim_contact_empty_count = dlsym(plugin_handle, "sync_agent_plugin_get_info_sim_contact_empty_count");
87 func_set.func_get_info_sim_contact_empty_number_count = dlsym(plugin_handle, "sync_agent_plugin_get_info_sim_contact_empty_number_count");
88 func_set.func_get_info_sim_contact_empty_email_count = dlsym(plugin_handle, "sync_agent_plugin_get_info_sim_contact_empty_email_count");
89 func_set.func_get_info_sim_contact_addressbook_id = dlsym(plugin_handle, "sync_agent_plugin_get_info_sim_contact_addressbook_id");
90 func_set.func_get_info_sim_contact_item_id = dlsym(plugin_handle, "sync_agent_plugin_get_info_sim_contact_item_id");
91 func_set.func_get_info_sim_contact_item = dlsym(plugin_handle, "sync_agent_plugin_get_info_sim_contact_item");
92 func_set.func_add_sim_contact_item = dlsym(plugin_handle, "sync_agent_plugin_add_sim_contact_item");
93 func_set.func_write_sim_contact_item = dlsym(plugin_handle, "sync_agent_plugin_write_sim_contact_item");
94 func_set.func_delete_sim_contact_item = dlsym(plugin_handle, "sync_agent_plugin_delete_sim_contact_item");
95 func_set.func_add_async_item = dlsym(plugin_handle, "sync_agent_plugin_add_async_item");
101 plugin_error_e plugin_register_plugin_data_connector(plugin_data_connector_s plugin)
105 if (current_plugin_count_data_connector >= PLUGIN_MAX_DATA_CONNECTOR) {
106 return PLUGIN_FULL_CAPACITY;
109 plugin_repository[current_plugin_count_data_connector] = plugin;
111 current_plugin_count_data_connector++;
115 return PLUGIN_SUCCESS;
118 void plugin_clear_plugin_data_connector()
123 for (i = 0; i < current_plugin_count_data_connector; i++) {
124 memset(&(plugin_repository[i].plugin_info), 0x00, sizeof(plugin_info_s));
125 memset(&(plugin_repository[i].func_set), 0x00, sizeof(plugin_data_connector_func_set_s));
126 memset(&(plugin_repository[i]), 0x00, sizeof(plugin_data_connector_s));
132 const plugin_data_connector_s *plugin_get_data_connector_plugin_repository(int *count)
136 *count = current_plugin_count_data_connector;
140 return plugin_repository;
143 int plugin_get_data_converter_plugin_id(int dc_plugin_id)
147 int index = _find_data_connector_plugin(dc_plugin_id);
154 return plugin_repository[index].data_converter_id;
157 int *plugin_get_data_connector_plugin_id_list(int *count)
161 int *dc_plugin_id_list = NULL;
164 if (current_plugin_count_data_connector > 0) {
165 *count = current_plugin_count_data_connector;
166 dc_plugin_id_list = (int *)calloc(current_plugin_count_data_connector, sizeof(int));
167 if (dc_plugin_id_list == NULL) {
168 _DEBUG_ERROR("CALLOC failed !!!");
172 for (; i < current_plugin_count_data_connector; i++) {
173 dc_plugin_id_list[i] = plugin_repository[i].plugin_info.plugin_id;
179 return dc_plugin_id_list;
182 plugin_open_service_cb plugin_get_function_open_service(int plugin_id)
186 int index = _find_data_connector_plugin(plugin_id);
193 return plugin_repository[index].func_set.func_open_service;
196 plugin_close_service_cb plugin_get_function_close_service(int plugin_id)
200 int index = _find_data_connector_plugin(plugin_id);
207 return plugin_repository[index].func_set.func_close_service;
210 plugin_begin_transaction_cb plugin_get_function_begin_transaction(int plugin_id)
214 int index = _find_data_connector_plugin(plugin_id);
221 return plugin_repository[index].func_set.func_begin_transaction;
224 plugin_end_transaction_cb plugin_get_function_end_transaction(int plugin_id)
228 int index = _find_data_connector_plugin(plugin_id);
235 return plugin_repository[index].func_set.func_end_transaction;
238 plugin_add_item_cb plugin_get_function_add_item(int plugin_id)
242 int index = _find_data_connector_plugin(plugin_id);
249 return plugin_repository[index].func_set.func_add_item;
252 plugin_add_bulk_item_cb plugin_get_function_add_bulk_item(int plugin_id)
256 int index = _find_data_connector_plugin(plugin_id);
263 return plugin_repository[index].func_set.func_add_bulk_item;
266 plugin_update_item_cb plugin_get_function_update_item(int plugin_id)
270 int index = _find_data_connector_plugin(plugin_id);
277 return plugin_repository[index].func_set.func_update_item;
280 plugin_update_bulk_item_cb plugin_get_function_update_bulk_item(int plugin_id)
284 int index = _find_data_connector_plugin(plugin_id);
291 return plugin_repository[index].func_set.func_update_bulk_item;
294 plugin_delete_item_cb plugin_get_function_del_item(int plugin_id)
298 int index = _find_data_connector_plugin(plugin_id);
305 return plugin_repository[index].func_set.func_delete_item;
308 plugin_delete_bulk_item_cb plugin_get_function_del_bulk_item(int plugin_id)
312 int index = _find_data_connector_plugin(plugin_id);
319 return plugin_repository[index].func_set.func_delete_bulk_item;
323 plugin_delete_all_items_cb plugin_get_function_del_all_items(int plugin_id)
327 int index = _find_data_connector_plugin(plugin_id);
334 return plugin_repository[index].func_set.func_delete_all_items;
337 plugin_get_item_cb plugin_get_function_get_item(int plugin_id)
341 int index = _find_data_connector_plugin(plugin_id);
348 return plugin_repository[index].func_set.func_get_item;
351 plugin_add_folder_cb plugin_get_function_add_folder(int plugin_id)
355 int index = _find_data_connector_plugin(plugin_id);
362 return plugin_repository[index].func_set.func_add_folder;
365 plugin_delete_folder_cb plugin_get_function_delete_folder(int plugin_id)
369 int index = _find_data_connector_plugin(plugin_id);
376 return plugin_repository[index].func_set.func_delete_folder;
379 plugin_get_folder_cb plugin_get_function_get_folder(int plugin_id)
383 int index = _find_data_connector_plugin(plugin_id);
390 return plugin_repository[index].func_set.func_get_folder;
393 plugin_execute_cb plugin_get_function_execute(int plugin_id)
397 int index = _find_data_connector_plugin(plugin_id);
404 return plugin_repository[index].func_set.func_execute;
407 plugin_get_used_item_count_cb plugin_get_function_get_used_item_count(int plugin_id)
411 int index = _find_data_connector_plugin(plugin_id);
418 return plugin_repository[index].func_set.func_get_used_item_cnt;
422 plugin_get_deleted_exdate_item_count plugin_get_function_get_deleted_exdate_item_count(int plugin_id)
426 int index = _find_data_connector_plugin(plugin_id);
432 return plugin_repository[index].func_set.func_get_deleted_exdate_item_cnt;
435 plugin_is_exist_exdate_item plugin_function_is_exist_exdate_item(int plugin_id)
439 int index = _find_data_connector_plugin(plugin_id);
446 return plugin_repository[index].func_set.func_is_exist_exdate_item;
449 plugin_construct_exdate_parent_item plugin_function_construct_exdate_parent_item(int plugin_id)
453 int index = _find_data_connector_plugin(plugin_id);
460 return plugin_repository[index].func_set.func_construct_exdate_parent_item;
463 plugin_get_used_count_for_folder_cb plugin_get_function_get_used_count_for_folder(int plugin_id)
467 int index = _find_data_connector_plugin(plugin_id);
474 return plugin_repository[index].func_set.func_get_used_cnt_for_folder;
478 plugin_get_folder_id_list_cb plugin_get_function_get_folder_id_list(int plugin_id)
482 int index = _find_data_connector_plugin(plugin_id);
489 return plugin_repository[index].func_set.func_get_folder_id_list;
492 plugin_get_account_id_list_cb plugin_get_function_get_account_id_list(int plugin_id)
496 int index = _find_data_connector_plugin(plugin_id);
503 return plugin_repository[index].func_set.func_get_account_id_list;
506 plugin_backup_service_items_to_file_cb plugin_get_function_backup_service_items_to_file(int plugin_id)
510 int index = _find_data_connector_plugin(plugin_id);
517 return plugin_repository[index].func_set.func_backup_service_items_to_file;
520 plugin_restore_service_items_from_file_cb plugin_get_function_restore_service_items_from_file(int plugin_id)
524 int index = _find_data_connector_plugin(plugin_id);
531 return plugin_repository[index].func_set.func_restore_service_items_from_file;
534 plugin_get_changed_item_for_folder_add_cb plugin_get_function_get_changed_item_for_folder_add(int plugin_id)
538 int index = _find_data_connector_plugin(plugin_id);
545 return plugin_repository[index].func_set.func_get_chaned_item_for_folder_add;
548 plugin_get_changed_item_for_folder_delete_cb plugin_get_function_get_changed_item_for_folder_delete(int plugin_id)
552 int index = _find_data_connector_plugin(plugin_id);
559 return plugin_repository[index].func_set.func_get_chaned_item_for_folder_delete;
562 plugin_get_changed_item_for_folder_update_cb plugin_get_function_get_changed_item_for_folder_update(int plugin_id)
566 int index = _find_data_connector_plugin(plugin_id);
573 return plugin_repository[index].func_set.func_get_chaned_item_for_folder_update;
576 plugin_get_last_change_point_cb plugin_get_function_get_last_change_point(int plugin_id)
580 int index = _find_data_connector_plugin(plugin_id);
587 return plugin_repository[index].func_set.func_get_last_change_point;
590 plugin_start_listening_change_noti_cb plugin_get_function_start_listening_change_noti(int plugin_id)
594 int index = _find_data_connector_plugin(plugin_id);
601 return plugin_repository[index].func_set.func_start_listening_change_noti;
604 plugin_set_callback_add_item_cb plugin_get_function_set_callback_add_item(int plugin_id)
608 int index = _find_data_connector_plugin(plugin_id);
615 return plugin_repository[index].func_set.func_set_callback_add_item;
618 plugin_set_callback_delete_item_cb plugin_get_function_set_callback_delete_item(int plugin_id)
622 int index = _find_data_connector_plugin(plugin_id);
629 return plugin_repository[index].func_set.func_set_callback_delete_item;
632 plugin_set_callback_update_item_cb plugin_get_function_data_connector_set_callback_update_item(int plugin_id)
636 int index = _find_data_connector_plugin(plugin_id);
643 return plugin_repository[index].func_set.func_set_callback_update_item;
646 plugin_set_callback_get_account_id_list_cb plugin_get_function_set_callback_get_account_id_list(int plugin_id)
650 int index = _find_data_connector_plugin(plugin_id);
657 return plugin_repository[index].func_set.func_set_callback_get_account_id_list;
660 plugin_set_callback_delete_child_item_cb plugin_get_function_set_callback_delete_child_item(int plugin_id)
664 int index = _find_data_connector_plugin(plugin_id);
671 return plugin_repository[index].func_set.func_set_callback_delete_child_item;
674 plugin_get_max_item_count_cb plugin_get_function_get_max_item_count(int plugin_id)
678 int index = _find_data_connector_plugin(plugin_id);
685 return plugin_repository[index].func_set.func_get_max_item_count;
688 plugin_get_max_field_length_cb plugin_get_function_get_max_field_length(int plugin_id)
692 int index = _find_data_connector_plugin(plugin_id);
699 return plugin_repository[index].func_set.func_get_max_field_length;
702 plugin_get_max_field_count_cb plugin_get_function_get_max_field_count(int plugin_id)
706 int index = _find_data_connector_plugin(plugin_id);
713 return plugin_repository[index].func_set.func_get_max_field_count;
716 plugin_get_field_value_cb plugin_get_function_get_field_value(int plugin_id)
720 int index = _find_data_connector_plugin(plugin_id);
727 return plugin_repository[index].func_set.func_get_field_value;
730 plugin_get_is_support_feature_cb plugin_get_function_get_is_support_feature(int plugin_id)
734 int index = _find_data_connector_plugin(plugin_id);
741 return plugin_repository[index].func_set.func_get_is_support_feature;
744 plugin_get_info_sim_contact_max_name_length_cb plugin_get_function_get_info_sim_contact_max_name_length(int plugin_id)
748 int index = _find_data_connector_plugin(plugin_id);
755 return plugin_repository[index].func_set.func_get_info_sim_contact_max_name_length;
758 plugin_get_info_sim_contact_max_number_length_cb plugin_get_function_get_info_sim_contact_max_number_length(int plugin_id)
762 int index = _find_data_connector_plugin(plugin_id);
769 return plugin_repository[index].func_set.func_get_info_sim_contact_max_number_length;
772 plugin_get_info_sim_contact_max_email_length_cb plugin_get_function_get_info_sim_contact_max_email_length(int plugin_id)
776 int index = _find_data_connector_plugin(plugin_id);
783 return plugin_repository[index].func_set.func_get_info_sim_contact_max_email_length;
786 plugin_get_info_sim_contact_empty_count_cb plugin_get_function_get_info_sim_contact_empty_count(int plugin_id)
790 int index = _find_data_connector_plugin(plugin_id);
797 return plugin_repository[index].func_set.func_get_info_sim_contact_empty_count;
800 plugin_get_info_sim_contact_empty_number_count_cb plugin_get_function_get_info_sim_contact_empty_number_count(int plugin_id)
804 int index = _find_data_connector_plugin(plugin_id);
811 return plugin_repository[index].func_set.func_get_info_sim_contact_empty_number_count;
814 plugin_get_info_sim_contact_empty_email_count_cb plugin_get_function_get_info_sim_contact_empty_email_count(int plugin_id)
818 int index = _find_data_connector_plugin(plugin_id);
825 return plugin_repository[index].func_set.func_get_info_sim_contact_empty_email_count;
828 plugin_get_info_sim_contact_addressbook_id_cb plugin_get_function_get_info_sim_contact_addressbook_id(int plugin_id)
832 int index = _find_data_connector_plugin(plugin_id);
839 return plugin_repository[index].func_set.func_get_info_sim_contact_addressbook_id;
842 plugin_get_info_sim_contact_item_id_cb plugin_get_function_get_info_sim_contact_item_id(int plugin_id)
846 int index = _find_data_connector_plugin(plugin_id);
853 return plugin_repository[index].func_set.func_get_info_sim_contact_item_id;
856 plugin_get_info_sim_contact_item_cb plugin_get_function_get_info_sim_contact_item(int plugin_id)
860 int index = _find_data_connector_plugin(plugin_id);
867 return plugin_repository[index].func_set.func_get_info_sim_contact_item;
870 plugin_add_sim_contact_item_cb plugin_get_function_add_sim_contact_item(int plugin_id)
874 int index = _find_data_connector_plugin(plugin_id);
881 return plugin_repository[index].func_set.func_add_sim_contact_item;
884 plugin_write_sim_contact_item_cb plugin_get_function_write_sim_contact_item(int plugin_id)
888 int index = _find_data_connector_plugin(plugin_id);
895 return plugin_repository[index].func_set.func_write_sim_contact_item;
898 plugin_delete_sim_contact_item_cb plugin_get_function_delete_sim_contact_item(int plugin_id)
902 int index = _find_data_connector_plugin(plugin_id);
909 return plugin_repository[index].func_set.func_delete_sim_contact_item;
912 plugin_add_async_item_cb plugin_get_function_add_async_item(int plugin_id)
916 int index = _find_data_connector_plugin(plugin_id);
923 return plugin_repository[index].func_set.func_add_async_item;
926 static int _find_data_connector_plugin(int plugin_id)
931 for (; i < current_plugin_count_data_connector; i++) {
932 if (plugin_repository[i].plugin_info.plugin_id == plugin_id) {