c205ca1b9964544c07dfea37cf40f92fe1ebf58e
[platform/core/pim/calendar-service.git] / common / cal_record_attendee.c
1 /*
2  * Calendar Service
3  *
4  * Copyright (c) 2012 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  */
19
20 #include <stdlib.h>
21 #include <stdbool.h>
22 #include <string.h>
23
24 #include "cal_internal.h"
25 #include "cal_typedef.h"
26 #include "cal_view.h"
27 #include "cal_record.h"
28 #include "cal_utils.h"
29
30 static int _cal_record_attendee_create(calendar_record_h* out_record);
31 static int _cal_record_attendee_destroy(calendar_record_h record, bool delete_child);
32 static int _cal_record_attendee_clone(calendar_record_h record, calendar_record_h* out_record);
33 static int _cal_record_attendee_get_str(calendar_record_h record, unsigned int property_id, char** out_str);
34 static int _cal_record_attendee_get_str_p(calendar_record_h record, unsigned int property_id, char** out_str);
35 static int _cal_record_attendee_get_int(calendar_record_h record, unsigned int property_id, int* out_value);
36 static int _cal_record_attendee_set_str(calendar_record_h record, unsigned int property_id, const char* value);
37 static int _cal_record_attendee_set_int(calendar_record_h record, unsigned int property_id, int value);
38
39 cal_record_plugin_cb_s cal_record_attendee_plugin_cb = {
40         .create = _cal_record_attendee_create,
41         .destroy = _cal_record_attendee_destroy,
42         .clone = _cal_record_attendee_clone,
43         .get_str = _cal_record_attendee_get_str,
44         .get_str_p = _cal_record_attendee_get_str_p,
45         .get_int = _cal_record_attendee_get_int,
46         .get_double = NULL,
47         .get_lli = NULL,
48         .get_caltime = NULL,
49         .set_str = _cal_record_attendee_set_str,
50         .set_int = _cal_record_attendee_set_int,
51         .set_double = NULL,
52         .set_lli = NULL,
53         .set_caltime = NULL,
54         .add_child_record = NULL,
55         .remove_child_record = NULL,
56         .get_child_record_count = NULL,
57         .get_child_record_at_p = NULL,
58         .clone_child_record_list = NULL
59 };
60
61 static void _cal_record_attendee_struct_init(cal_attendee_s *record)
62 {
63         memset(record, 0, sizeof(cal_attendee_s));
64 }
65
66 static int _cal_record_attendee_create(calendar_record_h* out_record)
67 {
68         cal_attendee_s *temp = NULL;
69         int ret = CALENDAR_ERROR_NONE;
70
71         temp = calloc(1, sizeof(cal_attendee_s));
72         RETVM_IF(NULL == temp, CALENDAR_ERROR_OUT_OF_MEMORY, "calloc() Fail");
73
74         _cal_record_attendee_struct_init(temp);
75
76         *out_record = (calendar_record_h)temp;
77
78         return ret;
79 }
80
81 static void _cal_record_attendee_struct_free(cal_attendee_s *record)
82 {
83         CAL_FREE(record->attendee_number);
84         CAL_FREE(record->attendee_uid);
85         CAL_FREE(record->attendee_group);
86         CAL_FREE(record->attendee_email);
87         CAL_FREE(record->attendee_delegatee_uri);
88         CAL_FREE(record->attendee_delegator_uri);
89         CAL_FREE(record->attendee_name);
90         CAL_FREE(record->attendee_member);
91         CAL_FREE(record);
92 }
93
94 static int _cal_record_attendee_destroy(calendar_record_h record, bool delete_child)
95 {
96         int ret = CALENDAR_ERROR_NONE;
97
98         cal_attendee_s *temp = (cal_attendee_s*)(record);
99
100         _cal_record_attendee_struct_free(temp);
101
102         return ret;
103 }
104
105 static int _cal_record_attendee_clone(calendar_record_h record, calendar_record_h* out_record)
106 {
107         cal_attendee_s *out_data = NULL;
108         cal_attendee_s *src_data = NULL;
109
110         src_data = (cal_attendee_s*)(record);
111
112         out_data = calloc(1, sizeof(cal_attendee_s));
113         RETVM_IF(NULL == out_data, CALENDAR_ERROR_OUT_OF_MEMORY, "calloc() Fail");
114
115         CAL_RECORD_COPY_COMMON(&(out_data->common), &(src_data->common));
116
117         out_data->parent_id = src_data->parent_id;
118         out_data->attendee_cutype = src_data->attendee_cutype;
119         out_data->attendee_ct_index = src_data->attendee_ct_index;
120         out_data->attendee_role = src_data->attendee_role;
121         out_data->attendee_status = src_data->attendee_status;
122         out_data->attendee_rsvp = src_data->attendee_rsvp;
123         out_data->attendee_number = cal_strdup(src_data->attendee_number);
124         out_data->attendee_uid = cal_strdup(src_data->attendee_uid);
125         out_data->attendee_group = cal_strdup(src_data->attendee_group);
126         out_data->attendee_email = cal_strdup(src_data->attendee_email);
127         out_data->attendee_delegatee_uri = cal_strdup(src_data->attendee_delegatee_uri);
128         out_data->attendee_delegator_uri = cal_strdup(src_data->attendee_delegator_uri);
129         out_data->attendee_name = cal_strdup(src_data->attendee_name);
130         out_data->attendee_member = cal_strdup(src_data->attendee_member);
131
132         *out_record = (calendar_record_h)out_data;
133
134         return CALENDAR_ERROR_NONE;
135 }
136
137 static int _cal_record_attendee_get_str(calendar_record_h record, unsigned int property_id, char** out_str)
138 {
139         cal_attendee_s *rec = (cal_attendee_s*)(record);
140         switch (property_id) {
141         case CAL_PROPERTY_ATTENDEE_NUMBER:
142                 *out_str = cal_strdup(rec->attendee_number);
143                 break;
144         case CAL_PROPERTY_ATTENDEE_UID:
145                 *out_str = cal_strdup(rec->attendee_uid);
146                 break;
147         case CAL_PROPERTY_ATTENDEE_GROUP:
148                 *out_str = cal_strdup(rec->attendee_group);
149                 break;
150         case CAL_PROPERTY_ATTENDEE_EMAIL:
151                 *out_str = cal_strdup(rec->attendee_email);
152                 break;
153         case CAL_PROPERTY_ATTENDEE_DELEGATEE_URI:
154                 *out_str = cal_strdup(rec->attendee_delegatee_uri);
155                 break;
156         case CAL_PROPERTY_ATTENDEE_DELEGATOR_URI:
157                 *out_str = cal_strdup(rec->attendee_delegator_uri);
158                 break;
159         case CAL_PROPERTY_ATTENDEE_NAME:
160                 *out_str = cal_strdup(rec->attendee_name);
161                 break;
162         case CAL_PROPERTY_ATTENDEE_MEMBER:
163                 *out_str = cal_strdup(rec->attendee_member);
164                 break;
165         default:
166                 ERR("invalid parameter (property:0x%x)", property_id);
167                 return CALENDAR_ERROR_INVALID_PARAMETER;
168         }
169
170         return CALENDAR_ERROR_NONE;
171 }
172
173 static int _cal_record_attendee_get_str_p(calendar_record_h record, unsigned int property_id, char** out_str)
174 {
175         cal_attendee_s *rec = (cal_attendee_s*)(record);
176         switch (property_id) {
177         case CAL_PROPERTY_ATTENDEE_NUMBER:
178                 *out_str = (rec->attendee_number);
179                 break;
180         case CAL_PROPERTY_ATTENDEE_UID:
181                 *out_str = (rec->attendee_uid);
182                 break;
183         case CAL_PROPERTY_ATTENDEE_GROUP:
184                 *out_str = (rec->attendee_group);
185                 break;
186         case CAL_PROPERTY_ATTENDEE_EMAIL:
187                 *out_str = (rec->attendee_email);
188                 break;
189         case CAL_PROPERTY_ATTENDEE_DELEGATEE_URI:
190                 *out_str = (rec->attendee_delegatee_uri);
191                 break;
192         case CAL_PROPERTY_ATTENDEE_DELEGATOR_URI:
193                 *out_str = (rec->attendee_delegator_uri);
194                 break;
195         case CAL_PROPERTY_ATTENDEE_NAME:
196                 *out_str = (rec->attendee_name);
197                 break;
198         case CAL_PROPERTY_ATTENDEE_MEMBER:
199                 *out_str = (rec->attendee_member);
200                 break;
201         default:
202                 ERR("invalid parameter (property:0x%x)", property_id);
203                 return CALENDAR_ERROR_INVALID_PARAMETER;
204         }
205
206         return CALENDAR_ERROR_NONE;
207 }
208
209 static int _cal_record_attendee_get_int(calendar_record_h record, unsigned int property_id, int* out_value)
210 {
211         cal_attendee_s *rec = (cal_attendee_s*)(record);
212         switch (property_id) {
213         case CAL_PROPERTY_ATTENDEE_CUTYPE:
214                 *out_value = (rec->attendee_cutype);
215                 break;
216         case CAL_PROPERTY_ATTENDEE_CT_INDEX:
217                 *out_value = (rec->attendee_ct_index);
218                 break;
219         case CAL_PROPERTY_ATTENDEE_ROLE:
220                 *out_value = (rec->attendee_role);
221                 break;
222         case CAL_PROPERTY_ATTENDEE_STATUS:
223                 *out_value = (rec->attendee_status);
224                 break;
225         case CAL_PROPERTY_ATTENDEE_RSVP:
226                 *out_value = (rec->attendee_rsvp);
227                 break;
228         case CAL_PROPERTY_ATTENDEE_PARENT_ID:
229                 *out_value = (rec->parent_id);
230                 break;
231         default:
232                 ERR("invalid parameter (property:0x%x)", property_id);
233                 return CALENDAR_ERROR_INVALID_PARAMETER;
234         }
235
236         return CALENDAR_ERROR_NONE;
237 }
238
239 static int _cal_record_attendee_set_str(calendar_record_h record, unsigned int property_id, const char* value)
240 {
241         cal_attendee_s *rec = (cal_attendee_s*)(record);
242         switch (property_id) {
243         case CAL_PROPERTY_ATTENDEE_NUMBER:
244                 CAL_FREE(rec->attendee_number);
245                 rec->attendee_number = cal_strdup(value);
246                 break;
247         case CAL_PROPERTY_ATTENDEE_UID:
248                 CAL_FREE(rec->attendee_uid);
249                 rec->attendee_uid = cal_strdup(value);
250                 break;
251         case CAL_PROPERTY_ATTENDEE_GROUP:
252                 CAL_FREE(rec->attendee_group);
253                 rec->attendee_group = cal_strdup(value);
254                 break;
255         case CAL_PROPERTY_ATTENDEE_EMAIL:
256                 CAL_FREE(rec->attendee_email);
257                 rec->attendee_email = cal_strdup(value);
258                 break;
259         case CAL_PROPERTY_ATTENDEE_DELEGATEE_URI:
260                 CAL_FREE(rec->attendee_delegatee_uri);
261                 rec->attendee_delegatee_uri = cal_strdup(value);
262                 break;
263         case CAL_PROPERTY_ATTENDEE_DELEGATOR_URI:
264                 CAL_FREE(rec->attendee_delegator_uri);
265                 rec->attendee_delegator_uri = cal_strdup(value);
266                 break;
267         case CAL_PROPERTY_ATTENDEE_NAME:
268                 CAL_FREE(rec->attendee_name);
269                 rec->attendee_name = cal_strdup(value);
270                 break;
271         case CAL_PROPERTY_ATTENDEE_MEMBER:
272                 CAL_FREE(rec->attendee_member);
273                 rec->attendee_member = cal_strdup(value);
274                 break;
275         default:
276                 ERR("invalid parameter (property:0x%x)", property_id);
277                 return CALENDAR_ERROR_INVALID_PARAMETER;
278         }
279
280         return CALENDAR_ERROR_NONE;
281 }
282
283 static int _cal_record_attendee_set_int(calendar_record_h record, unsigned int property_id, int value)
284 {
285         cal_attendee_s *rec = (cal_attendee_s*)(record);
286         switch (property_id) {
287         case CAL_PROPERTY_ATTENDEE_CUTYPE:
288                 (rec->attendee_cutype) = value;
289                 break;
290         case CAL_PROPERTY_ATTENDEE_CT_INDEX:
291                 (rec->attendee_ct_index) = value;
292                 break;
293         case CAL_PROPERTY_ATTENDEE_ROLE:
294                 (rec->attendee_role) = value;
295                 break;
296         case CAL_PROPERTY_ATTENDEE_STATUS:
297                 (rec->attendee_status) = value;
298                 break;
299         case CAL_PROPERTY_ATTENDEE_RSVP:
300                 (rec->attendee_rsvp) = value;
301                 break;
302         case CAL_PROPERTY_ATTENDEE_PARENT_ID:
303                 (rec->parent_id) = value;
304                 break;
305         default:
306                 ERR("invalid parameter (property:0x%x)", property_id);
307                 return CALENDAR_ERROR_INVALID_PARAMETER;
308         }
309
310         return CALENDAR_ERROR_NONE;
311 }