8c5dd246d9eb2f7fced54548ba06f6d7b3db2acd
[platform/core/system/sync-agent.git] / src / framework / data-adapter / interface_folder.c
1 /*
2  * sync-agent
3  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
4  *
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
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
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.
16  */
17
18 #include <pthread.h>
19 #include <glib.h>
20 #include <glib/gprintf.h>
21
22 #include "utility/sync_util.h"
23 #include "data-adapter/agent_handler_manager.h"
24 #include "data-adapter/agent_handler_manager_internal.h"
25 #include "data-adapter/agent.h"
26
27 #include "data-adapter/interface_folder.h"
28
29 #ifndef EXPORT_API
30 #define EXPORT_API __attribute__ ((visibility("default")))
31 #endif
32
33 #ifndef SYNC_AGENT_LOG
34 #undef LOG_TAG
35 #define LOG_TAG "AF_DACI"
36 #endif
37
38 EXPORT_API sync_agent_da_return_e sync_agent_create_folder(sync_agent_da_folder_s ** sync_agent_folder)
39 {
40         _EXTERN_FUNC_ENTER;
41
42         *sync_agent_folder = (sync_agent_da_folder_s *) calloc(1, sizeof(sync_agent_da_folder_s));
43         if (*sync_agent_folder == NULL) {
44                 _DEBUG_ERROR("calloc failed !!");
45                 return SYNC_AGENT_DA_ERRORS;
46         }
47
48         _EXTERN_FUNC_EXIT;
49
50         return SYNC_AGENT_DA_SUCCESS;
51 }
52
53 EXPORT_API sync_agent_da_return_e sync_agent_add_folder(sync_agent_da_folder_s * sync_agent_folder, char **folder_id)
54 {
55         _EXTERN_FUNC_ENTER;
56
57         retvm_if(sync_agent_folder == NULL, SYNC_AGENT_DA_ERRORS, "sync_agent_da_folder_s is NULL !!");
58
59         sync_agent_da_return_e ret = SYNC_AGENT_DA_ERRORS;
60
61         SYNC_AGENT_DA_HANDLER *daci_handler = da_get_agent_handler(SYNC_AGENT_DA_GET_THREAD_ID);
62         if (daci_handler == NULL) {
63                 _DEBUG_ERROR("[%s] no handler for key\n", __func__);
64                 return SYNC_AGENT_DA_ERR_DB_HANDLER_MGR;
65         }
66
67         ret = da_add_folder_new(daci_handler, sync_agent_folder, 1, folder_id);
68         if (ret != SYNC_AGENT_DA_SUCCESS) {
69                 _DEBUG_ERROR("da_add_folder_new() failed !!");
70         }
71
72         _EXTERN_FUNC_EXIT;
73
74         return ret;
75 }
76
77 EXPORT_API sync_agent_da_return_e sync_agent_get_folder(char *folder_id, sync_agent_da_folder_s ** sync_agent_folder)
78 {
79         _EXTERN_FUNC_ENTER;
80
81         retvm_if(folder_id == NULL, SYNC_AGENT_DA_ERRORS, "folder id is NULL !!");
82
83         sync_agent_da_return_e ret = SYNC_AGENT_DA_ERRORS;
84
85         SYNC_AGENT_DA_HANDLER *daci_handler = da_get_agent_handler(SYNC_AGENT_DA_GET_THREAD_ID);
86         if (daci_handler == NULL) {
87                 _DEBUG_ERROR("[%s] no handler for key\n", __func__);
88                 return SYNC_AGENT_DA_ERR_DB_HANDLER_MGR;
89         }
90
91         ret = da_get_folder_by_folder_id(daci_handler, folder_id, sync_agent_folder);
92         if (ret != SYNC_AGENT_DA_SUCCESS) {
93                 _DEBUG_INFO("da_get_folder_by_folder_id() failed !!");
94         }
95
96         _EXTERN_FUNC_EXIT;
97
98         return ret;
99 }
100
101 EXPORT_API sync_agent_da_return_e sync_agent_get_folder_list(sync_agent_da_get_folder_list_query_s * query, GList ** list)
102 {
103         _EXTERN_FUNC_ENTER;
104
105         retvm_if(query == NULL, SYNC_AGENT_DA_ERRORS, "sync_agent_da_get_folder_list_query_s is NULL !!");
106
107         sync_agent_da_return_e ret = SYNC_AGENT_DA_ERRORS;
108
109         SYNC_AGENT_DA_HANDLER *daci_handler = da_get_agent_handler(SYNC_AGENT_DA_GET_THREAD_ID);
110         if (daci_handler == NULL) {
111                 _DEBUG_ERROR("[%s] no handler for key\n", __func__);
112                 return SYNC_AGENT_DA_ERR_DB_HANDLER_MGR;
113         }
114
115         switch (query->option) {
116         case SYNC_AGENT_DA_GET_FOLDER_LIST_OPTION_SERVICE_ID_MAPPING:
117                 retvm_if(query->folder_id == NULL, SYNC_AGENT_DA_ERRORS, "folder id is NULL !!");
118
119                 ret = da_get_folder_mapping_service_id_new(daci_handler, query->account_id, query->folder_id, list);
120                 if (ret != SYNC_AGENT_DA_SUCCESS) {
121                         _DEBUG_ERROR("da_get_folder_mapping_service_id_new() failed !!");
122                 }
123                 break;
124         default:
125                 break;
126         }
127
128         _EXTERN_FUNC_EXIT;
129
130         return ret;
131 }
132
133 EXPORT_API sync_agent_da_return_e sync_agent_get_folder_id_list(sync_agent_da_get_folder_id_list_query_s * query, GList ** list)
134 {
135         _EXTERN_FUNC_ENTER;
136
137         retvm_if(query == NULL, SYNC_AGENT_DA_ERRORS, "sync_agent_da_get_folder_id_list_query_s is NULL !!");
138
139         sync_agent_da_return_e ret = SYNC_AGENT_DA_ERRORS;
140
141         SYNC_AGENT_DA_HANDLER *daci_handler = da_get_agent_handler(SYNC_AGENT_DA_GET_THREAD_ID);
142         if (daci_handler == NULL) {
143                 _DEBUG_ERROR("[%s] no handler for key\n", __func__);
144                 return SYNC_AGENT_DA_ERR_DB_HANDLER_MGR;
145         }
146
147         switch (query->option) {
148         case SYNC_AGENT_DA_GET_FOLDER_ID_OPTION_FOLDER_TYPE_ID:
149                 ret = da_get_folder_folder_id_by_folder_type_id_new(daci_handler, query->account_id, query->item_type_id, query->folder_type_id, list);
150                 if (ret != SYNC_AGENT_DA_SUCCESS) {
151                         _DEBUG_ERROR("da_get_folder_folder_id_by_folder_type_id_new() failed !!");
152                 }
153                 break;
154         case SYNC_AGENT_DA_GET_FOLDER_ID_OPTION_ITEM_TYPE_ID:
155                 ret = da_get_folder_folder_id_list_by_item_type_id_new(daci_handler, query->account_id, query->item_type_id, list);
156                 if (ret != SYNC_AGENT_DA_SUCCESS) {
157                         _DEBUG_ERROR("da_get_folder_folder_id_list_by_item_type_id_new() failed !!");
158                 }
159                 break;
160         default:
161                 break;
162         }
163
164         _EXTERN_FUNC_EXIT;
165
166         return ret;
167 }
168
169 EXPORT_API sync_agent_da_return_e sync_agent_free_folder(sync_agent_da_folder_s * sync_agent_folder)
170 {
171         _EXTERN_FUNC_ENTER;
172
173         if (sync_agent_folder != NULL) {
174                 if (sync_agent_folder->folder_id != NULL)
175                         free(sync_agent_folder->folder_id);
176
177                 if (sync_agent_folder->service_id != NULL)
178                         free(sync_agent_folder->service_id);
179
180                 if (sync_agent_folder->parent_folder_id != NULL)
181                         free(sync_agent_folder->parent_folder_id);
182
183                 if (sync_agent_folder->access_name != NULL)
184                         free(sync_agent_folder->access_name);
185
186                 free(sync_agent_folder);
187         } else {
188                 _DEBUG_ERROR("sync_agent_folder is NULL !!");
189                 return SYNC_AGENT_DA_ERRORS;
190         }
191
192         _EXTERN_FUNC_EXIT;
193
194         return SYNC_AGENT_DA_SUCCESS;
195 }
196
197 EXPORT_API sync_agent_da_return_e sync_agent_free_folder_list(GList * list)
198 {
199         _EXTERN_FUNC_ENTER;
200
201         sync_agent_da_return_e ret = SYNC_AGENT_DA_SUCCESS;
202
203         if (list != NULL) {
204                 GList *iter = NULL;
205                 sync_agent_da_folder_s *iter_data;
206
207                 for (iter = list; iter != NULL;) {
208                         iter_data = NULL;
209                         iter_data = (sync_agent_da_folder_s *) (iter->data);
210
211                         iter = g_list_next(iter);
212                         list = g_list_remove(list, iter_data);
213
214                         ret = sync_agent_free_folder(iter_data);
215                         if (ret != SYNC_AGENT_DA_SUCCESS) {
216                                 _DEBUG_ERROR("sync_agent_free_folder() failed !!");
217                                 return ret;
218                         }
219                 }
220
221                 g_list_free(list);
222         } else {
223                 _DEBUG_ERROR("list is NULL !!");
224                 return SYNC_AGENT_DA_ERRORS;
225         }
226
227         _EXTERN_FUNC_EXIT;
228
229         return ret;
230 }
231
232 EXPORT_API sync_agent_da_return_e sync_agent_free_folder_id(char *folder_id)
233 {
234         _EXTERN_FUNC_ENTER;
235
236         if (folder_id != NULL) {
237                 free(folder_id);
238         } else {
239                 _DEBUG_ERROR("folder id is NULL !!");
240                 return SYNC_AGENT_DA_ERRORS;;
241         }
242
243         _EXTERN_FUNC_EXIT;
244
245         return SYNC_AGENT_DA_SUCCESS;
246 }
247
248 EXPORT_API sync_agent_da_return_e sync_agent_free_folder_id_list(GList * list)
249 {
250         _EXTERN_FUNC_ENTER;
251
252         sync_agent_da_return_e ret = SYNC_AGENT_DA_SUCCESS;
253
254         if (list != NULL) {
255                 GList *iter = NULL;
256                 char *iter_data;
257
258                 for (iter = list; iter != NULL;) {
259                         iter_data = NULL;
260                         iter_data = (char *)(iter->data);
261
262                         iter = g_list_next(iter);
263                         list = g_list_remove(list, iter_data);
264
265                         ret = sync_agent_free_folder_id(iter_data);
266                         if (ret != SYNC_AGENT_DA_SUCCESS) {
267                                 _DEBUG_ERROR("sync_agent_free_folder_id() failed !!");
268                                 return ret;
269                         }
270                 }
271
272                 g_list_free(list);
273         } else {
274                 _DEBUG_ERROR("list is NULL !!");
275                 return SYNC_AGENT_DA_ERRORS;
276         }
277
278         _EXTERN_FUNC_EXIT;
279
280         return ret;
281 }