2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 * @author Lukasz Marek (l.marek@samsung.com)
22 #include <calendar-svc-provider.h>
23 #include <dpl/log/log.h>
24 #include <dpl/scoped_ptr.h>
26 #include "CalendarManager.h"
28 namespace WrtDeviceApis {
43 void Calendar::OnRequestReceived(const EventAddEventPtr &event)
48 if (!event->getEvent()) {
49 ThrowMsg(Commons::NullPointerException, "event parameter is NULL");
51 if (event->getEvent()->getIdIsSet()) {
52 LogWarning("adding event that is already added");
53 event->getEvent()->resetId();
55 DPL::ScopedPtr<EventWrapper> eventWrapper(
56 new EventWrapper(event->getEvent()));
57 eventWrapper->convertAbstractEventToPlatformEvent();
58 if (event->checkCancelled()) {
59 event->setCancelAllowed(true);
60 event->setResult(true);
63 eventWrapper->saveEvent();
64 event->setResult(true);
66 catch (const Commons::Exception &ex)
68 LogError("Error during adding event" << ex.DumpToString());
69 event->setResult(false);
71 event->setCancelAllowed(false);
74 void Calendar::OnRequestReceived(const EventDeleteEventPtr &event)
79 if (!event->getEvent()) {
80 ThrowMsg(Commons::NullPointerException, "event parameter is NULL");
82 if (!event->getEvent()->getIdIsSet()) {
83 ThrowMsg(Commons::InvalidArgumentException,
84 "Cannot delete non-existing event.");
86 DPL::ScopedPtr<EventWrapper> eventWrapper(new EventWrapper(
88 eventWrapper->convertAbstractEventToPlatformEvent();
89 if (event->checkCancelled()) {
90 event->setCancelAllowed(true);
91 event->setResult(true);
94 eventWrapper->deleteEvent();
95 event->setResult(true);
97 catch (const Commons::NotFoundException &ex)
99 LogError("event doesn't exist");
100 event->setResult(false);
101 event->setExceptionCode(Commons::ExceptionCodes::NotFoundException);
103 catch (const Commons::Exception &ex)
105 LogError("Error during deleting event " << ex.DumpToString());
106 event->setResult(false);
108 event->setCancelAllowed(false);
111 void Calendar::OnRequestReceived(const EventUpdateEventPtr &event)
116 if (!event->getEvent()) {
117 ThrowMsg(Commons::NullPointerException, "event parameter is NULL");
119 if (!event->getEvent()->getIdIsSet()) {
121 Commons::InvalidArgumentException,
122 "Cannot update non-existing event. Event needs adding or ID is wrong");
124 DPL::ScopedPtr<EventWrapper> eventWrapper(new EventWrapper(
126 eventWrapper->convertAbstractEventToPlatformEvent();
127 if (event->checkCancelled()) {
128 event->setCancelAllowed(true);
129 event->setResult(true);
132 eventWrapper->saveEvent();
133 event->setResult(true);
135 catch (const Commons::Exception &ex)
137 LogError("Error during updating event " << ex.DumpToString());
138 event->setResult(false);
140 event->setCancelAllowed(false);
143 void Calendar::OnRequestReceived(const EventFindEventsPtr &event)
146 const EventFilterPtr &filter = event->getFilter();
147 cal_struct *platformEvent = NULL;
148 cal_iter *iter = NULL;
150 event->setResult(true);
154 calendar_svc_get_all(0, 0, CAL_STRUCT_SCHEDULE, &iter)) {
155 ThrowMsg(Commons::PlatformException, "Can't get all records");
157 //TODO: currently platform starts iteration with below function
158 // It's possible that current approach will change to be familiar with std iterators
160 while (CAL_SUCCESS == calendar_svc_iter_next(iter)) {
161 event->tryCancelled();
163 calendar_svc_iter_get_info(iter, &platformEvent)) {
164 ThrowMsg(Commons::PlatformException, "Can't get event info.");
167 int eventId = calendar_svc_struct_get_int(platformEvent,
168 CAL_VALUE_INT_INDEX);
169 if (CAL_SUCCESS != calendar_svc_struct_free(&platformEvent)) {
170 LogError("Can't free calendar event struct.");
173 DPL::ScopedPtr<EventWrapper> eventWrapper(new EventWrapper());
174 eventWrapper->loadEvent(eventId);
175 if (!filter || eventWrapper->matchFilters(filter)) {
176 if (foundCnt >= event->getFirstEvent() &&
177 (event->getLastEvent() == -1 || foundCnt <=
178 event->getLastEvent())) {
179 event->addEvent(eventWrapper->getAbstractEvent());
185 catch (const Commons::Exception &ex)
187 LogError("Exception: " << ex.DumpToString());
188 event->setResult(false);
190 //According to example in calendar-svc-provider.h it's not needed to pass here
191 //iter set on first element
192 calendar_svc_iter_remove(&iter);
193 event->setCancelAllowed(true);
196 void Calendar::OnRequestReceived(const EventCreateEventPtr &event)
201 event->setEvent(CalendarEventPtr(new CalendarEvent()));
202 event->setResult(event->getEvent().Get() != NULL);
204 catch (const Commons::Exception &ex)
206 LogError("Error during creating an event " << ex.DumpToString());
207 event->setResult(false);