2 // Tizen Web Device API
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
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
9 // http://www.apache.org/licenses/LICENSE-2.0
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.
19 #include <dpl/log/log.h>
20 #include <CommonsJavaScript/Validator.h>
21 #include <CommonsJavaScript/JSUtils.h>
22 #include "JSCalendarEvent.h"
23 #include "JSCalendarTask.h"
24 #include "JSCalendarItemProperties.h"
25 #include "JSCalendarEventId.h"
26 #include "CalendarConverter.h"
27 #include "JSCalendar.h"
28 #include "JSCalendarManager.h"
29 #include "JSCalendarAttendee.h"
30 #include "JSCalendarRecurrenceRule.h"
31 #include "JSCalendarAlarm.h"
33 #include <TimeUtilConverter.h>
34 #include <DurationProperties.h>
35 #include <JSSimpleCoordinates.h>
36 #include <ContactConverter.h>
39 using namespace WrtDeviceApis::Commons;
40 using namespace WrtDeviceApis::CommonsJavaScript;
41 using namespace DeviceAPI::Time;
44 const int DEFAULT_EVENT_INTERVAL = 1;
50 CalendarConverter::CalendarConverter(JSContextRef context, CalendarEvent::CalendarType calendarType) : Converter(context)
52 m_calendarType = calendarType;
55 CalendarConverter::~CalendarConverter()
59 JSValueRef CalendarConverter::toJSValueRefEvent(const CalendarEventPtr& arg)
61 return JSUtils::makeObject(m_context, JSCalendarEvent::getClassRef(), arg);
64 JSValueRef CalendarConverter::toJSValueRefTask(const CalendarEventPtr& arg)
66 return JSUtils::makeObject(m_context, JSCalendarTask::getClassRef(), arg);
69 JSValueRef CalendarConverter::toJSValueRefEventArray(const CalendarEventListPtr &arg)
71 return toJSValueRef_(*arg, &CalendarConverter::toJSValueRefEvent, this);
74 JSValueRef CalendarConverter::toJSValueRefTaskArray(const CalendarEventListPtr &arg)
76 return toJSValueRef_(*arg, &CalendarConverter::toJSValueRefTask, this);
79 JSValueRef CalendarConverter::toJSValueRefCalendar(const ICalendarPtr& arg)
81 CalendarPrivObject *priv = new CalendarPrivObject(m_context, arg);
82 return JSObjectMake(m_context, JSCalendar::getClassRef(), priv);
85 JSValueRef CalendarConverter::toJSValueRef(const std::vector<ICalendarPtr> &arg)
87 return toJSValueRef_(arg, &CalendarConverter::toJSValueRefCalendar, this);
90 JSValueRef CalendarConverter::toJSValueRefStringArray(const StringArrayPtr &arg)
92 int size = arg->size();
94 JSObjectRef resultObject = JSCreateArrayObject(m_context, 0, NULL);
96 ThrowMsg(ConversionException, "Can not create an array object.");
99 for(int i = 0; i < size; i++) {
100 JSValueRef jsvalue = toJSValueRef(arg->at(i));
101 if (!JSSetArrayElement(m_context, resultObject, i, jsvalue)) {
102 ThrowMsg(ConversionException, "Can not add an object to array.");
109 JSValueRef CalendarConverter::toJSValueRefNumberArray(const NumberArrayPtr &arg)
111 int size = arg->size();
113 JSObjectRef resultObject = JSCreateArrayObject(m_context, 0, NULL);
115 ThrowMsg(ConversionException, "Can not create an array object.");
118 for(int i = 0; i < size; i++) {
119 JSValueRef jsvalue = toJSValueRef(arg->at(i));
120 if (!JSSetArrayElement(m_context, resultObject, i, jsvalue)) {
121 ThrowMsg(ConversionException, "Can not add an object to array.");
128 JSValueRef CalendarConverter::toJSValueRefTZDateArray(const NumberArrayPtr &arg, const std::string &timeZone)
130 int size = arg->size();
132 JSObjectRef resultObject = JSCreateArrayObject(m_context, 0, NULL);
134 ThrowMsg(ConversionException, "Can not create an array object.");
137 TimeUtilConverter timeConverter(m_context);
138 for(int i = 0; i < size; i++) {
139 JSValueRef jsvalue = timeConverter.toJSValueRefTZDate((double)((arg->at(i))*1000.0), timeZone);
140 if (!JSSetArrayElement(m_context, resultObject, i, jsvalue)) {
141 ThrowMsg(ConversionException, "Can not add an object to array.");
148 StringArrayPtr CalendarConverter::toStringArray(const JSValueRef &jsValue)
150 StringArrayPtr result = StringArrayPtr(new StringArray());
151 if(!JSIsArrayValue(m_context, jsValue)) {
152 LogWarning("StringArray is not an array. Skip this.");
156 JSObjectRef jsObject = toJSObjectRef(jsValue);
157 for (std::size_t i = 0; i < JSGetArrayLength(m_context, jsObject); ++i) {
158 JSValueRef element = JSGetArrayElement(m_context, jsObject, i);
159 result->push_back(toString(element));
164 NumberArrayPtr CalendarConverter::toNumberArray(const JSValueRef &jsValue)
166 NumberArrayPtr result = NumberArrayPtr(new NumberArray());
167 if(!JSIsArrayValue(m_context, jsValue)) {
168 LogWarning("NumberArray is not an array. Skip this.");
172 JSObjectRef jsObject = toJSObjectRef(jsValue);
173 for (std::size_t i = 0; i < JSGetArrayLength(m_context, jsObject); ++i) {
174 JSValueRef element = JSGetArrayElement(m_context, jsObject, i);
175 result->push_back((long long int) (toLongLong(element)));
180 NumberArrayPtr CalendarConverter::toTZDateArray(const JSValueRef &jsValue)
182 NumberArrayPtr result = NumberArrayPtr(new NumberArray());
183 if(!JSIsArrayValue(m_context, jsValue)) {
184 LogWarning("TZDateArray is not an array. Skip this.");
188 TimeUtilConverter timeConverter(m_context);
190 JSObjectRef jsObject = toJSObjectRef(jsValue);
191 for (std::size_t i = 0; i < JSGetArrayLength(m_context, jsObject); ++i) {
192 JSValueRef element = JSGetArrayElement(m_context, jsObject, i);
193 result->push_back((long long int) (timeConverter.getTimeInMilliseconds(element)/1000));
195 LogDebug("First value: "<<result->at(0));
199 EventAlarm::EventAlarmType CalendarConverter::toEventAlarmType(std::string alarmMethod)
202 if (!alarmMethod.compare(TIZEN_CALENDAR_PROPERTY_DISPLAY_ALARM))
203 return EventAlarm::SILENT_ALARM;
204 else if (!alarmMethod.compare(TIZEN_CALENDAR_PROPERTY_SOUND_ALARM))
205 return EventAlarm::SOUND_ALARM;
207 ThrowMsg(ConversionException, "Invalid alarm type.");
209 return EventAlarm::UNDEFINED_ALARM_TYPE;
212 std::string CalendarConverter::toTizenValue(EventAlarm::EventAlarmType abstractValue) const
214 switch (abstractValue) {
215 case EventAlarm::SILENT_ALARM:
216 return TIZEN_CALENDAR_PROPERTY_DISPLAY_ALARM;
217 case EventAlarm::SOUND_ALARM:
218 return TIZEN_CALENDAR_PROPERTY_SOUND_ALARM;
222 ThrowMsg(ConversionException, "Invalid alarm type");
225 CalendarEvent::EventStatus CalendarConverter::toEventStatus(std::string tizenValue) const
227 if(!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_TENTATIVE_STATUS))
228 return CalendarEvent::TENTATIVE_STATUS;
229 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_CONFIRMED_STATUS))
230 return CalendarEvent::CONFIRMED_STATUS;
231 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_CANCELLED_STATUS))
232 return CalendarEvent::CANCELLED_STATUS;
233 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_NEEDS_ACTION_STATUS))
234 return CalendarEvent::NEEDS_ACTION_STATUS;
235 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_IN_PROCESS_STATUS))
236 return CalendarEvent::IN_PROCESS_STATUS;
237 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_COMPLETED_STATUS))
238 return CalendarEvent::COMPLETED_STATUS;
240 ThrowMsg(ConversionException, "Invalid status type.");
242 return CalendarEvent::UNDEFINED_STATUS;
245 std::string CalendarConverter::toTizenValue(CalendarEvent::EventStatus abstractValue)
248 switch (abstractValue) {
249 case CalendarEvent::TENTATIVE_STATUS:
250 return TIZEN_CALENDAR_PROPERTY_TENTATIVE_STATUS;
251 case CalendarEvent::CONFIRMED_STATUS:
252 return TIZEN_CALENDAR_PROPERTY_CONFIRMED_STATUS;
253 case CalendarEvent::CANCELLED_STATUS:
254 return TIZEN_CALENDAR_PROPERTY_CANCELLED_STATUS;
255 case CalendarEvent::NEEDS_ACTION_STATUS:
256 return TIZEN_CALENDAR_PROPERTY_NEEDS_ACTION_STATUS;
257 case CalendarEvent::IN_PROCESS_STATUS:
258 return TIZEN_CALENDAR_PROPERTY_IN_PROCESS_STATUS;
259 case CalendarEvent::COMPLETED_STATUS:
260 return TIZEN_CALENDAR_PROPERTY_COMPLETED_STATUS;
263 if (CalendarEvent::TASK_TYPE==m_calendarType) {
264 return TIZEN_CALENDAR_PROPERTY_NEEDS_ACTION_STATUS;
266 return TIZEN_CALENDAR_PROPERTY_CONFIRMED_STATUS;
273 EventRecurrenceRule::EventRecurrence CalendarConverter::toRecurrenceFrequency(
274 std::string tizenValue) const
276 if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_DAILY_RECURRENCE))
277 return EventRecurrenceRule::DAILY_RECURRENCE;
278 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_WEEKLY_RECURRENCE))
279 return EventRecurrenceRule::WEEKLY_RECURRENCE;
280 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_MONTHLY_RECURRENCE))
281 return EventRecurrenceRule::MONTHLY_RECURRENCE;
282 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_YEARLY_RECURRENCE))
283 return EventRecurrenceRule::YEARLY_RECURRENCE;
285 ThrowMsg(ConversionException, "Invalid recurrence frequency type.");
287 return EventRecurrenceRule::UNDEFINED_RECURRENCE;
290 std::string CalendarConverter::toTizenValue(
291 EventRecurrenceRule::EventRecurrence abstractValue) const
293 switch (abstractValue) {
294 case EventRecurrenceRule::DAILY_RECURRENCE:
295 return TIZEN_CALENDAR_PROPERTY_DAILY_RECURRENCE;
296 case EventRecurrenceRule::WEEKLY_RECURRENCE:
297 return TIZEN_CALENDAR_PROPERTY_WEEKLY_RECURRENCE;
298 case EventRecurrenceRule::MONTHLY_RECURRENCE:
299 return TIZEN_CALENDAR_PROPERTY_MONTHLY_RECURRENCE;
300 case EventRecurrenceRule::YEARLY_RECURRENCE:
301 return TIZEN_CALENDAR_PROPERTY_YEARLY_RECURRENCE;
302 case EventRecurrenceRule::NO_RECURRENCE:
309 EventRecurrenceRulePtr CalendarConverter::toEventRecurrenceRule(JSValueRef rrule)
311 EventRecurrenceRulePtr result(new EventRecurrenceRule());
313 const ScopedJSStringRef frequencyStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_FREQUENCY));
314 const ScopedJSStringRef intervalStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_INTERVAL));
315 const ScopedJSStringRef untilDateStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_UNTIL_DATE));
316 const ScopedJSStringRef occurrenceCountStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_OCCURRENCE_COUNT));
317 //const ScopedJSStringRef daysOfTheMonthStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_DAYS_OF_THE_MONTH));
318 const ScopedJSStringRef daysOfTheWeekStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_DAYS_OF_THE_WEEK));
319 //const ScopedJSStringRef daysOfTheYearStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_DAYS_OF_THE_YEAR));
320 //const ScopedJSStringRef weeksOfTheYearStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_WEEKS_OF_THE_YEAR));
321 const ScopedJSStringRef setPositionsStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_SET_POSITIONS));
322 const ScopedJSStringRef exceptionsStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_EXCEPTIONS));
324 JSObjectRef arg = toJSObjectRef(rrule);
326 JSValueRef frequencyData = JSObjectGetProperty(m_context, arg, frequencyStr.get(), NULL);
327 JSValueRef intervalData = JSObjectGetProperty(m_context, arg, intervalStr.get(), NULL);
328 JSValueRef untilDateData = JSObjectGetProperty(m_context, arg, untilDateStr.get(), NULL);
329 JSValueRef occurrenceCountData = JSObjectGetProperty(m_context, arg, occurrenceCountStr.get(), NULL);
330 //JSValueRef daysOfTheMonthData = JSObjectGetProperty(m_context, arg, daysOfTheMonthStr.get(), NULL);
331 JSValueRef daysOfTheWeekData = JSObjectGetProperty(m_context, arg, daysOfTheWeekStr.get(), NULL);
332 //JSValueRef daysOfTheYearData = JSObjectGetProperty(m_context, arg, daysOfTheYearStr.get(), NULL);
333 //JSValueRef weeksOfTheYearData = JSObjectGetProperty(m_context, arg, weeksOfTheYearStr.get(), NULL);
334 JSValueRef setPositionsData = JSObjectGetProperty(m_context, arg, setPositionsStr.get(), NULL);
335 JSValueRef exceptionsData = JSObjectGetProperty(m_context, arg, exceptionsStr.get(), NULL);
337 if (!JSValueIsUndefined(m_context, frequencyData)) {
338 result->setFrequency(toRecurrenceFrequency(toString(frequencyData)));
340 if (!JSValueIsUndefined(m_context, intervalData)) {
341 result->setInterval(toInt(intervalData));
343 if (!JSValueIsUndefined(m_context, untilDateData)) {
344 if (!JSValueIsNull(m_context, untilDateData)) {
345 TimeUtilConverter timeUtilConverter(m_context);
346 result->setEndDate((long long int) (timeUtilConverter.getTimeInMilliseconds(untilDateData)/1000));
347 result->setTimeZone(timeUtilConverter.getPropertiesInTZDate(untilDateData).timezone);
349 result->setEndDate(0);
352 if (!JSValueIsUndefined(m_context, occurrenceCountData)) {
353 result->setOccurrenceCount(toLong(occurrenceCountData));
355 /*if (!JSValueIsUndefined(m_context, daysOfTheMonthData)) {
356 result->setDaysOfTheMonth(toVectorOfInts(daysOfTheMonthData));
358 if (!JSValueIsUndefined(m_context, daysOfTheWeekData)) {
359 result->setDaysOfTheWeek(toStringArray(daysOfTheWeekData));
361 /*if (!JSValueIsUndefined(m_context, daysOfTheYearData)) {
362 result->setDaysOfTheYear(toVectorOfInts(daysOfTheYearData));
364 if (!JSValueIsUndefined(m_context, weeksOfTheYearData)) {
365 result->setWeeksOfTheYear(toVectorOfInts(weeksOfTheYearData));
367 if (!JSValueIsUndefined(m_context, setPositionsData)) {
368 result->setSetPositions(toNumberArray(setPositionsData));
370 if (!JSValueIsUndefined(m_context, exceptionsData)) {
371 result->setExceptions(toTZDateArray(exceptionsData));
377 CalendarEvent::EventVisibility CalendarConverter::toEventVisibility(std::string tizenValue)
380 if(!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_PUBLIC_VISIBILITY))
381 return CalendarEvent::PUBLIC_VISIBILITY;
382 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_PRIVATE_VISIBILITY))
383 return CalendarEvent::PRIVATE_VISIBILITY;
384 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_CONFIDENTIAL_VISIBILITY))
385 return CalendarEvent::CONFIDENTIAL_VISIBILITY;
387 ThrowMsg(ConversionException, "Invalid visibility type.");
389 return CalendarEvent::UNDEFINED_VISIBILITY;
392 std::string CalendarConverter::toTizenValue(
393 CalendarEvent::EventVisibility abstractValue) const
395 switch (abstractValue) {
396 case CalendarEvent::PUBLIC_VISIBILITY:
397 return TIZEN_CALENDAR_PROPERTY_PUBLIC_VISIBILITY;
398 case CalendarEvent::PRIVATE_VISIBILITY:
399 return TIZEN_CALENDAR_PROPERTY_PRIVATE_VISIBILITY;
400 case CalendarEvent::CONFIDENTIAL_VISIBILITY:
401 return TIZEN_CALENDAR_PROPERTY_CONFIDENTIAL_VISIBILITY;
406 return TIZEN_CALENDAR_PROPERTY_PUBLIC_VISIBILITY;
409 CalendarEvent::EventAvailability CalendarConverter::toEventAvailability(std::string tizenValue)
412 if(!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_BUSY))
413 return CalendarEvent::BUSY_FB;
414 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_BUSY_UNAVAILABLE_FB))
415 return CalendarEvent::BUSY_UNAVAILABLE_FB;
416 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_FREE))
417 return CalendarEvent::FREE_FB;
418 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_BUSY_TENTATIVE))
419 return CalendarEvent::BUSY_TENTATIVE_FB;
421 ThrowMsg(ConversionException, "Invalid availability type.");
423 return CalendarEvent::UNDEFINED_AVAILABILITY;
426 std::string CalendarConverter::toTizenValue(
427 CalendarEvent::EventAvailability abstractValue) const
429 switch (abstractValue) {
430 case CalendarEvent::BUSY_FB:
431 return TIZEN_CALENDAR_PROPERTY_BUSY;
432 case CalendarEvent::BUSY_UNAVAILABLE_FB:
433 return TIZEN_CALENDAR_PROPERTY_BUSY_UNAVAILABLE_FB;
434 case CalendarEvent::FREE_FB:
435 return TIZEN_CALENDAR_PROPERTY_FREE;
436 case CalendarEvent::BUSY_TENTATIVE_FB:
437 return TIZEN_CALENDAR_PROPERTY_BUSY_TENTATIVE;
442 return TIZEN_CALENDAR_PROPERTY_BUSY;
445 EventAttendee::EventAttendeeRole CalendarConverter::toEventAttendeeRole(std::string tizenValue)
448 if(!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_REQ_PARTICIPANT_ROLE))
449 return EventAttendee::REQ_PARTICIPANT_ROLE;
450 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_OPT_PARTICIPANT_ROLE))
451 return EventAttendee::OPT_PARTICIPANT_ROLE;
452 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_NON_PARTICIPANT_ROLE))
453 return EventAttendee::NON_PARTICIPANT_ROLE;
454 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_CHAIR_ROLE))
455 return EventAttendee::CHAIR_ROLE;
457 ThrowMsg(ConversionException, "Invalid attendee role type.");
459 return EventAttendee::UNDEFINED_ATTENDEE_ROLE;
462 std::string CalendarConverter::toTizenValue(
463 EventAttendee::EventAttendeeRole abstractValue) const
465 switch (abstractValue) {
466 case EventAttendee::REQ_PARTICIPANT_ROLE:
467 return TIZEN_CALENDAR_PROPERTY_REQ_PARTICIPANT_ROLE;
468 case EventAttendee::OPT_PARTICIPANT_ROLE:
469 return TIZEN_CALENDAR_PROPERTY_OPT_PARTICIPANT_ROLE;
470 case EventAttendee::NON_PARTICIPANT_ROLE:
471 return TIZEN_CALENDAR_PROPERTY_NON_PARTICIPANT_ROLE;
472 case EventAttendee::CHAIR_ROLE:
473 return TIZEN_CALENDAR_PROPERTY_CHAIR_ROLE;
477 return TIZEN_CALENDAR_PROPERTY_REQ_PARTICIPANT_ROLE;
480 EventAttendee::EventAttendeeStatus CalendarConverter::toEventAttendeeStatus(std::string tizenValue)
483 if(!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_PENDING_STATUS))
484 return EventAttendee::PENDING_AT_STATUS;
485 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_ACCEPTED_STATUS))
486 return EventAttendee::ACCEPTED_AT_STATUS;
487 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_DECLINED_STATUS))
488 return EventAttendee::DECLINED_AT_STATUS;
489 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_TENTATIVE_STATUS))
490 return EventAttendee::TENTATIVE_AT_STATUS;
491 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_DELEGATED_STATUS))
492 return EventAttendee::DELEGATED_AT_STATUS;
493 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_COMPLETED_STATUS))
494 return EventAttendee::COMPLETED_AT_STATUS;
495 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_IN_PROCESS_STATUS))
496 return EventAttendee::IN_PROCESS_AT_STATUS;
498 ThrowMsg(ConversionException, "Invalid attendee status type.");
500 return EventAttendee::UNDEFINED_ATTENDEE_STATUS;
503 std::string CalendarConverter::toTizenValue(
504 EventAttendee::EventAttendeeStatus abstractValue) const
506 switch (abstractValue) {
507 case EventAttendee::PENDING_AT_STATUS:
508 return TIZEN_CALENDAR_PROPERTY_PENDING_STATUS;
509 case EventAttendee::ACCEPTED_AT_STATUS:
510 return TIZEN_CALENDAR_PROPERTY_ACCEPTED_STATUS;
511 case EventAttendee::DECLINED_AT_STATUS:
512 return TIZEN_CALENDAR_PROPERTY_DECLINED_STATUS;
513 case EventAttendee::TENTATIVE_AT_STATUS:
514 return TIZEN_CALENDAR_PROPERTY_TENTATIVE_STATUS;
515 case EventAttendee::DELEGATED_AT_STATUS:
516 return TIZEN_CALENDAR_PROPERTY_DELEGATED_STATUS;
517 case EventAttendee::COMPLETED_AT_STATUS:
518 return TIZEN_CALENDAR_PROPERTY_COMPLETED_STATUS;
519 case EventAttendee::IN_PROCESS_AT_STATUS:
520 return TIZEN_CALENDAR_PROPERTY_IN_PROCESS_STATUS;
524 return TIZEN_CALENDAR_PROPERTY_PENDING_STATUS;
527 EventAttendee::EventAttendeeType CalendarConverter::toEventAttendeeType(std::string tizenValue)
530 if(!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_INDIVIDUAL_TYPE))
531 return EventAttendee::INDIVIDUAL_TYPE;
532 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_GROUP_TYPE))
533 return EventAttendee::GROUP_TYPE;
534 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_RESOURCE_TYPE))
535 return EventAttendee::RESOURCE_TYPE;
536 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_ROOM_TYPE))
537 return EventAttendee::ROOM_TYPE;
538 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_UNKNOWN_TYPE))
539 return EventAttendee::UNKNOWN_TYPE;
541 ThrowMsg(ConversionException, "Invalid attendee type.");
543 return EventAttendee::INDIVIDUAL_TYPE;
546 std::string CalendarConverter::toTizenValue(
547 EventAttendee::EventAttendeeType abstractValue) const
549 switch (abstractValue) {
550 case EventAttendee::INDIVIDUAL_TYPE:
551 return TIZEN_CALENDAR_PROPERTY_INDIVIDUAL_TYPE;
552 case EventAttendee::GROUP_TYPE:
553 return TIZEN_CALENDAR_PROPERTY_GROUP_TYPE;
554 case EventAttendee::RESOURCE_TYPE:
555 return TIZEN_CALENDAR_PROPERTY_RESOURCE_TYPE;
556 case EventAttendee::ROOM_TYPE:
557 return TIZEN_CALENDAR_PROPERTY_ROOM_TYPE;
558 case EventAttendee::UNKNOWN_TYPE:
559 return TIZEN_CALENDAR_PROPERTY_UNKNOWN_TYPE;
564 return TIZEN_CALENDAR_PROPERTY_INDIVIDUAL_TYPE;
567 JSValueRef CalendarConverter::toFunctionOrNull(const JSValueRef& arg)
569 if (Validator(m_context).isCallback(arg)) {
571 } else if (!JSValueIsNull(m_context,
572 arg) && !JSValueIsUndefined(m_context, arg)) {
573 ThrowMsg(ConversionException, "Not a function nor JS null.");
578 JSValueRef CalendarConverter::toFunction(const JSValueRef& arg)
580 if (Validator(m_context).isCallback(arg)) {
583 ThrowMsg(ConversionException, "Not a function.");
586 StringArrayPtr CalendarConverter::toCategories(JSValueRef categories)
588 StringArrayPtr result(new StringArray());
589 *result = toVectorOfStrings(categories);
593 EventAttendeePtr CalendarConverter::toAttendee(JSValueRef attendee)
595 EventAttendeePtr result(new EventAttendee());
596 const ScopedJSStringRef nameStr(JSStringCreateWithUTF8CString(TIZEN_ATTENDEE_NAME));
597 const ScopedJSStringRef uriStr(JSStringCreateWithUTF8CString(TIZEN_ATTENDEE_URI));
598 const ScopedJSStringRef roleStr(JSStringCreateWithUTF8CString(TIZEN_ATTENDEE_ROLE));
599 const ScopedJSStringRef statusStr(JSStringCreateWithUTF8CString(TIZEN_ATTENDEE_STATUS));
600 const ScopedJSStringRef RSVPStr(JSStringCreateWithUTF8CString(TIZEN_ATTENDEE_RSVP));
601 const ScopedJSStringRef typeStr(JSStringCreateWithUTF8CString(TIZEN_ATTENDEE_TYPE));
602 const ScopedJSStringRef groupStr(JSStringCreateWithUTF8CString(TIZEN_ATTENDEE_GROUP));
603 const ScopedJSStringRef delegatorURIStr(JSStringCreateWithUTF8CString(TIZEN_ATTENDEE_DELEGATORURI));
604 const ScopedJSStringRef delegateURIStr(JSStringCreateWithUTF8CString(TIZEN_ATTENDEE_DELEGATEURI));
605 const ScopedJSStringRef contactRefStr(JSStringCreateWithUTF8CString(TIZEN_ATTENDEE_CONTACT_REF));
607 JSObjectRef arg = toJSObjectRef(attendee);
609 JSValueRef nameData = JSObjectGetProperty(m_context, arg, nameStr.get(), NULL);
610 JSValueRef uriData = JSObjectGetProperty(m_context, arg, uriStr.get(), NULL);
611 JSValueRef roleData = JSObjectGetProperty(m_context, arg, roleStr.get(), NULL);
612 JSValueRef statusData = JSObjectGetProperty(m_context, arg, statusStr.get(), NULL);
613 JSValueRef RSVPData = JSObjectGetProperty(m_context, arg, RSVPStr.get(), NULL);
614 JSValueRef typeData = JSObjectGetProperty(m_context, arg, typeStr.get(), NULL);
615 JSValueRef groupData = JSObjectGetProperty(m_context, arg, groupStr.get(), NULL);
616 JSValueRef delegatorURIData = JSObjectGetProperty(m_context, arg, delegatorURIStr.get(), NULL);
617 JSValueRef delegateURIData = JSObjectGetProperty(m_context, arg, delegateURIStr.get(), NULL);
618 JSValueRef contactRefData = JSObjectGetProperty(m_context, arg, contactRefStr.get(), NULL);
620 if (!JSValueIsUndefined(m_context, nameData)) {
621 result->setName(toString(nameData));
623 if (!JSValueIsUndefined(m_context, uriData)) {
624 result->setURI(toString(uriData));
626 if (!JSValueIsUndefined(m_context, roleData)) {
627 result->setRole(toEventAttendeeRole(toString(roleData)));
629 if (!JSValueIsUndefined(m_context, statusData)) {
630 result->setStatus(toEventAttendeeStatus(toString(statusData)));
632 if (!JSValueIsUndefined(m_context, RSVPData)) {
633 result->setRSVP(toBool(RSVPData));
635 if (!JSValueIsUndefined(m_context, typeData)) {
636 result->setType(toEventAttendeeType(toString(typeData)));
638 if (!JSValueIsUndefined(m_context, groupData)) {
639 result->setGroup(toString(groupData));
641 if (!JSValueIsUndefined(m_context, delegatorURIData)) {
642 result->setDelegatorURI(toString(delegatorURIData));
644 if (!JSValueIsUndefined(m_context, delegateURIData)) {
645 result->setDelegateURI(toString(delegateURIData));
647 if (!JSValueIsUndefined(m_context, contactRefData)) {
648 DeviceAPI::Contact::ContactConverter contactConverter(m_context);
649 result->setContactId(contactConverter.toContactRef(contactRefData)->getContactId());
650 result->setAddressBookId(contactConverter.toContactRef(contactRefData)->getAddressBookId());
656 EventAttendeeListPtr CalendarConverter::toVectorOfAttendeesFromDictionary(JSValueRef attendees)
658 EventAttendeeListPtr result(new EventAttendeeList());
660 JSObjectRef objArg = toJSObjectRef(attendees);
661 LogDebug("array length "<<JSGetArrayLength(m_context, objArg));
662 for (std::size_t i = 0; i < JSGetArrayLength(m_context, objArg); i++) {
663 JSValueRef element = JSGetArrayElement(m_context, objArg, i);
664 result->push_back(toAttendee(element));
670 EventAttendeeListPtr CalendarConverter::toVectorOfAttendeesFromReference(JSValueRef attendees)
672 EventAttendeeListPtr result(new EventAttendeeList());
674 JSObjectRef objArg = toJSObjectRef(attendees);
675 LogDebug("array length "<<JSGetArrayLength(m_context, objArg));
676 for (std::size_t i = 0; i < JSGetArrayLength(m_context, objArg); i++) {
677 JSValueRef element = JSGetArrayElement(m_context, objArg, i);
678 if (JSValueIsObjectOfClass(m_context, element, JSCalendarAttendee::getClassRef())) {
679 result->push_back(JSCalendarAttendee::getPrivateObject(JSValueToObject(m_context, element, NULL)));
681 LogDebug("Invalid attendee type. Skip this with index: "<<i);
689 EventAlarmPtr CalendarConverter::toEventAlarm(JSValueRef alarm)
691 EventAlarmPtr result(new EventAlarm());
692 const ScopedJSStringRef absoluteDateStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ALARM_ABSOLUTE_DATE));
693 const ScopedJSStringRef beforeStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ALARM_BEFORE));
694 const ScopedJSStringRef methodStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ALARM_METHOD));
695 const ScopedJSStringRef descriptionStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ALARM_DESCRIPTION));
697 JSObjectRef arg = toJSObjectRef(alarm);
699 JSValueRef absoluteDateData = JSObjectGetProperty(m_context, arg, absoluteDateStr.get(), NULL);
700 JSValueRef beforeData = JSObjectGetProperty(m_context, arg, beforeStr.get(), NULL);
701 JSValueRef methodData = JSObjectGetProperty(m_context, arg, methodStr.get(), NULL);
702 JSValueRef descriptionData = JSObjectGetProperty(m_context, arg, descriptionStr.get(), NULL);
704 if (!JSValueIsUndefined(m_context, absoluteDateData)) {
705 TimeUtilConverter timeConverter(m_context);
706 result->setAbsoluteDate((long long int) (timeConverter.getTimeInMilliseconds(absoluteDateData)/1000));
708 if (!JSValueIsUndefined(m_context, beforeData)) {
709 TimeUtilConverter timeConverter(m_context);
710 result->setDuration(timeConverter.getDurationPropertis(beforeData));
712 if (!JSValueIsUndefined(m_context, methodData)) {
713 result->setMethod(toEventAlarmType(toString(methodData)));
715 if (!JSValueIsUndefined(m_context, descriptionData)) {
716 result->setDescription(toString(descriptionData));
722 EventAlarmListPtr CalendarConverter::toVectorOfEventAlarmsFromDictionary(JSValueRef alarms)
724 EventAlarmListPtr result(new EventAlarmList());
726 JSObjectRef objArg = toJSObjectRef(alarms);
727 LogDebug("array length "<<JSGetArrayLength(m_context, objArg));
728 for (std::size_t i = 0; i < JSGetArrayLength(m_context, objArg); i++) {
729 JSValueRef element = JSGetArrayElement(m_context, objArg, i);
730 result->push_back(toEventAlarm(element));
736 EventAlarmListPtr CalendarConverter::toVectorOfEventAlarmsFromReference(JSValueRef alarms)
738 EventAlarmListPtr result(new EventAlarmList());
740 JSObjectRef objArg = toJSObjectRef(alarms);
741 LogDebug("array length "<<JSGetArrayLength(m_context, objArg));
742 for (std::size_t i = 0; i < JSGetArrayLength(m_context, objArg); i++) {
743 JSValueRef element = JSGetArrayElement(m_context, objArg, i);
744 if (JSValueIsObjectOfClass(m_context, element, JSCalendarAlarm::getClassRef())) {
745 result->push_back(JSCalendarAlarm::getPrivateObject(JSValueToObject(m_context, element, NULL)));
747 LogDebug("Invalid alarm type. Skip this with index: "<<i);
755 CalendarEventPtr CalendarConverter::toItem(const JSValueRef value, bool updateMode)
757 CalendarEventPtr result;
758 JSObjectRef arg = toJSObjectRef(value);
761 LogDebug("Update mode.");
762 result = JSCalendarEvent::getPrivateObject(arg);
764 LogDebug("Constructor mode.");
765 CalendarEventPtr resultPtr(new CalendarEvent());
769 const ScopedJSStringRef descriptionStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_DESCRIPTION));
770 const ScopedJSStringRef summaryStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_SUMMARY));
771 const ScopedJSStringRef startTimeStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_START_DATE));
772 const ScopedJSStringRef durationStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_DURATION));
773 const ScopedJSStringRef locationStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_LOCATION));
774 const ScopedJSStringRef categoriesStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_CATEGORIES));
775 const ScopedJSStringRef statusStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_STATUS));
776 const ScopedJSStringRef alarmsStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_ALARMS));
777 const ScopedJSStringRef isAllDayStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_IS_ALL_DAY));
778 const ScopedJSStringRef organizerStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_ORGANIZER));
779 const ScopedJSStringRef attendeesStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_ATTENDEES));
780 const ScopedJSStringRef geolocationStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_GEOLOCATION));
781 const ScopedJSStringRef visibilityStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_VISIBILITY));
782 const ScopedJSStringRef availabilityStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_EVENT_AVAILABILITY));
783 const ScopedJSStringRef recurrenceRuleStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_EVENT_RECURRENCE_RULE));
784 const ScopedJSStringRef priorityStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_PRIORITY));
785 const ScopedJSStringRef endDateStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_EVENT_END_DATE));
786 const ScopedJSStringRef dueDateStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_TASK_DUE_DATE));
787 const ScopedJSStringRef completedDateStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_TASK_COMPLETED_DATE));
788 const ScopedJSStringRef progressStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_TASK_PROGRESS));
790 JSValueRef descriptionData = JSObjectGetProperty(m_context, arg, descriptionStr.get(), NULL);
791 JSValueRef summaryData = JSObjectGetProperty(m_context, arg, summaryStr.get(), NULL);
792 JSValueRef startTimeData = JSObjectGetProperty(m_context, arg, startTimeStr.get(), NULL);
793 JSValueRef durationData = JSObjectGetProperty(m_context, arg, durationStr.get(), NULL);
794 JSValueRef locationData = JSObjectGetProperty(m_context, arg, locationStr.get(), NULL);
795 JSValueRef categoriesData = JSObjectGetProperty(m_context, arg, categoriesStr.get(), NULL);
796 JSValueRef statusData = JSObjectGetProperty(m_context, arg, statusStr.get(), NULL);
797 JSValueRef alarmsData = JSObjectGetProperty(m_context, arg, alarmsStr.get(), NULL);
798 JSValueRef isAllDayData = JSObjectGetProperty(m_context, arg, isAllDayStr.get(), NULL);
799 JSValueRef organizerData = JSObjectGetProperty(m_context, arg, organizerStr.get(), NULL);
800 JSValueRef attendeesData = JSObjectGetProperty(m_context, arg, attendeesStr.get(), NULL);
801 JSValueRef geolocationData = JSObjectGetProperty(m_context, arg, geolocationStr.get(), NULL);
802 JSValueRef visibilityData = JSObjectGetProperty(m_context, arg, visibilityStr.get(), NULL);
803 JSValueRef availabilityData = JSObjectGetProperty(m_context, arg, availabilityStr.get(), NULL);
804 JSValueRef recurrenceRuleData = JSObjectGetProperty(m_context, arg, recurrenceRuleStr.get(), NULL);
805 JSValueRef priorityData = JSObjectGetProperty(m_context, arg, priorityStr.get(), NULL);
806 JSValueRef endDateData = JSObjectGetProperty(m_context, arg, endDateStr.get(), NULL);
807 JSValueRef dueDateData = JSObjectGetProperty(m_context, arg, dueDateStr.get(), NULL);
808 JSValueRef completedDateData = JSObjectGetProperty(m_context, arg, completedDateStr.get(), NULL);
809 JSValueRef progressData = JSObjectGetProperty(m_context, arg, progressStr.get(), NULL);
811 TimeUtilConverter timeUtilConverter(m_context);
813 if (!JSValueIsUndefined(m_context, descriptionData)) {
814 result->setDescription(toString(descriptionData));
817 if (!JSValueIsUndefined(m_context, summaryData)) {
818 result->setSubject(toString(summaryData));
821 //It's important to set startTime before duration to set end date
822 if (!JSValueIsUndefined(m_context, startTimeData)) {
823 result->setStartTime((long long int) (timeUtilConverter.getTimeInMilliseconds(startTimeData)/1000));
824 result->setTimeZone(timeUtilConverter.getPropertiesInTZDate(startTimeData).timezone);
825 LogInfo("start time converted from TZDate: "<<result->getStartTime()<<", time zone: "<<result->getTimeZone());
828 //set default value, current local time.
829 if(m_calendarType == CalendarEvent::EVENT_TYPE) {
830 //result->setStartTime(std::time(NULL));
834 if (!JSValueIsUndefined(m_context, durationData)) {
835 long length = timeUtilConverter.getDurationLength(durationData);
836 int unit = timeUtilConverter.getDurationUnit(durationData);
837 LogDebug("duration length: "<<length<<", unit "<<unit);
839 ThrowMsg(ConversionException, "Wrong duration length.");
841 if( MSECS_UNIT==unit ) {
842 result->setEndTime(result->getStartTime() + length/1000);
843 } else if( SECONDS_UNIT==unit ) {
844 result->setEndTime(result->getStartTime() + length);
845 } else if ( MINUTES_UNIT==unit ) {
846 result->setEndTime(result->getStartTime() + length*60);
847 } else if ( HOURS_UNIT==unit ) {
848 result->setEndTime(result->getStartTime() + length*60*60);
849 } else if ( DAYS_UNIT==unit ) {
850 result->setEndTime(result->getStartTime() + length*24*60*60);
852 ThrowMsg(ConversionException, "Wrong duration unit.");
855 if (!JSValueIsUndefined(m_context, locationData)) {
856 result->setLocation(toString(locationData));
858 if (!JSValueIsUndefined(m_context, categoriesData)) {
859 StringArrayPtr categories(new StringArray());
860 *categories = toVectorOfStrings(categoriesData);
861 result->setCategories(categories);
864 if (!JSValueIsUndefined(m_context, statusData)) {
865 result->setStatus(toEventStatus(toString(statusData)));
867 result->setStatus(CalendarEvent::CONFIRMED_STATUS);
869 if (!JSValueIsUndefined(m_context, alarmsData)) {
870 EventAlarmListPtr alarms = toVectorOfEventAlarmsFromReference(alarmsData);
871 result->setAlarms(alarms);
873 if (!JSValueIsUndefined(m_context, isAllDayData)) {
874 result->setIsAllDay(toBool(isAllDayData));
876 if (!JSValueIsUndefined(m_context, organizerData)) {
877 result->setOrganizer(toString(organizerData));
879 if (!JSValueIsUndefined(m_context, attendeesData)) {
880 EventAttendeeListPtr attendees = toVectorOfAttendeesFromReference(attendeesData);
881 result->setAttendees(attendees);
883 if (!JSValueIsUndefined(m_context, geolocationData)) {
884 DeviceAPI::Tizen::SimpleCoordinatesPtr geoLocation =
885 DeviceAPI::Tizen::JSSimpleCoordinates::getSimpleCoordinates(m_context, geolocationData);
886 result->setLatitude(geoLocation->getLatitude());
887 result->setLongitude(geoLocation->getLongitude());
889 if (!JSValueIsUndefined(m_context, visibilityData)) {
890 result->setVisibility(toEventVisibility(toString(visibilityData)));
892 if (!JSValueIsUndefined(m_context, availabilityData)) {
893 result->setAvailability(toEventAvailability(toString(availabilityData)));
895 if (!JSValueIsUndefined(m_context, recurrenceRuleData)) {
897 result->setRecurrenceRule(toEventRecurrenceRule(recurrenceRuleData));
899 result->setRecurrenceRule(JSCalendarRecurrenceRule::getPrivateObject(JSValueToObject(m_context, recurrenceRuleData, NULL)));
902 if (!JSValueIsUndefined(m_context, priorityData)) {
903 result->setPriority(toTaskPriority(toString(priorityData)));
905 if (!JSValueIsUndefined(m_context, endDateData)) {
906 if( result->getTimeZone().empty() ) {
907 result->setTimeZone(timeUtilConverter.getPropertiesInTZDate(endDateData).timezone);
909 result->setEndTime((long long int) (timeUtilConverter.getTimeInMilliseconds(endDateData)/1000));
911 if (!JSValueIsUndefined(m_context, dueDateData)) {
912 if( result->getTimeZone().empty() ) {
913 result->setTimeZone(timeUtilConverter.getPropertiesInTZDate(dueDateData).timezone);
915 result->setEndTime((long long int) (timeUtilConverter.getTimeInMilliseconds(dueDateData)/1000));
917 if (!JSValueIsUndefined(m_context, completedDateData)) {
918 if( result->getTimeZone().empty() ) {
919 result->setTimeZone(timeUtilConverter.getPropertiesInTZDate(completedDateData).timezone);
921 result->setCompletedDate((long long int) (timeUtilConverter.getTimeInMilliseconds(completedDateData)/1000));
923 if (!JSValueIsUndefined(m_context, progressData)) {
924 result->setProgress(toInt(progressData));
926 LogDebug("timezone: "<<result->getTimeZone());
931 CalendarEventListPtr CalendarConverter::toVectorOfItems(JSValueRef events)
933 CalendarEventListPtr result(new CalendarEventList());
935 JSObjectRef objArg = toJSObjectRef(events);
936 LogDebug("array length "<<JSGetArrayLength(m_context, objArg));
937 for (std::size_t i = 0; i < JSGetArrayLength(m_context, objArg); i++) {
938 JSValueRef element = JSGetArrayElement(m_context, objArg, i);
939 if (JSValueIsObjectOfClass(m_context, element, JSCalendarEvent::getClassRef())) {
940 JSObjectRef arg = JSValueToObject(m_context, element, NULL);
941 result->push_back(JSCalendarEvent::getPrivateObject(arg));
942 } else if (JSValueIsObjectOfClass(m_context, element, JSCalendarTask::getClassRef())) {
943 JSObjectRef arg = JSValueToObject(m_context, element, NULL);
944 result->push_back(JSCalendarTask::getPrivateObject(arg));
946 LogDebug("Invalid item type. Skip this with index: "<<i);
954 CalendarEventListPtr CalendarConverter::toVectorOfItemsFromDictionary(JSValueRef events)
956 CalendarEventListPtr result(new CalendarEventList());
958 JSObjectRef objArg = toJSObjectRef(events);
959 LogDebug("array length "<<JSGetArrayLength(m_context, objArg));
960 for (std::size_t i = 0; i < JSGetArrayLength(m_context, objArg); i++) {
961 result->push_back(toItem(JSGetArrayElement(m_context, objArg, i), true));
967 EventIdPtr CalendarConverter::toEventId(JSValueRef eventId)
969 EventIdPtr result(new EventId());
970 const ScopedJSStringRef uidStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_EVENT_ID_UID));
971 const ScopedJSStringRef recurrenceIdStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_EVENT_ID_RECURRENCEID));
973 JSObjectRef arg = toJSObjectRef(eventId);
975 JSValueRef uidData = JSObjectGetProperty(m_context, arg, uidStr.get(), NULL);
976 JSValueRef recurrenceIdData = JSObjectGetProperty(m_context, arg, recurrenceIdStr.get(), NULL);
978 if (!JSValueIsUndefined(m_context, uidData)) {
979 result->setUId(toString(uidData));
981 if (!JSValueIsUndefined(m_context, recurrenceIdData)) {
982 result->setRecurrenceId(toString(recurrenceIdData));
988 EventIdListPtr CalendarConverter::toVectorOfEventIds(JSValueRef eventIds)
990 EventIdListPtr result(new EventIdList());
992 JSObjectRef objArg = toJSObjectRef(eventIds);
993 LogDebug("array length "<<JSGetArrayLength(m_context, objArg));
994 for (std::size_t i = 0; i < JSGetArrayLength(m_context, objArg); i++) {
995 JSValueRef element = JSGetArrayElement(m_context, objArg, i);
997 if (JSValueIsObjectOfClass(m_context, element, JSCalendarEventId::getClassRef())) {
998 EventIdPtr idPtr = JSCalendarEventId::getPrivateObject(JSValueToObject(m_context, element, NULL));
999 idPtr->setCalendarType(CalendarEvent::EVENT_TYPE);
1000 result->push_back(idPtr);
1002 LogDebug("Invalid event id type. Skip this index: "<<i);
1010 std::vector<long long int> CalendarConverter::toVectorOfTimeFromTZDate(JSValueRef dates)
1012 std::vector<long long int> result;
1013 TimeUtilConverter converter(m_context);
1015 JSObjectRef objArg = toJSObjectRef(dates);
1016 LogDebug("array length "<<JSGetArrayLength(m_context, objArg));
1017 for (std::size_t i = 0; i < JSGetArrayLength(m_context, objArg); i++) {
1018 JSValueRef element = JSGetArrayElement(m_context, objArg, i);
1019 result.push_back((long long int) (converter.getTimeInMilliseconds(element)/1000));
1025 std::string CalendarConverter::toTizenValue(CalendarEvent::TaskPriority abstractValue) const
1027 switch (abstractValue) {
1028 case CalendarEvent::HIGH_PRIORITY:
1029 return TIZEN_CALENDAR_PROPERTY_HIGH_PRIORITY;
1030 case CalendarEvent::MEDIUM_PRIORITY:
1031 return TIZEN_CALENDAR_PROPERTY_MEDIUM_PRIORITY;
1032 case CalendarEvent::LOW_PRIORITY:
1033 return TIZEN_CALENDAR_PROPERTY_LOW_PRIORITY;
1037 return TIZEN_CALENDAR_PROPERTY_LOW_PRIORITY;
1040 CalendarEvent::TaskPriority CalendarConverter::toTaskPriority(std::string priority) const
1042 if (!priority.compare(TIZEN_CALENDAR_PROPERTY_HIGH_PRIORITY))
1043 return CalendarEvent::HIGH_PRIORITY;
1044 else if (!priority.compare(TIZEN_CALENDAR_PROPERTY_MEDIUM_PRIORITY))
1045 return CalendarEvent::MEDIUM_PRIORITY;
1046 else if (!priority.compare(TIZEN_CALENDAR_PROPERTY_LOW_PRIORITY))
1047 return CalendarEvent::LOW_PRIORITY;
1049 ThrowMsg(ConversionException, "Invalid priority type.");
1051 return CalendarEvent::UNDEFINED_PRIORITY;
1054 CalendarEvent::CalendarType CalendarConverter::toCalendarType(std::string type) const
1056 if (!type.compare(TIZEN_CALENDAR_PROPERTY_TYPE_EVENT))
1057 return CalendarEvent::EVENT_TYPE;
1058 else if (!type.compare(TIZEN_CALENDAR_PROPERTY_TYPE_TASK))
1059 return CalendarEvent::TASK_TYPE;
1061 ThrowMsg(ConversionException, "Invalid calendar type.");
1063 return CalendarEvent::UNDEFINED_TYPE;
1066 CalendarEvent::VObjectFormat CalendarConverter::toVObjectFormat(std::string format) const
1068 if (!format.compare(TIZEN_CALENDAR_PROPERTY_VCALENDAR_20_FORMAT))
1069 return CalendarEvent::ICALENDAR_20;
1070 else if (!format.compare(TIZEN_CALENDAR_PROPERTY_VCALENDAR_10_FORMAT))
1071 return CalendarEvent::VCALENDAR_10;
1073 ThrowMsg(ConversionException, "Invalid format type.");
1075 return CalendarEvent::UNDEFINED_FORMAT;