Tizen 2.0 Release
[pkgs/o/oma-ds-service.git] / src / plugins / ds-public / plain-text / src / plugin_interface.c
1 /*
2  * oma-ds-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 <stdio.h>
19 #include <stdlib.h>
20 #include <memo-db.h>
21
22 #include <sync_agent.h>
23
24 #include "in_datastore_info_plain_text.h"
25
26 #ifndef EXPORT_API
27 #define EXPORT_API __attribute__ ((visibility("default")))
28 #endif
29
30 #ifndef OMADS_AGENT_LOG
31 #undef LOG_TAG
32 #define LOG_TAG "PLUGIN_PLAIN_TEXT"
33 #endif
34
35 static int _free_obj_field_info(sync_agent_plugin_field_info_s * field_list, int count);
36 static int _set_obj_field_info(sync_agent_plugin_field_info_s ** field_list, int count, plain_text_field_list_s * input_list);
37 /*
38 static sync_agent_da_return_e __convert_service_error_to_common_error(int err);
39 */
40
41 EXPORT_API sync_agent_da_return_e sync_agent_plugin_converter(const void *agent_data, void **service_data)
42 {
43         _EXTERN_FUNC_ENTER;
44
45         retvm_if(agent_data == NULL, SYNC_AGENT_DA_ERRORS, "agent_data is NULL");
46
47         sync_agent_da_return_e ret = SYNC_AGENT_DA_SUCCESS;
48         struct memo_data *temp_service_data = 0;
49         char *temp_agent_data = (char *)agent_data;
50
51         /* create item */
52         temp_service_data = memo_create_data();
53         if (temp_service_data == NULL) {
54                 _DEBUG_INFO("[dc_plain_text_plugIn] memo_create_data() Fail!\n");
55                 ret = SYNC_AGENT_DA_ERRORS;
56                 *service_data = 0;
57         } else {
58                 _DEBUG_INFO("[dc_plain_text_plugIn] memo_create_data() Success!\n");
59                 temp_service_data->content = strdup(temp_agent_data);   /* configuration item */
60                 *service_data = (void *)temp_service_data;
61         }
62
63         _EXTERN_FUNC_EXIT;
64         return ret;
65 }
66
67 EXPORT_API sync_agent_da_return_e sync_agent_plugin_replace_converter(void *old_service_data, const void *agent_data, void **new_service_data)
68 {
69         _EXTERN_FUNC_ENTER;
70
71         retvm_if(old_service_data == NULL, SYNC_AGENT_DA_ERRORS, "old_service_data is NULL");
72         retvm_if(agent_data == NULL, SYNC_AGENT_DA_ERRORS, "agent_data is NULL");
73
74         sync_agent_da_return_e ret = SYNC_AGENT_DA_SUCCESS;
75         struct memo_data *temp_service_data = (struct memo_data *)old_service_data;
76         char *temp_agent_data = (char *)agent_data;
77
78         /* set item */
79         if (temp_service_data->has_doodle == 0) {
80                 free(temp_service_data->content);
81                 temp_service_data->content = strdup(temp_agent_data);
82         } else if (temp_service_data->comment != NULL) {
83                 free(temp_service_data->comment);
84                 temp_service_data->comment = strdup(temp_agent_data);
85         }
86         *new_service_data = (void *)temp_service_data;
87
88         _EXTERN_FUNC_EXIT;
89         return ret;
90 }
91
92 EXPORT_API sync_agent_da_return_e sync_agent_plugin_reverse_converter(void *service_data, void **agent_data)
93 {
94         _EXTERN_FUNC_ENTER;
95
96         retvm_if(service_data == NULL, SYNC_AGENT_DA_ERRORS, "service_data is NULL");
97
98         sync_agent_da_return_e ret = SYNC_AGENT_DA_SUCCESS;
99         char *temp_agent_data = 0;
100         struct memo_data *temp_service_data = (struct memo_data *)service_data;
101
102         /* deep copy */
103         if (temp_service_data == NULL) {
104                 _DEBUG_INFO("[dc_plain_text_plugIn] Fail : no data !\n");
105                 ret = SYNC_AGENT_DA_ERRORS;
106                 *agent_data = 0;
107         } else if (temp_service_data->has_doodle == 0) {
108                 _DEBUG_INFO("[dc_plain_text_plugIn] Success!\n");
109                 temp_agent_data = strdup(temp_service_data->content);
110                 *agent_data = (void *)temp_agent_data;
111         } else if (temp_service_data->comment != NULL) {
112                 _DEBUG_INFO("[dc_plain_text_plugIn] Success!\n");
113                 temp_agent_data = strdup(temp_service_data->comment);
114                 *agent_data = (void *)temp_agent_data;
115         }
116
117         /*  memory free */
118         if (temp_service_data != NULL)
119                 memo_free_data(temp_service_data);
120
121         _EXTERN_FUNC_EXIT;
122         return ret;
123 }
124
125 EXPORT_API void *sync_agent_plugin_alloc_object()
126 {
127         _DEBUG_INFO("[da_memo_plugIn] not implement !!");
128         return 0;
129 }
130
131 EXPORT_API int sync_agent_plugin_free_object(void *in_object)
132 {
133         _DEBUG_INFO("[da_memo_plugIn] not implement !!");
134         return 0;
135 }
136
137 EXPORT_API void *sync_agent_plugin_set_value(void *in_object, int key, char *extension_key, void *value)
138 {
139         _DEBUG_INFO("[da_memo_plugIn] not implement !!");
140         return 0;
141 }
142
143 EXPORT_API void *sync_agent_plugin_get_value(void *in_object, int key, char *extension_key)
144 {
145         _DEBUG_INFO("[da_memo_plugIn] not implement !!");
146         return 0;
147 }
148
149 EXPORT_API sync_agent_plugin_object_info_s *sync_agent_plugin_get_obj_info()
150 {
151         _EXTERN_FUNC_ENTER;
152
153         sync_agent_plugin_object_info_s *obj_info = (sync_agent_plugin_object_info_s *) calloc(1, sizeof(sync_agent_plugin_object_info_s));
154         if (obj_info == NULL) {
155                 _DEBUG_INFO("CALLOC failed !!!");
156                 return NULL;
157         }
158
159         obj_info->type = PLAIN_TEXT_TYPE;
160         obj_info->version = PLAIN_TEXT_VERSION;
161         obj_info->field_cnt = sizeof(plain_text_field_list) / sizeof(plain_text_field_list_s);
162
163         if (obj_info->field_cnt > 0)
164                 if (_set_obj_field_info(&(obj_info->field_list), obj_info->field_cnt, plain_text_field_list) == 0)
165                         return NULL;
166
167         _EXTERN_FUNC_EXIT;
168         return obj_info;
169 }
170
171 EXPORT_API int sync_agent_plugin_free_obj_info(sync_agent_plugin_object_info_s * obj_info)
172 {
173         _EXTERN_FUNC_ENTER;
174
175         if (obj_info) {
176                 if (obj_info->field_cnt > 0)
177                         if (_free_obj_field_info(obj_info->field_list, obj_info->field_cnt) == 0)
178                                 return 0;
179
180                 free(obj_info);
181         }
182
183         _EXTERN_FUNC_EXIT;
184         return 1;
185 }
186
187 static int _free_obj_field_info(sync_agent_plugin_field_info_s * field_list, int count)
188 {
189         _INNER_FUNC_ENTER;
190
191         int field_count = 0;
192         sync_agent_plugin_field_info_s *child = NULL;
193
194         if (field_list != NULL) {
195                 for (field_count = 0; field_count < count; field_count++) {
196                         child = field_list + field_count;
197                         if (child->field_child_cnt > 0)
198                                 if (_free_obj_field_info(child->field_child_list, child->field_child_cnt) == 0)
199                                         return 0;
200                 }
201                 free(field_list);
202         }
203
204         _INNER_FUNC_EXIT;
205         return 1;
206 }
207
208 static int _set_obj_field_info(sync_agent_plugin_field_info_s ** field_list, int count, plain_text_field_list_s * input_list)
209 {
210         _INNER_FUNC_ENTER;
211
212         int field_count = 0;
213         sync_agent_plugin_field_info_s *child = NULL;
214
215         *field_list = (sync_agent_plugin_field_info_s *) calloc(count, sizeof(sync_agent_plugin_field_info_s));
216         if (*field_list == NULL) {
217                 _DEBUG_ERROR("CALLOC failed !!!");
218                 return 0;
219         }
220
221         for (field_count = 0; field_count < count; field_count++) {
222                 child = (*field_list) + field_count;
223                 child->field_name = input_list[field_count].field_name;
224                 _DEBUG_TRACE("[%s]", child->field_name);
225         }
226
227         _INNER_FUNC_EXIT;
228         return 1;
229 }
230
231 /*
232 static sync_agent_da_return_e __convert_service_error_to_common_error(int err)
233 {
234         sync_agent_da_return_e ret = SYNC_AGENT_DA_SUCCESS;
235         _DEBUG_INFO("[da_memo_plugIn] Error Code : %d\n", err);
236
237         switch (err) {
238         default:
239                 ret = SYNC_AGENT_DA_ERRORS;
240                 break;
241         }
242
243         return ret;
244 }
245 */