3b438e0a55c89b474c79287487dd362650cabe58
[platform/core/api/webapi-plugins.git] / src / calendar / calendar_instance.cc
1 /*
2  * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
3  *
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
7  *
8  *        http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 #include "calendar/calendar_instance.h"
18
19 #include "common/converter.h"
20
21 #include "calendar/calendar.h"
22 #include "calendar/calendar_manager.h"
23 #include "common/task-queue.h"
24 #include "common/tools.h"
25
26 #include <calendar-service2/calendar.h>
27 #include <map>
28 #include <memory>
29 #include "calendar_record.h"
30
31 namespace extension {
32 namespace calendar {
33
34 namespace {
35 const std::string kPrivilegeCalendarRead = "http://tizen.org/privilege/calendar.read";
36 const std::string kPrivilegeCalendarWrite = "http://tizen.org/privilege/calendar.write";
37 }
38
39 using namespace common;
40 using namespace extension::calendar;
41
42 CalendarInstance::CalendarInstance() : calendar_(*this) {
43   ScopeLogger();
44   using std::placeholders::_1;
45   using std::placeholders::_2;
46
47 #define REGISTER_METHOD(M) \
48     RegisterSyncHandler(#M, std::bind(&CalendarInstance::M, this, _1, _2))
49
50   REGISTER_METHOD(CalendarGet);
51   REGISTER_METHOD(CalendarAdd);
52   REGISTER_METHOD(CalendarUpdate);
53   REGISTER_METHOD(CalendarRemove);
54   REGISTER_METHOD(CalendarAddChangeListener);
55   REGISTER_METHOD(CalendarRemoveChangeListener);
56
57   REGISTER_METHOD(CalendarManagerAddCalendar);
58   REGISTER_METHOD(CalendarManagerGetCalendar);
59   REGISTER_METHOD(CalendarManagerRemoveCalendar);
60
61   REGISTER_METHOD(CalendarAddBatch);
62   REGISTER_METHOD(CalendarUpdateBatch);
63   REGISTER_METHOD(CalendarRemoveBatch);
64   REGISTER_METHOD(CalendarUpdateBatch);
65   REGISTER_METHOD(CalendarManagerGetCalendars);
66   REGISTER_METHOD(CalendarFind);
67
68 #undef REGISTER_METHOD
69 }
70
71 CalendarInstance::~CalendarInstance() {
72   ScopeLogger();
73 }
74
75 void CalendarInstance::CalendarGet(const JsonValue& args, JsonObject& out) {
76   ScopeLogger();
77   CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarRead, &out);
78
79   JsonValue val{JsonObject{}};
80
81   PlatformResult status = calendar_.Get(common::JsonCast<JsonObject>(args), val.get<JsonObject>());
82
83   if (status.IsSuccess()) {
84     ReportSuccess(val, out);
85   } else {
86     LogAndReportError(status, &out);
87   }
88 }
89
90 void CalendarInstance::CalendarAdd(const JsonValue& args, JsonObject& out) {
91   ScopeLogger();
92   CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarWrite, &out);
93
94   JsonValue val{JsonObject{}};
95
96   PlatformResult status = calendar_.Add(common::JsonCast<JsonObject>(args), val.get<JsonObject>());
97
98   if (status.IsSuccess()) {
99     ReportSuccess(val, out);
100   } else {
101     LogAndReportError(status, &out);
102   }
103 }
104
105 void CalendarInstance::CalendarAddBatch(const JsonValue& args, JsonObject& out) {
106   ScopeLogger();
107   CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarWrite, &out);
108
109   const double callback_id = args.get("callbackId").get<double>();
110   auto get = [=](const std::shared_ptr<JsonValue>& response) -> void {
111     LoggerD("CalendarAddBatch->get");
112     JsonValue result = JsonValue(JsonArray());
113     PlatformResult status =
114         calendar_.AddBatch(common::JsonCast<JsonObject>(args), result.get<JsonArray>());
115
116     if (status.IsSuccess()) {
117       ReportSuccess(result, response->get<picojson::object>());
118     } else {
119       LogAndReportError(status, &response->get<picojson::object>());
120     }
121   };
122
123   auto get_response = [callback_id, this](const std::shared_ptr<JsonValue>& response) -> void {
124     ScopeLogger("Entered into asynchronous function, CalendarAddBatch->get_response");
125     picojson::object& obj = response->get<picojson::object>();
126     obj.insert(std::make_pair("callbackId", picojson::value(callback_id)));
127     LoggerD("callback is %s", response->serialize().c_str());
128     Instance::PostMessage(this, response->serialize().c_str());
129   };
130
131   auto data = std::shared_ptr<JsonValue>(new JsonValue(JsonObject()));
132
133   TaskQueue::GetInstance().Queue<JsonValue>(get, get_response, data);
134 }
135
136 void CalendarInstance::CalendarUpdate(const JsonValue& args, JsonObject& out) {
137   ScopeLogger();
138   CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarWrite, &out);
139
140   JsonValue val{JsonObject{}};
141
142   PlatformResult status =
143       calendar_.Update(common::JsonCast<JsonObject>(args), val.get<JsonObject>());
144
145   if (status.IsSuccess()) {
146     ReportSuccess(val, out);
147   } else {
148     LogAndReportError(status, &out);
149   }
150 }
151
152 void CalendarInstance::CalendarUpdateBatch(const JsonValue& args, JsonObject& out) {
153   ScopeLogger();
154   CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarWrite, &out);
155
156   const double callback_id = args.get("callbackId").get<double>();
157   auto get = [=](const std::shared_ptr<JsonValue>& response) -> void {
158     ScopeLogger("Entered into asynchronous function, CalendarUpdateBatch->get");
159
160     JsonValue result = JsonValue(JsonArray());
161     PlatformResult status =
162         calendar_.UpdateBatch(common::JsonCast<JsonObject>(args), result.get<JsonArray>());
163
164     if (status.IsSuccess()) {
165       ReportSuccess(result, response->get<picojson::object>());
166     } else {
167       LogAndReportError(status, &response->get<picojson::object>());
168     }
169   };
170
171   auto get_response = [callback_id, this](const std::shared_ptr<JsonValue>& response) -> void {
172     ScopeLogger("Entered into asynchronous function, CalendarUpdateBatch->get_response");
173
174     picojson::object& obj = response->get<picojson::object>();
175     obj.insert(std::make_pair("callbackId", picojson::value(callback_id)));
176     LoggerD("callback is %s", response->serialize().c_str());
177     Instance::PostMessage(this, response->serialize().c_str());
178   };
179
180   auto data = std::shared_ptr<JsonValue>(new JsonValue(JsonObject()));
181
182   TaskQueue::GetInstance().Queue<JsonValue>(get, get_response, data);
183 }
184
185 void CalendarInstance::CalendarRemove(const JsonValue& args, JsonObject& out) {
186   ScopeLogger();
187   CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarWrite, &out);
188
189   JsonValue val{JsonObject{}};
190
191   PlatformResult status =
192       calendar_.Remove(common::JsonCast<JsonObject>(args), val.get<JsonObject>());
193
194   if (status.IsSuccess()) {
195     ReportSuccess(out);
196   } else {
197     LogAndReportError(status, &val.get<JsonObject>());
198   }
199 }
200
201 void CalendarInstance::CalendarRemoveBatch(const JsonValue& args, JsonObject& out) {
202   ScopeLogger();
203   CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarWrite, &out);
204
205   const double callback_id = args.get("callbackId").get<double>();
206   auto get = [=](const std::shared_ptr<JsonValue>& response) -> void {
207     ScopeLogger("Entered into asynchronous function, CalendarRemoveBatch->get");
208
209     JsonValue result = JsonValue(JsonArray());
210     PlatformResult status =
211         calendar_.RemoveBatch(common::JsonCast<JsonObject>(args), result.get<JsonArray>());
212
213     if (status.IsSuccess()) {
214       ReportSuccess(result, response->get<picojson::object>());
215     } else {
216       LogAndReportError(status, &response->get<picojson::object>());
217     }
218   };
219
220   auto get_response = [callback_id, this](const std::shared_ptr<JsonValue>& response) -> void {
221     ScopeLogger("Entered into asynchronous function, CalendarRemoveBatch->get_response");
222
223     picojson::object& obj = response->get<picojson::object>();
224     obj.insert(std::make_pair("callbackId", picojson::value(callback_id)));
225     LoggerD("callback is %s", response->serialize().c_str());
226     Instance::PostMessage(this, response->serialize().c_str());
227   };
228
229   auto data = std::shared_ptr<JsonValue>(new JsonValue(JsonObject()));
230
231   TaskQueue::GetInstance().Queue<JsonValue>(get, get_response, data);
232 }
233
234 void CalendarInstance::CalendarFind(const JsonValue& args, JsonObject& out) {
235   ScopeLogger();
236   CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarRead, &out);
237
238   const double callback_id = args.get("callbackId").get<double>();
239   auto get = [=](const std::shared_ptr<JsonValue>& response) -> void {
240     ScopeLogger("Entered into asynchronous function, CalendarFind->get");
241
242     JsonValue result = JsonValue(JsonArray());
243     PlatformResult status =
244         calendar_.Find(common::JsonCast<JsonObject>(args), result.get<JsonArray>());
245
246     if (status.IsSuccess()) {
247       ReportSuccess(result, response->get<picojson::object>());
248     } else {
249       LogAndReportError(status, &response->get<picojson::object>());
250     }
251   };
252
253   auto get_response = [callback_id, this](const std::shared_ptr<JsonValue>& response) -> void {
254     ScopeLogger("Entered into asynchronous function, CalendarFind->get_response");
255
256     picojson::object& obj = response->get<picojson::object>();
257     obj.insert(std::make_pair("callbackId", picojson::value(callback_id)));
258     LoggerD("callback is %s", response->serialize().c_str());
259     Instance::PostMessage(this, response->serialize().c_str());
260   };
261
262   auto data = std::shared_ptr<JsonValue>(new JsonValue(JsonObject()));
263
264   TaskQueue::GetInstance().Queue<JsonValue>(get, get_response, data);
265 }
266
267 void CalendarInstance::CalendarAddChangeListener(const JsonValue& args, JsonObject& out) {
268   ScopeLogger();
269   CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarRead, &out);
270
271   JsonValue val{JsonObject{}};
272
273   PlatformResult status =
274       calendar_.AddChangeListener(common::JsonCast<JsonObject>(args), val.get<JsonObject>());
275
276   if (status.IsSuccess()) {
277     ReportSuccess(out);
278   } else {
279     LogAndReportError(status, &val.get<JsonObject>());
280   }
281 }
282
283 void CalendarInstance::CalendarRemoveChangeListener(const JsonValue& args, JsonObject& out) {
284   ScopeLogger();
285   CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarRead, &out);
286
287   JsonValue val{JsonObject{}};
288
289   PlatformResult status =
290       calendar_.RemoveChangeListener(common::JsonCast<JsonObject>(args), val.get<JsonObject>());
291
292   if (status.IsSuccess()) {
293     ReportSuccess(out);
294   } else {
295     LogAndReportError(status, &val.get<JsonObject>());
296   }
297 }
298
299 // CalendarManager
300 void CalendarInstance::CalendarManagerAddCalendar(const JsonValue& args, JsonObject& out) {
301   ScopeLogger();
302   CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarWrite, &out);
303
304   JsonValue val{JsonObject{}};
305   PlatformResult status = CalendarManager::GetInstance().AddCalendar(
306       common::JsonCast<JsonObject>(args), val.get<JsonObject>());
307
308   if (status.IsSuccess()) {
309     ReportSuccess(val, out);
310   } else {
311     LogAndReportError(status, &out);
312   }
313 }
314
315 void CalendarInstance::CalendarManagerGetCalendar(const JsonValue& args, JsonObject& out) {
316   ScopeLogger();
317   CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarRead, &out);
318
319   JsonValue val{JsonObject{}};
320   PlatformResult status = CalendarManager::GetInstance().GetCalendar(
321       common::JsonCast<JsonObject>(args), val.get<JsonObject>());
322
323   if (status.IsSuccess()) {
324     ReportSuccess(val, out);
325   } else {
326     LogAndReportError(status, &out);
327   }
328 }
329
330 void CalendarInstance::CalendarManagerGetCalendars(const JsonValue& args, JsonObject& out) {
331   ScopeLogger();
332   CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarRead, &out);
333
334   const double callback_id = args.get("callbackId").get<double>();
335   auto get = [=](const std::shared_ptr<JsonValue>& response) -> void {
336     ScopeLogger("Entered into asynchronous function, CalendarManagerGetCalendars->get");
337
338     JsonValue result = JsonValue(JsonArray());
339
340     PlatformResult status = CalendarManager::GetInstance().GetCalendars(
341         common::JsonCast<JsonObject>(args), result.get<JsonArray>());
342
343     if (status.IsSuccess()) {
344       ReportSuccess(result, response->get<picojson::object>());
345     } else {
346       LogAndReportError(status, &response->get<JsonObject>());
347     }
348   };
349
350   auto get_response = [callback_id, this](const std::shared_ptr<JsonValue>& response) -> void {
351     ScopeLogger("Entered into asynchronous function, CalendarManagerGetCalendars->get_response");
352
353     picojson::object& obj = response->get<picojson::object>();
354     obj.insert(std::make_pair("callbackId", picojson::value(callback_id)));
355     LoggerD("callback is %s", response->serialize().c_str());
356     Instance::PostMessage(this, response->serialize().c_str());
357   };
358
359   auto data = std::shared_ptr<JsonValue>(new JsonValue(JsonObject()));
360
361   TaskQueue::GetInstance().Queue<JsonValue>(get, get_response, data);
362 }
363
364 void CalendarInstance::CalendarManagerRemoveCalendar(const JsonValue& args, JsonObject& out) {
365   ScopeLogger();
366   CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarWrite, &out);
367
368   JsonValue val{JsonObject{}};
369   PlatformResult status = CalendarManager::GetInstance().RemoveCalendar(
370       common::JsonCast<JsonObject>(args), val.get<JsonObject>());
371
372   if (status.IsSuccess()) {
373     ReportSuccess(val, out);
374   } else {
375     LogAndReportError(status, &out);
376   }
377 }
378
379 }  // namespace calendar
380 }  // namespace extension