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.
19 #include <CommonsJavaScript/Validator.h>
20 #include <CommonsJavaScript/JSUtils.h>
21 #include "JSCalendarItem.h"
22 #include "JSCalendarItemProperties.h"
23 #include "JSEventId.h"
24 #include "CalendarConverter.h"
25 #include "JSCalendar.h"
26 #include "JSCalendarManager.h"
27 #include "JSCategoryArray.h"
28 #include "JSAttendee.h"
29 #include "JSRecurrenceRule.h"
30 #include <Tizen/TimeUtil/TimeUtilConverter.h>
32 using namespace TizenApis::Api::Calendar;
33 using namespace WrtDeviceApis::Commons;
34 using namespace WrtDeviceApis::CommonsJavaScript;
37 const int DEFAULT_EVENT_INTERVAL = 1;
44 std::vector<std::string> CalendarConverter::m_allowedAttributes;
45 std::vector<std::string> CalendarConverter::m_allowedCreateProperties;
47 CalendarConverter::CalendarConverter(JSContextRef context, CalendarEvent::CalendarType calendarType) : Converter(context)
51 m_calendarType = calendarType;
53 if (m_allowedAttributes.size() == 0) { // for search filter
54 m_allowedAttributes.push_back("id");
55 m_allowedAttributes.push_back("summary");
56 m_allowedAttributes.push_back("description");
57 m_allowedAttributes.push_back("location");
58 m_allowedAttributes.push_back("category");
59 m_allowedAttributes.push_back("status");
60 m_allowedAttributes.push_back("initialStartDate");
61 m_allowedAttributes.push_back("endStartDate");
63 if (m_allowedCreateProperties.size() == 0) {
64 m_allowedCreateProperties.push_back("description");
65 m_allowedCreateProperties.push_back("summary");
66 m_allowedCreateProperties.push_back("startDate");
67 m_allowedCreateProperties.push_back("duration");
68 m_allowedCreateProperties.push_back("location");
69 m_allowedCreateProperties.push_back("categories");
70 m_allowedCreateProperties.push_back("status");
71 m_allowedCreateProperties.push_back("alarms");
72 m_allowedCreateProperties.push_back("isAllDay");
73 m_allowedCreateProperties.push_back("organizer");
74 m_allowedCreateProperties.push_back("attendees");
75 m_allowedCreateProperties.push_back("position");
76 m_allowedCreateProperties.push_back("visibility");
77 m_allowedCreateProperties.push_back("lastModifiedDate");
78 m_allowedCreateProperties.push_back("availability");
79 m_allowedCreateProperties.push_back("recurrenceRule");
80 m_allowedCreateProperties.push_back("isDetached");
81 m_allowedCreateProperties.push_back("attributesOfInterest");
85 CalendarConverter::~CalendarConverter()
90 JSValueRef CalendarConverter::toJSValueRefItem(const CalendarEventPtr& arg)
92 return JSUtils::makeObject(m_context, JSCalendarItem::getClassRef(), arg);
95 JSValueRef CalendarConverter::toJSValueRef(const CalendarEventListPtr &arg)
97 return toJSValueRef_(*arg, &CalendarConverter::toJSValueRefItem, this);
100 JSValueRef CalendarConverter::toJSValueRefItemProperties(const CalendarEventPtr& arg)
102 return JSUtils::makeObject(m_context, JSCalendarItemProperties::getClassRef(), arg);
105 JSValueRef CalendarConverter::toJSValueRefCalendar(const ICalendarPtr& arg)
107 CalendarPrivObject *priv = new CalendarPrivObject(m_context, arg);
108 return JSObjectMake(m_context, JSCalendar::getClassRef(), priv);
111 JSValueRef CalendarConverter::toJSValueRef(const std::vector<ICalendarPtr> &arg)
113 return toJSValueRef_(arg, &CalendarConverter::toJSValueRefCalendar, this);
116 JSValueRef CalendarConverter::toJSValueRef(const EventIdPtr& arg)
118 return JSUtils::makeObject(m_context, JSEventId::getClassRef(), arg);
121 CalendarEvent::EventAlarmType CalendarConverter::toEventAlarmType(int tizenValue)
124 switch (tizenValue) {
125 case JSCalendarManager::NO_ALARM:
126 return CalendarEvent::NO_ALARM;
127 case JSCalendarManager::SILENT_ALARM:
128 return CalendarEvent::SILENT_ALARM;
129 case JSCalendarManager::SOUND_ALARM:
130 return CalendarEvent::SOUND_ALARM;
134 ThrowMsg(InvalidArgumentException, "Alarm type has wrong value");
137 int CalendarConverter::toTizenValue(
138 CalendarEvent::EventAlarmType abstractValue) const
140 switch (abstractValue) {
141 case CalendarEvent::NO_ALARM:
142 return JSCalendarManager::NO_ALARM;
143 case CalendarEvent::SILENT_ALARM:
144 return JSCalendarManager::SILENT_ALARM;
145 case CalendarEvent::SOUND_ALARM:
146 return JSCalendarManager::SOUND_ALARM;
150 ThrowMsg(ConversionException, "Invalid alarm type");
153 CalendarEvent::EventStatus CalendarConverter::toEventStatus(std::string tizenValue) const
155 if(!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_TENTATIVE_STATUS))
156 return CalendarEvent::TENTATIVE_STATUS;
157 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_CONFIRMED_STATUS))
158 return CalendarEvent::CONFIRMED_STATUS;
159 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_CANCELLED_STATUS))
160 return CalendarEvent::CANCELLED_STATUS;
161 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_NEEDS_ACTION_STATUS))
162 return CalendarEvent::NEEDS_ACTION_STATUS;
163 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_IN_PROCESS_STATUS))
164 return CalendarEvent::IN_PROCESS_STATUS;
165 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_COMPLETED_STATUS))
166 return CalendarEvent::COMPLETED_STATUS;
168 // default value setting.
169 if(m_calendarType == CalendarEvent::EVENT_TYPE) {
170 return CalendarEvent::TENTATIVE_STATUS;
172 return CalendarEvent::NEEDS_ACTION_STATUS;
176 std::string CalendarConverter::toTizenValue(CalendarEvent::EventStatus abstractValue)
179 switch (abstractValue) {
180 case CalendarEvent::TENTATIVE_STATUS:
181 return TIZEN_CALENDAR_PROPERTY_TENTATIVE_STATUS;
182 case CalendarEvent::CONFIRMED_STATUS:
183 return TIZEN_CALENDAR_PROPERTY_CONFIRMED_STATUS;
184 case CalendarEvent::CANCELLED_STATUS:
185 return TIZEN_CALENDAR_PROPERTY_CANCELLED_STATUS;
186 case CalendarEvent::NEEDS_ACTION_STATUS:
187 return TIZEN_CALENDAR_PROPERTY_NEEDS_ACTION_STATUS;
188 case CalendarEvent::IN_PROCESS_STATUS:
189 return TIZEN_CALENDAR_PROPERTY_IN_PROCESS_STATUS;
190 case CalendarEvent::COMPLETED_STATUS:
191 return TIZEN_CALENDAR_PROPERTY_COMPLETED_STATUS;
196 ThrowMsg(ConversionException, "Invalid status");
199 EventRecurrenceRule::EventRecurrence CalendarConverter::toRecurrenceFrequency(
200 std::string tizenValue) const
202 if(!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_NO_RECURRENCE))
203 return EventRecurrenceRule::NO_RECURRENCE;
204 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_DAILY_RECURRENCE))
205 return EventRecurrenceRule::DAILY_RECURRENCE;
206 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_WEEKLY_RECURRENCE))
207 return EventRecurrenceRule::WEEKLY_RECURRENCE;
208 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_MONTHLY_RECURRENCE))
209 return EventRecurrenceRule::MONTHLY_RECURRENCE;
210 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_YEARLY_RECURRENCE))
211 return EventRecurrenceRule::YEARLY_RECURRENCE;
213 return EventRecurrenceRule::NO_RECURRENCE;
216 std::string CalendarConverter::toTizenValue(
217 EventRecurrenceRule::EventRecurrence abstractValue) const
219 switch (abstractValue) {
220 case EventRecurrenceRule::NO_RECURRENCE:
221 return TIZEN_CALENDAR_PROPERTY_NO_RECURRENCE;
222 case EventRecurrenceRule::DAILY_RECURRENCE:
223 return TIZEN_CALENDAR_PROPERTY_DAILY_RECURRENCE;
224 case EventRecurrenceRule::WEEKLY_RECURRENCE:
225 case EventRecurrenceRule::WEEKDAY_RECURRENCE:
226 return TIZEN_CALENDAR_PROPERTY_WEEKLY_RECURRENCE;
227 case EventRecurrenceRule::MONTHLY_RECURRENCE:
228 case EventRecurrenceRule::MONTHLY_ON_DAY_RECURRENCE:
229 return TIZEN_CALENDAR_PROPERTY_MONTHLY_RECURRENCE;
230 case EventRecurrenceRule::YEARLY_RECURRENCE:
231 return TIZEN_CALENDAR_PROPERTY_YEARLY_RECURRENCE;
236 return TIZEN_CALENDAR_PROPERTY_NO_RECURRENCE;
239 EventRecurrenceRulePtr CalendarConverter::toEventRecurrenceRule(JSValueRef rrule)
242 EventRecurrenceRulePtr result(new EventRecurrenceRule());
243 const ScopedJSStringRef frequencyStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_FREQUENCY));
244 const ScopedJSStringRef intervalStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_INTERVAL));
245 const ScopedJSStringRef endDateStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_END_DATE));
246 const ScopedJSStringRef occurrenceCountStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_OCCURRENCE_COUNT));
247 // const ScopedJSStringRef daysOfTheMonthStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_DAYS_OF_THE_MONTH));
248 const ScopedJSStringRef daysOfTheWeekStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_DAYS_OF_THE_WEEK));
249 // const ScopedJSStringRef daysOfTheYearStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_DAYS_OF_THE_YEAR));
250 // const ScopedJSStringRef weeksOfTheYearStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_WEEKS_OF_THE_YEAR));
251 const ScopedJSStringRef setPositionStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_SET_POSITION));
252 const ScopedJSStringRef exceptionsStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_EXCEPTIONS));
254 JSObjectRef arg = toJSObjectRef(rrule);
256 JSValueRef frequencyData = JSObjectGetProperty(m_context, arg, frequencyStr.get(), NULL);
257 JSValueRef intervalData = JSObjectGetProperty(m_context, arg, intervalStr.get(), NULL);
258 JSValueRef endDateData = JSObjectGetProperty(m_context, arg, endDateStr.get(), NULL);
259 JSValueRef occurrenceCountData = JSObjectGetProperty(m_context, arg, occurrenceCountStr.get(), NULL);
260 // JSValueRef daysOfTheMonthData = JSObjectGetProperty(m_context, arg, daysOfTheMonthStr.get(), NULL);
261 JSValueRef daysOfTheWeekData = JSObjectGetProperty(m_context, arg, daysOfTheWeekStr.get(), NULL);
262 // JSValueRef daysOfTheYearData = JSObjectGetProperty(m_context, arg, daysOfTheYearStr.get(), NULL);
263 // JSValueRef weeksOfTheYearData = JSObjectGetProperty(m_context, arg, weeksOfTheYearStr.get(), NULL);
264 JSValueRef setPositionData = JSObjectGetProperty(m_context, arg, setPositionStr.get(), NULL);
265 JSValueRef exceptionsData = JSObjectGetProperty(m_context, arg, exceptionsStr.get(), NULL);
267 if (!JSValueIsUndefined(m_context, frequencyData)) {
268 result->setFrequency(toRecurrenceFrequency(toString(frequencyData)));
270 if (!JSValueIsUndefined(m_context, intervalData)) {
271 result->setInterval(toInt(intervalData));
273 result->setInterval(DEFAULT_EVENT_INTERVAL);
275 if (!JSValueIsUndefined(m_context, endDateData)) {
276 if (!JSValueIsNull(m_context, endDateData)) {
277 result->setEndDate(toDateTimeT(endDateData));
279 result->resetEndDate();
282 if (!JSValueIsUndefined(m_context, occurrenceCountData)) {
283 result->setOccurrenceCount(toLong(occurrenceCountData));
285 /* if (!JSValueIsUndefined(m_context, daysOfTheMonthData)) {
286 result->setDaysOfTheMonth(toVectorOfInts(daysOfTheMonthData));
288 if (!JSValueIsUndefined(m_context, daysOfTheWeekData)) {
289 result->setDaysOfTheWeek(toVectorOfStrings(daysOfTheWeekData));
291 /* if (!JSValueIsUndefined(m_context, daysOfTheYearData)) {
292 result->setDaysOfTheYear(toVectorOfInts(daysOfTheYearData));
294 if (!JSValueIsUndefined(m_context, weeksOfTheYearData)) {
295 result->setWeeksOfTheYear(toVectorOfInts(weeksOfTheYearData));
297 if (!JSValueIsUndefined(m_context, setPositionData)) {
298 Throw(UnsupportedException);
299 //result->setSetPosition(toBool(setPositionData));
301 if (!JSValueIsUndefined(m_context, exceptionsData)) {
302 result->setExceptions(toVectorOfTimeT(exceptionsData));
308 CalendarEvent::EventVisibility CalendarConverter::toEventVisibility(std::string tizenValue)
311 if(!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_PUBLIC_VISIBILITY))
312 return CalendarEvent::PUBLIC_VISIBILITY;
313 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_PRIVATE_VISIBILITY))
314 return CalendarEvent::PRIVATE_VISIBILITY;
315 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_CONFIDENTIAL_VISIBILITY))
316 return CalendarEvent::CONFIDENTIAL_VISIBILITY;
318 return CalendarEvent::PUBLIC_VISIBILITY;
321 std::string CalendarConverter::toTizenValue(
322 CalendarEvent::EventVisibility abstractValue) const
324 switch (abstractValue) {
325 case CalendarEvent::PUBLIC_VISIBILITY:
326 return TIZEN_CALENDAR_PROPERTY_PUBLIC_VISIBILITY;
327 case CalendarEvent::PRIVATE_VISIBILITY:
328 return TIZEN_CALENDAR_PROPERTY_PRIVATE_VISIBILITY;
329 case CalendarEvent::CONFIDENTIAL_VISIBILITY:
330 return TIZEN_CALENDAR_PROPERTY_CONFIDENTIAL_VISIBILITY;
335 return TIZEN_CALENDAR_PROPERTY_PUBLIC_VISIBILITY;
338 CalendarEvent::EventAvailability CalendarConverter::toEventAvailability(std::string tizenValue)
341 if(!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_BUSY))
342 return CalendarEvent::BUSY_FB;
343 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_BUSY_UNAVAILABLE_FB))
344 return CalendarEvent::BUSY_UNAVAILABLE_FB;
345 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_FREE))
346 return CalendarEvent::FREE_FB;
347 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_BUSY_TENTATIVE))
348 return CalendarEvent::BUSY_TENTATIVE_FB;
350 return CalendarEvent::BUSY_FB;
353 std::string CalendarConverter::toTizenValue(
354 CalendarEvent::EventAvailability abstractValue) const
356 switch (abstractValue) {
357 case CalendarEvent::BUSY_FB:
358 return TIZEN_CALENDAR_PROPERTY_BUSY;
359 case CalendarEvent::BUSY_UNAVAILABLE_FB:
360 return TIZEN_CALENDAR_PROPERTY_BUSY_UNAVAILABLE_FB;
361 case CalendarEvent::FREE_FB:
362 return TIZEN_CALENDAR_PROPERTY_FREE;
363 case CalendarEvent::BUSY_TENTATIVE_FB:
364 return TIZEN_CALENDAR_PROPERTY_BUSY_TENTATIVE;
369 return TIZEN_CALENDAR_PROPERTY_BUSY;
372 EventAttendee::EventAttendeeRole CalendarConverter::toEventAttendeeRole(std::string tizenValue)
375 if(!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_REQ_PARTICIPANT_ROLE))
376 return EventAttendee::REQ_PARTICIPANT_ROLE;
377 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_OPT_PARTICIPANT_ROLE))
378 return EventAttendee::OPT_PARTICIPANT_ROLE;
379 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_NON_PARTICIPANT_ROLE))
380 return EventAttendee::NON_PARTICIPANT_ROLE;
381 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_CHAIR_ROLE))
382 return EventAttendee::CHAIR_ROLE;
384 return EventAttendee::REQ_PARTICIPANT_ROLE;
387 std::string CalendarConverter::toTizenValue(
388 EventAttendee::EventAttendeeRole abstractValue) const
390 switch (abstractValue) {
391 case EventAttendee::REQ_PARTICIPANT_ROLE:
392 return TIZEN_CALENDAR_PROPERTY_REQ_PARTICIPANT_ROLE;
393 case EventAttendee::OPT_PARTICIPANT_ROLE:
394 return TIZEN_CALENDAR_PROPERTY_OPT_PARTICIPANT_ROLE;
395 case EventAttendee::NON_PARTICIPANT_ROLE:
396 return TIZEN_CALENDAR_PROPERTY_NON_PARTICIPANT_ROLE;
397 case EventAttendee::CHAIR_ROLE:
398 return TIZEN_CALENDAR_PROPERTY_CHAIR_ROLE;
402 return TIZEN_CALENDAR_PROPERTY_REQ_PARTICIPANT_ROLE;
405 EventAttendee::EventAttendeeStatus CalendarConverter::toEventAttendeeStatus(std::string tizenValue)
408 if(!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_PENDING_STATUS))
409 return EventAttendee::PENDING_AT_STATUS;
410 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_ACCEPTED_STATUS))
411 return EventAttendee::ACCEPTED_AT_STATUS;
412 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_DECLINED_STATUS))
413 return EventAttendee::DECLINED_AT_STATUS;
414 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_TENTATIVE_STATUS))
415 return EventAttendee::TENTATIVE_AT_STATUS;
416 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_DELEGATED_STATUS))
417 return EventAttendee::DELEGATED_AT_STATUS;
418 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_COMPLETED_STATUS))
419 return EventAttendee::COMPLETED_AT_STATUS;
420 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_IN_PROCESS_STATUS))
421 return EventAttendee::IN_PROCESS_AT_STATUS;
423 return EventAttendee::PENDING_AT_STATUS;
426 std::string CalendarConverter::toTizenValue(
427 EventAttendee::EventAttendeeStatus abstractValue) const
429 switch (abstractValue) {
430 case EventAttendee::PENDING_AT_STATUS:
431 return TIZEN_CALENDAR_PROPERTY_PENDING_STATUS;
432 case EventAttendee::ACCEPTED_AT_STATUS:
433 return TIZEN_CALENDAR_PROPERTY_ACCEPTED_STATUS;
434 case EventAttendee::DECLINED_AT_STATUS:
435 return TIZEN_CALENDAR_PROPERTY_DECLINED_STATUS;
436 case EventAttendee::TENTATIVE_AT_STATUS:
437 return TIZEN_CALENDAR_PROPERTY_TENTATIVE_STATUS;
438 case EventAttendee::DELEGATED_AT_STATUS:
439 return TIZEN_CALENDAR_PROPERTY_DELEGATED_STATUS;
440 case EventAttendee::COMPLETED_AT_STATUS:
441 return TIZEN_CALENDAR_PROPERTY_COMPLETED_STATUS;
442 case EventAttendee::IN_PROCESS_AT_STATUS:
443 return TIZEN_CALENDAR_PROPERTY_IN_PROCESS_STATUS;
447 return TIZEN_CALENDAR_PROPERTY_PENDING_STATUS;
450 EventAttendee::EventAttendeeType CalendarConverter::toEventAttendeeType(std::string tizenValue)
453 if(!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_INDIVIDUAL_TYPE))
454 return EventAttendee::INDIVIDUAL_TYPE;
455 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_GROUP_TYPE))
456 return EventAttendee::GROUP_TYPE;
457 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_RESOURCE_TYPE))
458 return EventAttendee::RESOURCE_TYPE;
459 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_ROOM_TYPE))
460 return EventAttendee::ROOM_TYPE;
461 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_UNKNOWN_TYPE))
462 return EventAttendee::UNKNOWN_TYPE;
464 return EventAttendee::INDIVIDUAL_TYPE;
467 std::string CalendarConverter::toTizenValue(
468 EventAttendee::EventAttendeeType abstractValue) const
470 switch (abstractValue) {
471 case EventAttendee::INDIVIDUAL_TYPE:
472 return TIZEN_CALENDAR_PROPERTY_INDIVIDUAL_TYPE;
473 case EventAttendee::GROUP_TYPE:
474 return TIZEN_CALENDAR_PROPERTY_GROUP_TYPE;
475 case EventAttendee::RESOURCE_TYPE:
476 return TIZEN_CALENDAR_PROPERTY_RESOURCE_TYPE;
477 case EventAttendee::ROOM_TYPE:
478 return TIZEN_CALENDAR_PROPERTY_ROOM_TYPE;
479 case EventAttendee::UNKNOWN_TYPE:
480 return TIZEN_CALENDAR_PROPERTY_UNKNOWN_TYPE;
485 return TIZEN_CALENDAR_PROPERTY_INDIVIDUAL_TYPE;
488 JSValueRef CalendarConverter::toFunctionOrNull(const JSValueRef& arg)
490 if (Validator(m_context).isCallback(arg)) {
492 } else if (!JSValueIsNull(m_context,
493 arg) && !JSValueIsUndefined(m_context, arg)) {
494 ThrowMsg(InvalidArgumentException, "Not a function nor JS null.");
499 JSValueRef CalendarConverter::toFunction(const JSValueRef& arg)
501 if (Validator(m_context).isCallback(arg)) {
503 } else if (JSValueIsNull(m_context,
504 arg) || JSValueIsUndefined(m_context, arg)) {
505 ThrowMsg(ConversionException, "JS null passed as function.");
507 ThrowMsg(InvalidArgumentException, "Not a function nor JS null.");
510 void CalendarConverter::toEventFilterConvertId(
511 const EventFilterPtr &result,
512 const JSValueRef &filters)
514 const ScopedJSStringRef idStr(JSStringCreateWithUTF8CString("id"));
515 JSObjectRef filterObj = toJSObjectRef(filters);
516 if (JSObjectHasProperty(m_context, filterObj, idStr.get())) {
517 LogDebug("converting id");
518 JSValueRef value = JSObjectGetProperty(m_context, filterObj,
520 result->setIdFilter(toString(value));
524 void CalendarConverter::toEventFilterConvertSummary(
525 const EventFilterPtr &result,
526 const JSValueRef &filters)
528 const ScopedJSStringRef summaryStr(JSStringCreateWithUTF8CString("summary"));
529 JSObjectRef filterObj = toJSObjectRef(filters);
530 if (JSObjectHasProperty(m_context, filterObj, summaryStr.get())) {
531 LogDebug("converting summary");
532 JSValueRef value = JSObjectGetProperty(m_context,
536 result->setSubjectFilter(toString(value));
540 void CalendarConverter::toEventFilterConvertDescription(
541 const EventFilterPtr &result,
542 const JSValueRef &filters)
544 const ScopedJSStringRef descriptionStr(JSStringCreateWithUTF8CString(
546 JSObjectRef filterObj = toJSObjectRef(filters);
547 if (JSObjectHasProperty(m_context, filterObj, descriptionStr.get())) {
548 LogDebug("converting description");
549 JSValueRef value = JSObjectGetProperty(m_context,
551 descriptionStr.get(),
553 result->setDescriptionFilter(toString(value));
557 void CalendarConverter::toEventFilterConvertLocation(
558 const EventFilterPtr &result,
559 const JSValueRef &filters)
561 const ScopedJSStringRef locationStr(JSStringCreateWithUTF8CString(
563 JSObjectRef filterObj = toJSObjectRef(filters);
564 if (JSObjectHasProperty(m_context, filterObj, locationStr.get())) {
565 LogDebug("converting location");
566 JSValueRef value = JSObjectGetProperty(m_context,
570 result->setLocationFilter(toString(value));
574 void CalendarConverter::toEventFilterConvertCategory(
575 const EventFilterPtr &result,
576 const JSValueRef &filters)
578 const ScopedJSStringRef locationStr(JSStringCreateWithUTF8CString(
580 JSObjectRef filterObj = toJSObjectRef(filters);
581 if (JSObjectHasProperty(m_context, filterObj, locationStr.get())) {
582 LogDebug("converting category");
583 JSValueRef value = JSObjectGetProperty(m_context,
587 result->setCategoryFilter(toString(value));
591 void CalendarConverter::toEventFilterConvertStatus(
592 const EventFilterPtr &result,
593 const JSValueRef &filters)
595 const ScopedJSStringRef statusStr(JSStringCreateWithUTF8CString("status"));
596 JSObjectRef filterObj = toJSObjectRef(filters);
597 if (JSObjectHasProperty(m_context, filterObj, statusStr.get())) {
598 LogDebug("converting status");
599 JSValueRef value = JSObjectGetProperty(m_context,
603 std::vector<std::string> statuses = toVectorOfStrings(value);
604 for (std::size_t i = 0; i < statuses.size(); ++i) {
605 CalendarEvent::EventStatus status(toEventStatus(statuses[i]));
606 if (status == CalendarEvent::INVALID_STATUS) {
607 ThrowMsg(InvalidArgumentException,
608 "Status filter has wrong value");
610 result->addStatusFilter(status);
615 void CalendarConverter::toEventFilterConvertStartTime(
616 const EventFilterPtr &result,
617 const JSValueRef &filters)
619 const ScopedJSStringRef initialStartDateStr(JSStringCreateWithUTF8CString(
620 "initialStartDate"));
621 const ScopedJSStringRef endStartDateStr(JSStringCreateWithUTF8CString(
623 JSObjectRef filterObj = toJSObjectRef(filters);
624 if (JSObjectHasProperty(m_context, filterObj, initialStartDateStr.get()) ||
625 JSObjectHasProperty(m_context, filterObj, endStartDateStr.get())) {
626 LogDebug("converting startTime");
627 JSValueRef valueStart = JSObjectGetProperty(m_context,
629 initialStartDateStr.get(),
631 JSValueRef valueEnd = JSObjectGetProperty(m_context,
633 endStartDateStr.get(),
636 if ((JSValueIsNull(m_context,
638 JSValueIsUndefined(m_context, valueStart)) &&
639 (JSValueIsNull(m_context,
641 JSValueIsUndefined(m_context, valueEnd))) {
645 if (!JSValueIsNull(m_context, valueStart) &&
646 !JSValueIsUndefined(m_context, valueStart)) {
647 result->setStartTimeMinFilter(toDateTimeT(valueStart));
650 if (!JSValueIsNull(m_context, valueEnd) &&
651 !JSValueIsUndefined(m_context, valueEnd)) {
652 result->setStartTimeMaxFilter(toDateTimeT(valueEnd));
657 EventFilterPtr CalendarConverter::toEventFilter(const JSValueRef &filters)
660 EventFilterPtr result(new EventFilter());
661 Validator validator(m_context);
662 if (!JSValueIsObject(m_context, filters)) {
663 LogError("Wrong filter parameter");
664 Throw(InvalidArgumentException);
666 if (!validator.checkArrayKeys(m_allowedAttributes, filters)) {
667 LogError("Wrong filter's attribue");
668 Throw(ConversionException);
670 toEventFilterConvertId(result, filters);
671 toEventFilterConvertSummary(result, filters);
672 toEventFilterConvertDescription(result, filters);
673 toEventFilterConvertLocation(result, filters);
674 toEventFilterConvertCategory(result, filters);
675 toEventFilterConvertStatus(result, filters);
676 toEventFilterConvertStartTime(result, filters);
680 CategoryListPtr CalendarConverter::toCategories(JSValueRef categories)
683 if (JSValueIsObjectOfClass(m_context, categories,
684 JSCategoryArray::getClassRef())) {
685 return JSCategoryArray::getCategories(m_context,
686 toJSObjectRef(categories));
688 CategoryListPtr result(new CategoryList());
689 *result = toVectorOfStrings(categories);
693 EventAttendeePtr CalendarConverter::toAttendee(JSValueRef attendee)
696 EventAttendeePtr result(new EventAttendee());
697 const ScopedJSStringRef nameStr(JSStringCreateWithUTF8CString("name"));
698 const ScopedJSStringRef uriStr(JSStringCreateWithUTF8CString("uri"));
699 const ScopedJSStringRef roleStr(JSStringCreateWithUTF8CString("role"));
700 const ScopedJSStringRef statusStr(JSStringCreateWithUTF8CString("status"));
701 const ScopedJSStringRef RSVPStr(JSStringCreateWithUTF8CString("RSVP"));
702 const ScopedJSStringRef typeStr(JSStringCreateWithUTF8CString("type"));
703 const ScopedJSStringRef groupStr(JSStringCreateWithUTF8CString("group"));
704 const ScopedJSStringRef delegatorURIStr(JSStringCreateWithUTF8CString("delegatorURI"));
705 const ScopedJSStringRef delegateURIStr(JSStringCreateWithUTF8CString("delegateURI"));
706 const ScopedJSStringRef uidStr(JSStringCreateWithUTF8CString("uid"));
708 JSObjectRef arg = toJSObjectRef(attendee);
710 JSValueRef nameData = JSObjectGetProperty(m_context, arg, nameStr.get(), NULL);
711 JSValueRef uriData = JSObjectGetProperty(m_context, arg, uriStr.get(), NULL);
712 JSValueRef roleData = JSObjectGetProperty(m_context, arg, roleStr.get(), NULL);
713 JSValueRef statusData = JSObjectGetProperty(m_context, arg, statusStr.get(), NULL);
714 JSValueRef RSVPData = JSObjectGetProperty(m_context, arg, RSVPStr.get(), NULL);
715 JSValueRef typeData = JSObjectGetProperty(m_context, arg, typeStr.get(), NULL);
716 JSValueRef groupData = JSObjectGetProperty(m_context, arg, groupStr.get(), NULL);
717 JSValueRef delegatorURIData = JSObjectGetProperty(m_context, arg, delegatorURIStr.get(), NULL);
718 JSValueRef delegateURIData = JSObjectGetProperty(m_context, arg, delegateURIStr.get(), NULL);
719 JSValueRef uidData = JSObjectGetProperty(m_context, arg, uidStr.get(), NULL);
721 if (!JSValueIsUndefined(m_context, nameData)) {
722 result->setName(toString(nameData));
724 if (!JSValueIsUndefined(m_context, uriData)) {
725 result->setURI(toString(uriData));
727 if (!JSValueIsUndefined(m_context, roleData)) {
728 result->setRole(toEventAttendeeRole(toString(roleData)));
730 if (!JSValueIsUndefined(m_context, statusData)) {
731 result->setStatus(toEventAttendeeStatus(toString(statusData)));
733 if (!JSValueIsUndefined(m_context, RSVPData)) {
734 result->setRSVP(toBool(RSVPData));
736 if (!JSValueIsUndefined(m_context, typeData)) {
737 result->setType(toEventAttendeeType(toString(typeData)));
739 if (!JSValueIsUndefined(m_context, groupData)) {
740 result->setGroup(toString(groupData));
742 if (!JSValueIsUndefined(m_context, delegatorURIData)) {
743 result->setDelegatorURI(toString(delegatorURIData));
745 if (!JSValueIsUndefined(m_context, delegateURIData)) {
746 result->setDelegateURI(toString(delegateURIData));
748 if (!JSValueIsUndefined(m_context, uidData)) {
749 result->setPersonId(toString(uidData));
755 EventAttendeeListPtr CalendarConverter::toVectorOfAttendees(JSValueRef attendees)
758 EventAttendeeListPtr result(new EventAttendeeList());
760 std::vector<EventAttendeePtr> resultVector;
761 JSObjectRef objArg = toJSObjectRef(attendees);
762 LogDebug("array length "<<JSGetArrayLength(m_context, objArg));
763 for (std::size_t i = 0; i < JSGetArrayLength(m_context, objArg); i++) {
764 JSValueRef element = JSGetArrayElement(m_context, objArg, i);
765 resultVector.push_back(toAttendee(element));
768 *result = resultVector;
772 EventAlarmPtr CalendarConverter::toEventAlarm(JSValueRef alarm)
775 EventAlarmPtr result(new EventAlarm());
776 const ScopedJSStringRef absoluteDateStr(JSStringCreateWithUTF8CString("absoluteDate"));
777 const ScopedJSStringRef minutesStr(JSStringCreateWithUTF8CString("minutes"));
778 const ScopedJSStringRef daysStr(JSStringCreateWithUTF8CString("days"));
779 const ScopedJSStringRef methodsStr(JSStringCreateWithUTF8CString("methods"));
781 JSObjectRef arg = toJSObjectRef(alarm);
783 JSValueRef absoluteDateData = JSObjectGetProperty(m_context, arg, absoluteDateStr.get(), NULL);
784 JSValueRef minutesData = JSObjectGetProperty(m_context, arg, minutesStr.get(), NULL);
785 JSValueRef daysData = JSObjectGetProperty(m_context, arg, daysStr.get(), NULL);
786 JSValueRef methodsData = JSObjectGetProperty(m_context, arg, methodsStr.get(), NULL);
788 if (!JSValueIsUndefined(m_context, absoluteDateData)) {
789 result->setAbsoluteDate(toDateTimeT(absoluteDateData));
791 if (!JSValueIsUndefined(m_context, minutesData)) {
792 result->setMinutes(toLong(minutesData));
794 if (!JSValueIsUndefined(m_context, daysData)) {
795 result->setDays(toLong(daysData));
797 if (!JSValueIsUndefined(m_context, methodsData)) {
798 result->setMethods(toVectorOfInts(methodsData));
804 EventAlarmListPtr CalendarConverter::toVectorOfEventAlarms(JSValueRef alarms)
807 EventAlarmListPtr result(new EventAlarmList());
809 std::vector<EventAlarmPtr> resultVector;
810 JSObjectRef objArg = toJSObjectRef(alarms);
811 LogDebug("array length "<<JSGetArrayLength(m_context, objArg));
812 for (std::size_t i = 0; i < JSGetArrayLength(m_context, objArg); i++) {
813 JSValueRef element = JSGetArrayElement(m_context, objArg, i);
814 resultVector.push_back(toEventAlarm(element));
817 *result = resultVector;
821 CalendarEventPtr CalendarConverter::toEvent(const JSValueRef event)
824 CalendarEventPtr result(new CalendarEvent());
825 const ScopedJSStringRef descriptionStr(JSStringCreateWithUTF8CString("description"));
826 const ScopedJSStringRef summaryStr(JSStringCreateWithUTF8CString("summary"));
827 const ScopedJSStringRef startTimeStr(JSStringCreateWithUTF8CString("startDate"));
828 const ScopedJSStringRef durationStr(JSStringCreateWithUTF8CString("duration"));
829 const ScopedJSStringRef locationStr(JSStringCreateWithUTF8CString("location"));
830 const ScopedJSStringRef categoriesStr(JSStringCreateWithUTF8CString("categories"));
831 const ScopedJSStringRef statusStr(JSStringCreateWithUTF8CString("status"));
832 const ScopedJSStringRef alarmsStr(JSStringCreateWithUTF8CString("alarms"));
833 const ScopedJSStringRef isAllDayStr(JSStringCreateWithUTF8CString("isAllDay"));
834 const ScopedJSStringRef organizerStr(JSStringCreateWithUTF8CString("organizer"));
835 const ScopedJSStringRef attendeesStr(JSStringCreateWithUTF8CString("attendees"));
836 const ScopedJSStringRef latitudeStr(JSStringCreateWithUTF8CString("latitude"));
837 const ScopedJSStringRef longitudeStr(JSStringCreateWithUTF8CString("longitude"));
838 const ScopedJSStringRef visibilityStr(JSStringCreateWithUTF8CString("visibility"));
839 //const ScopedJSStringRef lastModifiedDateStr(JSStringCreateWithUTF8CString("lastModifiedDate")); // read only
840 const ScopedJSStringRef availabilityStr(JSStringCreateWithUTF8CString("availability"));
841 const ScopedJSStringRef recurrenceRuleStr(JSStringCreateWithUTF8CString("recurrenceRule"));
842 //const ScopedJSStringRef isDetachedStr(JSStringCreateWithUTF8CString("isDetached")); //read only
843 //const ScopedJSStringRef attributesOfInterestStr(JSStringCreateWithUTF8CString("attributesOfInterest"));
844 const ScopedJSStringRef priorityStr(JSStringCreateWithUTF8CString("priority"));
845 const ScopedJSStringRef dueDateStr(JSStringCreateWithUTF8CString("dueDate"));
846 const ScopedJSStringRef completedDateStr(JSStringCreateWithUTF8CString("completedDate"));
847 const ScopedJSStringRef progressStr(JSStringCreateWithUTF8CString("progress"));
849 JSObjectRef arg = toJSObjectRef(event);
851 JSValueRef descriptionData = JSObjectGetProperty(m_context, arg, descriptionStr.get(), NULL);
852 JSValueRef summaryData = JSObjectGetProperty(m_context, arg, summaryStr.get(), NULL);
853 JSValueRef startTimeData = JSObjectGetProperty(m_context, arg, startTimeStr.get(), NULL);
854 JSValueRef durationData = JSObjectGetProperty(m_context, arg, durationStr.get(), NULL);
855 JSValueRef locationData = JSObjectGetProperty(m_context, arg, locationStr.get(), NULL);
856 JSValueRef categoriesData = JSObjectGetProperty(m_context, arg, categoriesStr.get(), NULL);
857 JSValueRef statusData = JSObjectGetProperty(m_context, arg, statusStr.get(), NULL);
858 JSValueRef alarmsData = JSObjectGetProperty(m_context, arg, alarmsStr.get(), NULL);
859 JSValueRef isAllDayData = JSObjectGetProperty(m_context, arg, isAllDayStr.get(), NULL);
860 JSValueRef organizerData = JSObjectGetProperty(m_context, arg, organizerStr.get(), NULL);
861 JSValueRef attendeesData = JSObjectGetProperty(m_context, arg, attendeesStr.get(), NULL);
862 JSValueRef latitudeData = JSObjectGetProperty(m_context, arg, latitudeStr.get(), NULL);
863 JSValueRef longitudeData = JSObjectGetProperty(m_context, arg, longitudeStr.get(), NULL);
864 JSValueRef visibilityData = JSObjectGetProperty(m_context, arg, visibilityStr.get(), NULL);
865 //JSValueRef lastModifiedDateData = JSObjectGetProperty(m_context, arg, lastModifiedDateStr.get(), NULL); // read only
866 JSValueRef availabilityData = JSObjectGetProperty(m_context, arg, availabilityStr.get(), NULL);
867 JSValueRef recurrenceRuleData = JSObjectGetProperty(m_context, arg, recurrenceRuleStr.get(), NULL);
868 //JSValueRef isDetachedData = JSObjectGetProperty(m_context, arg, isDetachedStr.get(), NULL); // read only
869 //JSValueRef attributesOfInterestData = JSObjectGetProperty(m_context, arg, attributesOfInterestStr.get(), NULL);
870 JSValueRef priorityData = JSObjectGetProperty(m_context, arg, priorityStr.get(), NULL);
871 JSValueRef dueDateData = JSObjectGetProperty(m_context, arg, dueDateStr.get(), NULL);
872 JSValueRef completedDateData = JSObjectGetProperty(m_context, arg, completedDateStr.get(), NULL);
873 JSValueRef progressData = JSObjectGetProperty(m_context, arg, progressStr.get(), NULL);
875 TimeUtilConverter timeUtilConverter(m_context);
877 if (!JSValueIsUndefined(m_context, descriptionData)) {
878 result->setDescription(toString(descriptionData));
880 if (!JSValueIsUndefined(m_context, summaryData)) {
881 result->setSubject(toString(summaryData));
883 //It's important to set startTime before duration to set end date by time_t
884 if (!JSValueIsUndefined(m_context, startTimeData)) {
885 result->setStartTime(timeUtilConverter.toTZDateTimeT(startTimeData));
886 result->setTimeZone(timeUtilConverter.getPropertiesInTZDate(startTimeData).timezone);
888 //set default value, current local time.
889 if(m_calendarType == CalendarEvent::EVENT_TYPE) {
890 result->setStartTime(std::time(NULL));
893 if (!JSValueIsUndefined(m_context, durationData)) {
894 long length = timeUtilConverter.getDurationLength(durationData, NULL);
895 int unit = timeUtilConverter.getDurationUnit(durationData, NULL);
896 LogInfo("duration length: "<<length<<", unit "<<unit);
898 Throw(ConversionException);
900 if( SECONDS_UNIT==unit ) {
901 result->setEndTime(result->getStartTime() + length);
902 } else if ( MINUTES_UNIT==unit ) {
903 result->setEndTime(result->getStartTime() + length*60);
904 } else if ( HOURS_UNIT==unit ) {
905 result->setEndTime(result->getStartTime() + length*60*60);
906 } else if ( DAYS_UNIT==unit ) {
907 result->setEndTime(result->getStartTime() + length*24*60*60);
909 Throw(ConversionException);
912 //default duration is 3600 seconds, or 1 hour.
913 LogInfo("duration length is 3600");
914 result->setEndTime(result->getStartTime() + 3600);
916 if (!JSValueIsUndefined(m_context, locationData)) {
917 result->setLocation(toString(locationData));
919 if (!JSValueIsUndefined(m_context, categoriesData)) {
920 CategoryListPtr categories(new CategoryList());
921 *categories = toVectorOfStrings(categoriesData);
922 result->setCategories(categories);
924 if (!JSValueIsUndefined(m_context, statusData)) {
925 result->setStatus(toEventStatus(toString(statusData)));
927 result->setStatus(CalendarEvent::CONFIRMED_STATUS);
929 if (!JSValueIsUndefined(m_context, alarmsData)) {
930 EventAlarmListPtr alarms = toVectorOfEventAlarms(alarmsData);
931 std::vector<CalendarEvent::EventAlarmType> alarmsType;
932 std::vector<long> alarmsTick;
933 // Set the multiple alarms.
934 for( unsigned int i=0; i<alarms->size(); i++) {
935 EventAlarmPtr theAlarm = alarms->at(i);
936 alarmsType.push_back(toEventAlarmType(theAlarm->getMethods().at(0)));
937 if( 0 < theAlarm->getAbsoluteDate() ) {
938 alarmsTick.push_back(theAlarm->getAbsoluteDate()/60); // minutes only in platform.
940 alarmsTick.push_back(theAlarm->getMinutes() + theAlarm->getDays()*24*60);
943 result->setAlarmsType(alarmsType);
944 result->setAlarmsTick(alarmsTick);
946 if (!JSValueIsUndefined(m_context, isAllDayData)) {
947 result->setIsAllDay(toBool(isAllDayData));
949 if (!JSValueIsUndefined(m_context, organizerData)) {
950 result->setOrganizer(toString(organizerData));
952 if (!JSValueIsUndefined(m_context, attendeesData)) {
953 EventAttendeeListPtr attendees = toVectorOfAttendees(attendeesData);
954 result->setAttendees(attendees);
956 if (!JSValueIsUndefined(m_context, latitudeData)) {
957 result->setLatitude(toDouble(latitudeData));
959 if (!JSValueIsUndefined(m_context, longitudeData)) {
960 result->setLongitude(toDouble(longitudeData));
962 if (!JSValueIsUndefined(m_context, visibilityData)) {
963 result->setVisibility(toEventVisibility(toString(visibilityData)));
965 /* This feature is read only.
966 if (!JSValueIsUndefined(m_context, lastModifiedDateData)) {
967 result->setLastModifiedDate(toDateTimeT(lastModifiedDateData));
969 if (!JSValueIsUndefined(m_context, availabilityData)) {
970 result->setAvailability(toEventAvailability(toString(availabilityData)));
972 if (!JSValueIsUndefined(m_context, recurrenceRuleData)) {
973 result->setRecurrenceRule(toEventRecurrenceRule(recurrenceRuleData));
975 /* attributesOfInterest is not supported
976 if (!JSValueIsUndefined(m_context, attributesOfInterestData)) {
977 AttributeList alist = toVectorOfStrings(attributesOfInterestData);
978 AttributeListPtr attributesOfInterest = AttributeListPtr(new AttributeList());
979 *attributesOfInterest = alist;
980 result->setAttributesOfInterest(attributesOfInterest);
982 if (!JSValueIsUndefined(m_context, priorityData)) {
983 result->setPriority(toTaskPriority(toString(priorityData)));
985 if (!JSValueIsUndefined(m_context, dueDateData)) {
986 result->setEndTime(timeUtilConverter.toTZDateTimeT(dueDateData));
988 if (!JSValueIsUndefined(m_context, completedDateData)) {
989 result->setCompletedDate(timeUtilConverter.toTZDateTimeT(completedDateData));
991 if (!JSValueIsUndefined(m_context, progressData)) {
992 result->setProgress(toInt(progressData));
998 CalendarEventListPtr CalendarConverter::toVectorOfEvents(JSValueRef events)
1000 LogDebug("entered");
1001 CalendarEventListPtr result(new CalendarEventList());
1003 std::vector<CalendarEventPtr> resultVector;
1004 JSObjectRef objArg = toJSObjectRef(events);
1005 LogDebug("array length "<<JSGetArrayLength(m_context, objArg));
1006 for (std::size_t i = 0; i < JSGetArrayLength(m_context, objArg); i++) {
1007 JSValueRef element = JSGetArrayElement(m_context, objArg, i);
1008 JSObjectRef arg = JSValueToObject(m_context, element, NULL);
1009 resultVector.push_back(JSCalendarItem::getPrivateObject(arg));
1012 *result = resultVector;
1016 CalendarEventListPtr CalendarConverter::toVectorOfEventsFromProperty(JSValueRef events)
1018 LogDebug("entered");
1019 CalendarEventListPtr result(new CalendarEventList());
1021 std::vector<CalendarEventPtr> resultVector;
1022 JSObjectRef objArg = toJSObjectRef(events);
1023 LogDebug("array length "<<JSGetArrayLength(m_context, objArg));
1024 for (std::size_t i = 0; i < JSGetArrayLength(m_context, objArg); i++) {
1025 resultVector.push_back(toEvent(JSGetArrayElement(m_context, objArg, i)));
1028 *result = resultVector;
1032 EventIdPtr CalendarConverter::toEventId(JSValueRef eventId)
1034 LogDebug("entered");
1035 EventIdPtr result(new EventId());
1036 const ScopedJSStringRef uidStr(JSStringCreateWithUTF8CString("uid"));
1037 const ScopedJSStringRef recurrenceIdStr(JSStringCreateWithUTF8CString("recurrenceId"));
1039 JSObjectRef arg = toJSObjectRef(eventId);
1041 JSValueRef uidData = JSObjectGetProperty(m_context, arg, uidStr.get(), NULL);
1042 JSValueRef recurrenceIdData = JSObjectGetProperty(m_context, arg, recurrenceIdStr.get(), NULL);
1044 if (!JSValueIsUndefined(m_context, uidData)) {
1045 result->setUId(toString(uidData));
1047 if (!JSValueIsUndefined(m_context, recurrenceIdData)) {
1048 TimeUtilConverter timeUtilConverter(m_context);
1049 result->setRecurrenceId(timeUtilConverter.toTZDateTimeT(recurrenceIdData));
1055 EventIdListPtr CalendarConverter::toVectorOfEventIds(JSValueRef eventIds)
1057 LogDebug("entered");
1058 EventIdListPtr result(new EventIdList());
1060 std::vector<EventIdPtr> resultVector;
1061 JSObjectRef objArg = toJSObjectRef(eventIds);
1062 LogDebug("array length "<<JSGetArrayLength(m_context, objArg));
1063 for (std::size_t i = 0; i < JSGetArrayLength(m_context, objArg); i++) {
1064 JSValueRef element = JSGetArrayElement(m_context, objArg, i);
1065 resultVector.push_back(toEventId(element));
1068 *result = resultVector;
1072 std::vector<time_t> CalendarConverter::toVectorOfTimeTFromTZDate(JSValueRef dates)
1074 LogDebug("entered");
1075 std::vector<time_t> result;
1076 TimeUtilConverter converter(m_context);
1078 JSObjectRef objArg = toJSObjectRef(dates);
1079 LogDebug("array length "<<JSGetArrayLength(m_context, objArg));
1080 for (std::size_t i = 0; i < JSGetArrayLength(m_context, objArg); i++) {
1081 JSValueRef element = JSGetArrayElement(m_context, objArg, i);
1082 result.push_back(converter.toTZDateTimeT(element));
1088 std::string CalendarConverter::toTizenValue(Api::Calendar::CalendarEvent::TaskPriority abstractValue) const
1090 switch (abstractValue) {
1091 case CalendarEvent::HIGH_PRIORITY:
1092 return TIZEN_CALENDAR_PROPERTY_HIGH_PRIORITY;
1093 case CalendarEvent::MEDIUM_PRIORITY:
1094 return TIZEN_CALENDAR_PROPERTY_MEDIUM_PRIORITY;
1095 case CalendarEvent::LOW_PRIORITY:
1096 return TIZEN_CALENDAR_PROPERTY_LOW_PRIORITY;
1100 return TIZEN_CALENDAR_PROPERTY_LOW_PRIORITY;
1103 CalendarEvent::TaskPriority CalendarConverter::toTaskPriority(std::string priority) const
1105 if (!priority.compare(TIZEN_CALENDAR_PROPERTY_HIGH_PRIORITY))
1106 return CalendarEvent::HIGH_PRIORITY;
1107 else if (!priority.compare(TIZEN_CALENDAR_PROPERTY_MEDIUM_PRIORITY))
1108 return CalendarEvent::MEDIUM_PRIORITY;
1109 else if (!priority.compare(TIZEN_CALENDAR_PROPERTY_LOW_PRIORITY))
1110 return CalendarEvent::LOW_PRIORITY;
1112 return CalendarEvent::LOW_PRIORITY;
1115 CalendarEvent::CalendarType CalendarConverter::toCalendarType(std::string type) const
1117 if (!type.compare(TIZEN_CALENDAR_PROPERTY_TYPE_EVENT))
1118 return CalendarEvent::EVENT_TYPE;
1119 else if (!type.compare(TIZEN_CALENDAR_PROPERTY_TYPE_TASK))
1120 return CalendarEvent::TASK_TYPE;
1122 Throw(ConversionException);
1124 return CalendarEvent::EVENT_TYPE;
1127 CalendarEvent::VObjectFormat CalendarConverter::toVObjectFormat(std::string format) const
1129 if (!format.compare(TIZEN_CALENDAR_PROPERTY_VCALENDAR_20_FORMAT))
1130 return CalendarEvent::ICALENDAR_20;
1131 else if (!format.compare(TIZEN_CALENDAR_PROPERTY_VCALENDAR_10_FORMAT))
1132 return CalendarEvent::VCALENDAR_10;
1134 return CalendarEvent::ICALENDAR_20;