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.
18 #include <CommonsJavaScript/Validator.h>
19 #include <CommonsJavaScript/JSUtils.h>
20 #include "JSCalendarEvent.h"
21 #include "JSCalendarTask.h"
22 #include "JSCalendarItemProperties.h"
23 #include "JSCalendarEventId.h"
24 #include "CalendarConverter.h"
25 #include "JSCalendar.h"
26 #include "JSCalendarManager.h"
27 #include "JSCalendarAttendee.h"
28 #include "JSCalendarRecurrenceRule.h"
29 #include "JSCalendarAlarm.h"
31 #include <TimeUtilConverter.h>
32 #include <DurationProperties.h>
33 #include <JSSimpleCoordinates.h>
34 #include <ContactConverter.h>
37 using namespace WrtDeviceApis::Commons;
38 using namespace WrtDeviceApis::CommonsJavaScript;
39 using namespace DeviceAPI::Time;
42 const int DEFAULT_EVENT_INTERVAL = 1;
48 CalendarConverter::CalendarConverter(JSContextRef context, CalendarEvent::CalendarType calendarType) : Converter(context)
50 m_calendarType = calendarType;
53 CalendarConverter::~CalendarConverter()
57 JSValueRef CalendarConverter::toJSValueRefEvent(const CalendarEventPtr& arg)
59 return JSUtils::makeObject(m_context, JSCalendarEvent::getClassRef(), arg);
62 JSValueRef CalendarConverter::toJSValueRefTask(const CalendarEventPtr& arg)
64 return JSUtils::makeObject(m_context, JSCalendarTask::getClassRef(), arg);
67 JSValueRef CalendarConverter::toJSValueRefEventArray(const CalendarEventListPtr &arg)
69 return toJSValueRef_(*arg, &CalendarConverter::toJSValueRefEvent, this);
72 JSValueRef CalendarConverter::toJSValueRefTaskArray(const CalendarEventListPtr &arg)
74 return toJSValueRef_(*arg, &CalendarConverter::toJSValueRefTask, this);
77 JSValueRef CalendarConverter::toJSValueRefCalendar(const ICalendarPtr& arg)
79 CalendarPrivObject *priv = new CalendarPrivObject(m_context, arg);
80 return JSObjectMake(m_context, JSCalendar::getClassRef(), priv);
83 JSValueRef CalendarConverter::toJSValueRef(const std::vector<ICalendarPtr> &arg)
85 return toJSValueRef_(arg, &CalendarConverter::toJSValueRefCalendar, this);
88 JSValueRef CalendarConverter::toJSValueRefStringArray(const StringArrayPtr &arg)
90 int size = arg->size();
92 JSObjectRef resultObject = JSCreateArrayObject(m_context, 0, NULL);
94 ThrowMsg(ConversionException, "Can not create an array object.");
97 for(int i = 0; i < size; i++) {
98 JSValueRef jsvalue = toJSValueRef(arg->at(i));
99 if (!JSSetArrayElement(m_context, resultObject, i, jsvalue)) {
100 ThrowMsg(ConversionException, "Can not add an object to array.");
107 JSValueRef CalendarConverter::toJSValueRefNumberArray(const NumberArrayPtr &arg)
109 int size = arg->size();
111 JSObjectRef resultObject = JSCreateArrayObject(m_context, 0, NULL);
113 ThrowMsg(ConversionException, "Can not create an array object.");
116 for(int i = 0; i < size; i++) {
117 JSValueRef jsvalue = toJSValueRef(arg->at(i));
118 if (!JSSetArrayElement(m_context, resultObject, i, jsvalue)) {
119 ThrowMsg(ConversionException, "Can not add an object to array.");
126 JSValueRef CalendarConverter::toJSValueRefTZDateArray(const NumberArrayPtr &arg, const std::string &timeZone)
128 int size = arg->size();
130 JSObjectRef resultObject = JSCreateArrayObject(m_context, 0, NULL);
132 ThrowMsg(ConversionException, "Can not create an array object.");
135 TimeUtilConverter timeConverter(m_context);
136 for(int i = 0; i < size; i++) {
137 JSValueRef jsvalue = timeConverter.toJSValueRefTZDate((double)((arg->at(i))*1000.0), timeZone);
138 if (!JSSetArrayElement(m_context, resultObject, i, jsvalue)) {
139 ThrowMsg(ConversionException, "Can not add an object to array.");
146 StringArrayPtr CalendarConverter::toStringArray(const JSValueRef &jsValue)
148 StringArrayPtr result = StringArrayPtr(new StringArray());
149 if(!JSIsArrayValue(m_context, jsValue)) {
150 LoggerW("JSValue is not an array.");
151 ThrowMsg(ConversionException, "Invalid string array type.");
154 JSObjectRef jsObject = toJSObjectRef(jsValue);
155 for (std::size_t i = 0; i < JSGetArrayLength(m_context, jsObject); ++i) {
156 JSValueRef element = JSGetArrayElement(m_context, jsObject, i);
157 result->push_back(toString(element));
162 NumberArrayPtr CalendarConverter::toNumberArray(const JSValueRef &jsValue)
164 NumberArrayPtr result = NumberArrayPtr(new NumberArray());
165 if(!JSIsArrayValue(m_context, jsValue)) {
166 LoggerW("JSValue is not an array.");
167 ThrowMsg(ConversionException, "Invalid number array type.");
170 JSObjectRef jsObject = toJSObjectRef(jsValue);
171 for (std::size_t i = 0; i < JSGetArrayLength(m_context, jsObject); ++i) {
172 JSValueRef element = JSGetArrayElement(m_context, jsObject, i);
173 result->push_back((long long int) (toLongLong(element)));
178 NumberArrayPtr CalendarConverter::toTZDateArray(const JSValueRef &jsValue)
180 NumberArrayPtr result = NumberArrayPtr(new NumberArray());
181 if(!JSIsArrayValue(m_context, jsValue)) {
182 LoggerW("JSValue is not an array.");
183 ThrowMsg(ConversionException, "Invalid TZDate array type.");
186 TimeUtilConverter timeConverter(m_context);
188 JSObjectRef jsObject = toJSObjectRef(jsValue);
189 for (std::size_t i = 0; i < JSGetArrayLength(m_context, jsObject); ++i) {
190 JSValueRef element = JSGetArrayElement(m_context, jsObject, i);
191 result->push_back((long long int) (timeConverter.getTimeInMilliseconds(element)/1000));
196 EventAlarm::EventAlarmType CalendarConverter::toEventAlarmType(std::string alarmMethod)
199 if (!alarmMethod.compare(TIZEN_CALENDAR_PROPERTY_DISPLAY_ALARM))
200 return EventAlarm::SILENT_ALARM;
201 else if (!alarmMethod.compare(TIZEN_CALENDAR_PROPERTY_SOUND_ALARM))
202 return EventAlarm::SOUND_ALARM;
204 ThrowMsg(ConversionException, "Invalid alarm type.");
206 return EventAlarm::UNDEFINED_ALARM_TYPE;
209 std::string CalendarConverter::toTizenValue(EventAlarm::EventAlarmType abstractValue) const
211 switch (abstractValue) {
212 case EventAlarm::SILENT_ALARM:
213 return TIZEN_CALENDAR_PROPERTY_DISPLAY_ALARM;
214 case EventAlarm::SOUND_ALARM:
215 return TIZEN_CALENDAR_PROPERTY_SOUND_ALARM;
219 ThrowMsg(ConversionException, "Invalid alarm type");
222 CalendarEvent::EventStatus CalendarConverter::toEventStatus(std::string tizenValue) const
224 if(!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_TENTATIVE_STATUS))
225 return CalendarEvent::TENTATIVE_STATUS;
226 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_CONFIRMED_STATUS))
227 return CalendarEvent::CONFIRMED_STATUS;
228 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_CANCELLED_STATUS))
229 return CalendarEvent::CANCELLED_STATUS;
230 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_NEEDS_ACTION_STATUS))
231 return CalendarEvent::NEEDS_ACTION_STATUS;
232 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_IN_PROCESS_STATUS))
233 return CalendarEvent::IN_PROCESS_STATUS;
234 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_COMPLETED_STATUS))
235 return CalendarEvent::COMPLETED_STATUS;
237 ThrowMsg(ConversionException, "Invalid status type.");
239 return CalendarEvent::UNDEFINED_STATUS;
242 std::string CalendarConverter::toTizenValue(CalendarEvent::EventStatus abstractValue)
245 switch (abstractValue) {
246 case CalendarEvent::TENTATIVE_STATUS:
247 return TIZEN_CALENDAR_PROPERTY_TENTATIVE_STATUS;
248 case CalendarEvent::CONFIRMED_STATUS:
249 return TIZEN_CALENDAR_PROPERTY_CONFIRMED_STATUS;
250 case CalendarEvent::CANCELLED_STATUS:
251 return TIZEN_CALENDAR_PROPERTY_CANCELLED_STATUS;
252 case CalendarEvent::NEEDS_ACTION_STATUS:
253 return TIZEN_CALENDAR_PROPERTY_NEEDS_ACTION_STATUS;
254 case CalendarEvent::IN_PROCESS_STATUS:
255 return TIZEN_CALENDAR_PROPERTY_IN_PROCESS_STATUS;
256 case CalendarEvent::COMPLETED_STATUS:
257 return TIZEN_CALENDAR_PROPERTY_COMPLETED_STATUS;
260 if (CalendarEvent::TASK_TYPE==m_calendarType) {
261 return TIZEN_CALENDAR_PROPERTY_NEEDS_ACTION_STATUS;
263 return TIZEN_CALENDAR_PROPERTY_CONFIRMED_STATUS;
270 EventRecurrenceRule::EventRecurrence CalendarConverter::toRecurrenceFrequency(
271 std::string tizenValue) const
273 if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_DAILY_RECURRENCE))
274 return EventRecurrenceRule::DAILY_RECURRENCE;
275 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_WEEKLY_RECURRENCE))
276 return EventRecurrenceRule::WEEKLY_RECURRENCE;
277 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_MONTHLY_RECURRENCE))
278 return EventRecurrenceRule::MONTHLY_RECURRENCE;
279 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_YEARLY_RECURRENCE))
280 return EventRecurrenceRule::YEARLY_RECURRENCE;
282 ThrowMsg(ConversionException, "Invalid recurrence frequency type.");
284 return EventRecurrenceRule::UNDEFINED_RECURRENCE;
287 std::string CalendarConverter::toTizenValue(
288 EventRecurrenceRule::EventRecurrence abstractValue) const
290 switch (abstractValue) {
291 case EventRecurrenceRule::DAILY_RECURRENCE:
292 return TIZEN_CALENDAR_PROPERTY_DAILY_RECURRENCE;
293 case EventRecurrenceRule::WEEKLY_RECURRENCE:
294 return TIZEN_CALENDAR_PROPERTY_WEEKLY_RECURRENCE;
295 case EventRecurrenceRule::MONTHLY_RECURRENCE:
296 return TIZEN_CALENDAR_PROPERTY_MONTHLY_RECURRENCE;
297 case EventRecurrenceRule::YEARLY_RECURRENCE:
298 return TIZEN_CALENDAR_PROPERTY_YEARLY_RECURRENCE;
299 case EventRecurrenceRule::NO_RECURRENCE:
306 EventRecurrenceRulePtr CalendarConverter::toEventRecurrenceRule(JSValueRef rrule)
308 EventRecurrenceRulePtr result(new EventRecurrenceRule());
310 const ScopedJSStringRef frequencyStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_FREQUENCY));
311 const ScopedJSStringRef intervalStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_INTERVAL));
312 const ScopedJSStringRef untilDateStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_UNTIL_DATE));
313 const ScopedJSStringRef occurrenceCountStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_OCCURRENCE_COUNT));
314 //const ScopedJSStringRef daysOfTheMonthStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_DAYS_OF_THE_MONTH));
315 const ScopedJSStringRef daysOfTheWeekStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_DAYS_OF_THE_WEEK));
316 //const ScopedJSStringRef daysOfTheYearStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_DAYS_OF_THE_YEAR));
317 //const ScopedJSStringRef weeksOfTheYearStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_WEEKS_OF_THE_YEAR));
318 const ScopedJSStringRef setPositionsStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_SET_POSITIONS));
319 const ScopedJSStringRef exceptionsStr(JSStringCreateWithUTF8CString(TIZEN_RECURRENCE_RULE_EXCEPTIONS));
321 JSObjectRef arg = toJSObjectRef(rrule);
323 JSValueRef frequencyData = JSObjectGetProperty(m_context, arg, frequencyStr.get(), NULL);
324 JSValueRef intervalData = JSObjectGetProperty(m_context, arg, intervalStr.get(), NULL);
325 JSValueRef untilDateData = JSObjectGetProperty(m_context, arg, untilDateStr.get(), NULL);
326 JSValueRef occurrenceCountData = JSObjectGetProperty(m_context, arg, occurrenceCountStr.get(), NULL);
327 //JSValueRef daysOfTheMonthData = JSObjectGetProperty(m_context, arg, daysOfTheMonthStr.get(), NULL);
328 JSValueRef daysOfTheWeekData = JSObjectGetProperty(m_context, arg, daysOfTheWeekStr.get(), NULL);
329 //JSValueRef daysOfTheYearData = JSObjectGetProperty(m_context, arg, daysOfTheYearStr.get(), NULL);
330 //JSValueRef weeksOfTheYearData = JSObjectGetProperty(m_context, arg, weeksOfTheYearStr.get(), NULL);
331 JSValueRef setPositionsData = JSObjectGetProperty(m_context, arg, setPositionsStr.get(), NULL);
332 JSValueRef exceptionsData = JSObjectGetProperty(m_context, arg, exceptionsStr.get(), NULL);
334 if (!JSValueIsUndefined(m_context, frequencyData)) {
335 result->setFrequency(toRecurrenceFrequency(toString(frequencyData)));
337 if (!JSValueIsUndefined(m_context, intervalData)) {
338 result->setInterval(toInt(intervalData));
340 if (!JSValueIsUndefined(m_context, untilDateData)) {
341 if (!JSValueIsNull(m_context, untilDateData)) {
342 TimeUtilConverter timeUtilConverter(m_context);
343 result->setEndDate((long long int) (timeUtilConverter.getTimeInMilliseconds(untilDateData)/1000));
344 result->setTimeZone(timeUtilConverter.getPropertiesInTZDate(untilDateData).timezone);
346 result->setEndDate(UNDEFINED_TIME);
349 if (!JSValueIsUndefined(m_context, occurrenceCountData)) {
350 result->setOccurrenceCount(toLong(occurrenceCountData));
352 /*if (!JSValueIsUndefined(m_context, daysOfTheMonthData)) {
353 result->setDaysOfTheMonth(toVectorOfInts(daysOfTheMonthData));
355 if (!JSValueIsUndefined(m_context, daysOfTheWeekData)) {
356 result->setDaysOfTheWeek(toStringArray(daysOfTheWeekData));
358 /*if (!JSValueIsUndefined(m_context, daysOfTheYearData)) {
359 result->setDaysOfTheYear(toVectorOfInts(daysOfTheYearData));
361 if (!JSValueIsUndefined(m_context, weeksOfTheYearData)) {
362 result->setWeeksOfTheYear(toVectorOfInts(weeksOfTheYearData));
364 if (!JSValueIsUndefined(m_context, setPositionsData)) {
365 result->setSetPositions(toNumberArray(setPositionsData));
367 if (!JSValueIsUndefined(m_context, exceptionsData)) {
368 result->setExceptions(toTZDateArray(exceptionsData));
374 CalendarEvent::EventVisibility CalendarConverter::toEventVisibility(std::string tizenValue)
377 if(!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_PUBLIC_VISIBILITY))
378 return CalendarEvent::PUBLIC_VISIBILITY;
379 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_PRIVATE_VISIBILITY))
380 return CalendarEvent::PRIVATE_VISIBILITY;
381 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_CONFIDENTIAL_VISIBILITY))
382 return CalendarEvent::CONFIDENTIAL_VISIBILITY;
384 ThrowMsg(ConversionException, "Invalid visibility type.");
386 return CalendarEvent::UNDEFINED_VISIBILITY;
389 std::string CalendarConverter::toTizenValue(
390 CalendarEvent::EventVisibility abstractValue) const
392 switch (abstractValue) {
393 case CalendarEvent::PUBLIC_VISIBILITY:
394 return TIZEN_CALENDAR_PROPERTY_PUBLIC_VISIBILITY;
395 case CalendarEvent::PRIVATE_VISIBILITY:
396 return TIZEN_CALENDAR_PROPERTY_PRIVATE_VISIBILITY;
397 case CalendarEvent::CONFIDENTIAL_VISIBILITY:
398 return TIZEN_CALENDAR_PROPERTY_CONFIDENTIAL_VISIBILITY;
403 return TIZEN_CALENDAR_PROPERTY_PUBLIC_VISIBILITY;
406 CalendarEvent::EventAvailability CalendarConverter::toEventAvailability(std::string tizenValue)
409 if(!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_BUSY))
410 return CalendarEvent::BUSY_FB;
411 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_BUSY_UNAVAILABLE_FB))
412 return CalendarEvent::BUSY_UNAVAILABLE_FB;
413 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_FREE))
414 return CalendarEvent::FREE_FB;
415 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_BUSY_TENTATIVE))
416 return CalendarEvent::BUSY_TENTATIVE_FB;
418 ThrowMsg(ConversionException, "Invalid availability type.");
420 return CalendarEvent::UNDEFINED_AVAILABILITY;
423 std::string CalendarConverter::toTizenValue(
424 CalendarEvent::EventAvailability abstractValue) const
426 switch (abstractValue) {
427 case CalendarEvent::BUSY_FB:
428 return TIZEN_CALENDAR_PROPERTY_BUSY;
429 case CalendarEvent::BUSY_UNAVAILABLE_FB:
430 return TIZEN_CALENDAR_PROPERTY_BUSY_UNAVAILABLE_FB;
431 case CalendarEvent::FREE_FB:
432 return TIZEN_CALENDAR_PROPERTY_FREE;
433 case CalendarEvent::BUSY_TENTATIVE_FB:
434 return TIZEN_CALENDAR_PROPERTY_BUSY_TENTATIVE;
439 return TIZEN_CALENDAR_PROPERTY_BUSY;
442 EventAttendee::EventAttendeeRole CalendarConverter::toEventAttendeeRole(std::string tizenValue)
445 if(!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_REQ_PARTICIPANT_ROLE))
446 return EventAttendee::REQ_PARTICIPANT_ROLE;
447 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_OPT_PARTICIPANT_ROLE))
448 return EventAttendee::OPT_PARTICIPANT_ROLE;
449 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_NON_PARTICIPANT_ROLE))
450 return EventAttendee::NON_PARTICIPANT_ROLE;
451 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_CHAIR_ROLE))
452 return EventAttendee::CHAIR_ROLE;
454 ThrowMsg(ConversionException, "Invalid attendee role type.");
456 return EventAttendee::UNDEFINED_ATTENDEE_ROLE;
459 std::string CalendarConverter::toTizenValue(
460 EventAttendee::EventAttendeeRole abstractValue) const
462 switch (abstractValue) {
463 case EventAttendee::REQ_PARTICIPANT_ROLE:
464 return TIZEN_CALENDAR_PROPERTY_REQ_PARTICIPANT_ROLE;
465 case EventAttendee::OPT_PARTICIPANT_ROLE:
466 return TIZEN_CALENDAR_PROPERTY_OPT_PARTICIPANT_ROLE;
467 case EventAttendee::NON_PARTICIPANT_ROLE:
468 return TIZEN_CALENDAR_PROPERTY_NON_PARTICIPANT_ROLE;
469 case EventAttendee::CHAIR_ROLE:
470 return TIZEN_CALENDAR_PROPERTY_CHAIR_ROLE;
474 return TIZEN_CALENDAR_PROPERTY_REQ_PARTICIPANT_ROLE;
477 EventAttendee::EventAttendeeStatus CalendarConverter::toEventAttendeeStatus(std::string tizenValue)
480 if(!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_PENDING_STATUS))
481 return EventAttendee::PENDING_AT_STATUS;
482 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_ACCEPTED_STATUS))
483 return EventAttendee::ACCEPTED_AT_STATUS;
484 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_DECLINED_STATUS))
485 return EventAttendee::DECLINED_AT_STATUS;
486 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_TENTATIVE_STATUS))
487 return EventAttendee::TENTATIVE_AT_STATUS;
488 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_DELEGATED_STATUS))
489 return EventAttendee::DELEGATED_AT_STATUS;
490 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_COMPLETED_STATUS))
491 return EventAttendee::COMPLETED_AT_STATUS;
492 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_IN_PROCESS_STATUS))
493 return EventAttendee::IN_PROCESS_AT_STATUS;
495 ThrowMsg(ConversionException, "Invalid attendee status type.");
497 return EventAttendee::UNDEFINED_ATTENDEE_STATUS;
500 std::string CalendarConverter::toTizenValue(
501 EventAttendee::EventAttendeeStatus abstractValue) const
503 switch (abstractValue) {
504 case EventAttendee::PENDING_AT_STATUS:
505 return TIZEN_CALENDAR_PROPERTY_PENDING_STATUS;
506 case EventAttendee::ACCEPTED_AT_STATUS:
507 return TIZEN_CALENDAR_PROPERTY_ACCEPTED_STATUS;
508 case EventAttendee::DECLINED_AT_STATUS:
509 return TIZEN_CALENDAR_PROPERTY_DECLINED_STATUS;
510 case EventAttendee::TENTATIVE_AT_STATUS:
511 return TIZEN_CALENDAR_PROPERTY_TENTATIVE_STATUS;
512 case EventAttendee::DELEGATED_AT_STATUS:
513 return TIZEN_CALENDAR_PROPERTY_DELEGATED_STATUS;
514 case EventAttendee::COMPLETED_AT_STATUS:
515 return TIZEN_CALENDAR_PROPERTY_COMPLETED_STATUS;
516 case EventAttendee::IN_PROCESS_AT_STATUS:
517 return TIZEN_CALENDAR_PROPERTY_IN_PROCESS_STATUS;
521 return TIZEN_CALENDAR_PROPERTY_PENDING_STATUS;
524 EventAttendee::EventAttendeeType CalendarConverter::toEventAttendeeType(std::string tizenValue)
527 if(!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_INDIVIDUAL_TYPE))
528 return EventAttendee::INDIVIDUAL_TYPE;
529 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_GROUP_TYPE))
530 return EventAttendee::GROUP_TYPE;
531 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_RESOURCE_TYPE))
532 return EventAttendee::RESOURCE_TYPE;
533 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_ROOM_TYPE))
534 return EventAttendee::ROOM_TYPE;
535 else if (!tizenValue.compare(TIZEN_CALENDAR_PROPERTY_UNKNOWN_TYPE))
536 return EventAttendee::UNKNOWN_TYPE;
538 ThrowMsg(ConversionException, "Invalid attendee type.");
540 return EventAttendee::INDIVIDUAL_TYPE;
543 std::string CalendarConverter::toTizenValue(
544 EventAttendee::EventAttendeeType abstractValue) const
546 switch (abstractValue) {
547 case EventAttendee::INDIVIDUAL_TYPE:
548 return TIZEN_CALENDAR_PROPERTY_INDIVIDUAL_TYPE;
549 case EventAttendee::GROUP_TYPE:
550 return TIZEN_CALENDAR_PROPERTY_GROUP_TYPE;
551 case EventAttendee::RESOURCE_TYPE:
552 return TIZEN_CALENDAR_PROPERTY_RESOURCE_TYPE;
553 case EventAttendee::ROOM_TYPE:
554 return TIZEN_CALENDAR_PROPERTY_ROOM_TYPE;
555 case EventAttendee::UNKNOWN_TYPE:
556 return TIZEN_CALENDAR_PROPERTY_UNKNOWN_TYPE;
561 return TIZEN_CALENDAR_PROPERTY_INDIVIDUAL_TYPE;
564 JSValueRef CalendarConverter::toFunctionOrNull(const JSValueRef& arg)
566 if (Validator(m_context).isCallback(arg)) {
568 } else if (!JSValueIsNull(m_context, arg)) {
569 ThrowMsg(ConversionException, "Not a function nor JS null.");
574 JSValueRef CalendarConverter::toFunction(const JSValueRef& arg)
576 if (Validator(m_context).isCallback(arg)) {
579 ThrowMsg(ConversionException, "Not a function.");
582 StringArrayPtr CalendarConverter::toCategories(JSValueRef categories)
584 StringArrayPtr result(new StringArray());
585 *result = toVectorOfStrings(categories);
589 EventAttendeePtr CalendarConverter::toAttendee(JSValueRef attendee)
591 EventAttendeePtr result(new EventAttendee());
592 const ScopedJSStringRef nameStr(JSStringCreateWithUTF8CString(TIZEN_ATTENDEE_NAME));
593 const ScopedJSStringRef uriStr(JSStringCreateWithUTF8CString(TIZEN_ATTENDEE_URI));
594 const ScopedJSStringRef roleStr(JSStringCreateWithUTF8CString(TIZEN_ATTENDEE_ROLE));
595 const ScopedJSStringRef statusStr(JSStringCreateWithUTF8CString(TIZEN_ATTENDEE_STATUS));
596 const ScopedJSStringRef RSVPStr(JSStringCreateWithUTF8CString(TIZEN_ATTENDEE_RSVP));
597 const ScopedJSStringRef typeStr(JSStringCreateWithUTF8CString(TIZEN_ATTENDEE_TYPE));
598 const ScopedJSStringRef groupStr(JSStringCreateWithUTF8CString(TIZEN_ATTENDEE_GROUP));
599 const ScopedJSStringRef delegatorURIStr(JSStringCreateWithUTF8CString(TIZEN_ATTENDEE_DELEGATORURI));
600 const ScopedJSStringRef delegateURIStr(JSStringCreateWithUTF8CString(TIZEN_ATTENDEE_DELEGATEURI));
601 const ScopedJSStringRef contactRefStr(JSStringCreateWithUTF8CString(TIZEN_ATTENDEE_CONTACT_REF));
603 JSObjectRef arg = toJSObjectRef(attendee);
605 JSValueRef nameData = JSObjectGetProperty(m_context, arg, nameStr.get(), NULL);
606 JSValueRef uriData = JSObjectGetProperty(m_context, arg, uriStr.get(), NULL);
607 JSValueRef roleData = JSObjectGetProperty(m_context, arg, roleStr.get(), NULL);
608 JSValueRef statusData = JSObjectGetProperty(m_context, arg, statusStr.get(), NULL);
609 JSValueRef RSVPData = JSObjectGetProperty(m_context, arg, RSVPStr.get(), NULL);
610 JSValueRef typeData = JSObjectGetProperty(m_context, arg, typeStr.get(), NULL);
611 JSValueRef groupData = JSObjectGetProperty(m_context, arg, groupStr.get(), NULL);
612 JSValueRef delegatorURIData = JSObjectGetProperty(m_context, arg, delegatorURIStr.get(), NULL);
613 JSValueRef delegateURIData = JSObjectGetProperty(m_context, arg, delegateURIStr.get(), NULL);
614 JSValueRef contactRefData = JSObjectGetProperty(m_context, arg, contactRefStr.get(), NULL);
616 if (!JSValueIsUndefined(m_context, nameData)) {
617 result->setName(toString(nameData));
619 if (!JSValueIsUndefined(m_context, uriData)) {
620 result->setURI(toString(uriData));
622 if (!JSValueIsUndefined(m_context, roleData)) {
623 result->setRole(toEventAttendeeRole(toString(roleData)));
625 if (!JSValueIsUndefined(m_context, statusData)) {
626 result->setStatus(toEventAttendeeStatus(toString(statusData)));
628 if (!JSValueIsUndefined(m_context, RSVPData)) {
629 result->setRSVP(toBool(RSVPData));
631 if (!JSValueIsUndefined(m_context, typeData)) {
632 result->setType(toEventAttendeeType(toString(typeData)));
634 if (!JSValueIsUndefined(m_context, groupData)) {
635 result->setGroup(toString(groupData));
637 if (!JSValueIsUndefined(m_context, delegatorURIData)) {
638 result->setDelegatorURI(toString(delegatorURIData));
640 if (!JSValueIsUndefined(m_context, delegateURIData)) {
641 result->setDelegateURI(toString(delegateURIData));
643 if (!JSValueIsUndefined(m_context, contactRefData)) {
644 DeviceAPI::Contact::ContactConverter contactConverter(m_context);
645 result->setContactId(contactConverter.toContactRef(contactRefData)->getContactId());
646 result->setAddressBookId(contactConverter.toContactRef(contactRefData)->getAddressBookId());
652 EventAttendeeListPtr CalendarConverter::toVectorOfAttendeesFromDictionary(JSValueRef attendees)
654 if(!JSIsArrayValue(m_context, attendees)) {
655 LoggerW("JSValue is not an array.");
656 ThrowMsg(ConversionException, "Invalid array type.");
659 EventAttendeeListPtr result(new EventAttendeeList());
661 JSObjectRef objArg = toJSObjectRef(attendees);
662 LoggerD("array length "<<JSGetArrayLength(m_context, objArg));
663 for (std::size_t i = 0; i < JSGetArrayLength(m_context, objArg); i++) {
664 JSValueRef element = JSGetArrayElement(m_context, objArg, i);
665 result->push_back(toAttendee(element));
671 EventAttendeeListPtr CalendarConverter::toVectorOfAttendeesFromReference(JSValueRef attendees)
673 if(!JSIsArrayValue(m_context, attendees)) {
674 LoggerW("JSValue is not an array.");
675 ThrowMsg(ConversionException, "Invalid array type.");
678 EventAttendeeListPtr result(new EventAttendeeList());
680 JSObjectRef objArg = toJSObjectRef(attendees);
681 LoggerD("array length "<<JSGetArrayLength(m_context, objArg));
682 for (std::size_t i = 0; i < JSGetArrayLength(m_context, objArg); i++) {
683 JSValueRef element = JSGetArrayElement(m_context, objArg, i);
684 if (JSValueIsObjectOfClass(m_context, element, JSCalendarAttendee::getClassRef())) {
685 result->push_back(JSCalendarAttendee::getPrivateObject(JSValueToObject(m_context, element, NULL)));
687 LoggerD("Invalid attendee type. Skip this with index: "<<i);
695 EventAlarmPtr CalendarConverter::toEventAlarm(JSValueRef alarm)
697 EventAlarmPtr result(new EventAlarm());
698 const ScopedJSStringRef absoluteDateStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ALARM_ABSOLUTE_DATE));
699 const ScopedJSStringRef beforeStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ALARM_BEFORE));
700 const ScopedJSStringRef methodStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ALARM_METHOD));
701 const ScopedJSStringRef descriptionStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ALARM_DESCRIPTION));
703 JSObjectRef arg = toJSObjectRef(alarm);
705 JSValueRef absoluteDateData = JSObjectGetProperty(m_context, arg, absoluteDateStr.get(), NULL);
706 JSValueRef beforeData = JSObjectGetProperty(m_context, arg, beforeStr.get(), NULL);
707 JSValueRef methodData = JSObjectGetProperty(m_context, arg, methodStr.get(), NULL);
708 JSValueRef descriptionData = JSObjectGetProperty(m_context, arg, descriptionStr.get(), NULL);
710 if (!JSValueIsUndefined(m_context, absoluteDateData)) {
711 TimeUtilConverter timeConverter(m_context);
712 result->setAbsoluteDate((long long int) (timeConverter.getTimeInMilliseconds(absoluteDateData)/1000));
714 if (!JSValueIsUndefined(m_context, beforeData)) {
715 TimeUtilConverter timeConverter(m_context);
716 result->setDuration(timeConverter.getDurationProperties(beforeData));
718 if (!JSValueIsUndefined(m_context, methodData)) {
719 result->setMethod(toEventAlarmType(toString(methodData)));
721 if (!JSValueIsUndefined(m_context, descriptionData)) {
722 result->setDescription(toString(descriptionData));
728 EventAlarmListPtr CalendarConverter::toVectorOfEventAlarmsFromDictionary(JSValueRef alarms)
730 if(!JSIsArrayValue(m_context, alarms)) {
731 LoggerW("JSValue is not an array.");
732 ThrowMsg(ConversionException, "Invalid array type.");
735 EventAlarmListPtr result(new EventAlarmList());
737 JSObjectRef objArg = toJSObjectRef(alarms);
738 LoggerD("array length "<<JSGetArrayLength(m_context, objArg));
739 for (std::size_t i = 0; i < JSGetArrayLength(m_context, objArg); i++) {
740 JSValueRef element = JSGetArrayElement(m_context, objArg, i);
741 result->push_back(toEventAlarm(element));
747 EventAlarmListPtr CalendarConverter::toVectorOfEventAlarmsFromReference(JSValueRef alarms)
749 if(!JSIsArrayValue(m_context, alarms)) {
750 LoggerW("JSValue is not an array.");
751 ThrowMsg(ConversionException, "Invalid array type.");
754 EventAlarmListPtr result(new EventAlarmList());
756 JSObjectRef objArg = toJSObjectRef(alarms);
757 LoggerD("array length "<<JSGetArrayLength(m_context, objArg));
758 for (std::size_t i = 0; i < JSGetArrayLength(m_context, objArg); i++) {
759 JSValueRef element = JSGetArrayElement(m_context, objArg, i);
760 if (JSValueIsObjectOfClass(m_context, element, JSCalendarAlarm::getClassRef())) {
761 result->push_back(JSCalendarAlarm::getPrivateObject(JSValueToObject(m_context, element, NULL)));
763 LoggerD("Invalid alarm type. Skip this with index: "<<i);
771 CalendarEventPtr CalendarConverter::toItem(const JSValueRef value, bool updateMode)
773 CalendarEventPtr result(NULL);
774 JSObjectRef arg = toJSObjectRef(value);
777 LoggerD("Update mode.");
778 result = JSCalendarEvent::getPrivateObject(arg);
780 LoggerD("Constructor mode.");
781 CalendarEventPtr resultPtr(new CalendarEvent());
785 const ScopedJSStringRef descriptionStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_DESCRIPTION));
786 const ScopedJSStringRef summaryStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_SUMMARY));
787 const ScopedJSStringRef startTimeStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_START_DATE));
788 const ScopedJSStringRef durationStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_DURATION));
789 const ScopedJSStringRef locationStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_LOCATION));
790 const ScopedJSStringRef categoriesStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_CATEGORIES));
791 const ScopedJSStringRef statusStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_STATUS));
792 const ScopedJSStringRef alarmsStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_ALARMS));
793 const ScopedJSStringRef isAllDayStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_IS_ALL_DAY));
794 const ScopedJSStringRef organizerStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_ORGANIZER));
795 const ScopedJSStringRef attendeesStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_ATTENDEES));
796 const ScopedJSStringRef geolocationStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_GEOLOCATION));
797 const ScopedJSStringRef visibilityStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_VISIBILITY));
798 const ScopedJSStringRef availabilityStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_EVENT_AVAILABILITY));
799 const ScopedJSStringRef recurrenceRuleStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_EVENT_RECURRENCE_RULE));
800 const ScopedJSStringRef priorityStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_ITEM_PRIORITY));
801 const ScopedJSStringRef endDateStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_EVENT_END_DATE));
802 const ScopedJSStringRef dueDateStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_TASK_DUE_DATE));
803 const ScopedJSStringRef completedDateStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_TASK_COMPLETED_DATE));
804 const ScopedJSStringRef progressStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_TASK_PROGRESS));
806 JSValueRef descriptionData = JSObjectGetProperty(m_context, arg, descriptionStr.get(), NULL);
807 JSValueRef summaryData = JSObjectGetProperty(m_context, arg, summaryStr.get(), NULL);
808 JSValueRef startTimeData = JSObjectGetProperty(m_context, arg, startTimeStr.get(), NULL);
809 JSValueRef durationData = JSObjectGetProperty(m_context, arg, durationStr.get(), NULL);
810 JSValueRef locationData = JSObjectGetProperty(m_context, arg, locationStr.get(), NULL);
811 JSValueRef categoriesData = JSObjectGetProperty(m_context, arg, categoriesStr.get(), NULL);
812 JSValueRef statusData = JSObjectGetProperty(m_context, arg, statusStr.get(), NULL);
813 JSValueRef alarmsData = JSObjectGetProperty(m_context, arg, alarmsStr.get(), NULL);
814 JSValueRef isAllDayData = JSObjectGetProperty(m_context, arg, isAllDayStr.get(), NULL);
815 JSValueRef organizerData = JSObjectGetProperty(m_context, arg, organizerStr.get(), NULL);
816 JSValueRef attendeesData = JSObjectGetProperty(m_context, arg, attendeesStr.get(), NULL);
817 JSValueRef geolocationData = JSObjectGetProperty(m_context, arg, geolocationStr.get(), NULL);
818 JSValueRef visibilityData = JSObjectGetProperty(m_context, arg, visibilityStr.get(), NULL);
819 JSValueRef availabilityData = JSObjectGetProperty(m_context, arg, availabilityStr.get(), NULL);
820 JSValueRef recurrenceRuleData = JSObjectGetProperty(m_context, arg, recurrenceRuleStr.get(), NULL);
821 JSValueRef priorityData = JSObjectGetProperty(m_context, arg, priorityStr.get(), NULL);
822 JSValueRef endDateData = JSObjectGetProperty(m_context, arg, endDateStr.get(), NULL);
823 JSValueRef dueDateData = JSObjectGetProperty(m_context, arg, dueDateStr.get(), NULL);
824 JSValueRef completedDateData = JSObjectGetProperty(m_context, arg, completedDateStr.get(), NULL);
825 JSValueRef progressData = JSObjectGetProperty(m_context, arg, progressStr.get(), NULL);
827 TimeUtilConverter timeUtilConverter(m_context);
829 if (!JSValueIsUndefined(m_context, descriptionData)) {
830 result->setDescription(toString(descriptionData));
832 if (!JSValueIsUndefined(m_context, summaryData)) {
833 result->setSubject(toString(summaryData));
836 //It's important to set startTime before duration to set end date
837 if (!JSValueIsUndefined(m_context, startTimeData) && !JSValueIsNull(m_context, startTimeData)) {
838 result->setStartTime((long long int) (timeUtilConverter.getTimeInMilliseconds(startTimeData)/1000));
839 result->setTimeZone(timeUtilConverter.getPropertiesInTZDate(startTimeData).timezone);
840 LoggerI("start time converted from TZDate: "<<result->getStartTime()<<", time zone: "<<result->getTimeZone());
842 LoggerD("Start time undefined.");
845 if (!JSValueIsUndefined(m_context, durationData) && !JSValueIsNull(m_context, durationData)) {
846 DurationPropertiesPtr duration = timeUtilConverter.getDuration(durationData);
847 long long length = duration->length;
848 int unit = duration->unit;
849 LoggerD("duration length: "<<length<<", unit "<<unit);
851 result->setDuration(duration);
853 if (!JSValueIsUndefined(m_context, locationData)) {
854 result->setLocation(toString(locationData));
856 if (!JSValueIsUndefined(m_context, categoriesData)) {
857 StringArrayPtr categories(new StringArray());
858 *categories = toVectorOfStrings(categoriesData);
859 result->setCategories(categories);
862 if (!JSValueIsUndefined(m_context, statusData)) {
863 result->setStatus(toEventStatus(toString(statusData)));
865 result->setStatus(CalendarEvent::CONFIRMED_STATUS);
867 if (!JSValueIsUndefined(m_context, alarmsData)) {
868 EventAlarmListPtr alarms = toVectorOfEventAlarmsFromReference(alarmsData);
869 result->setAlarms(alarms);
871 if (!JSValueIsUndefined(m_context, isAllDayData)) {
872 result->setIsAllDay(toBool(isAllDayData));
874 if (!JSValueIsUndefined(m_context, organizerData)) {
875 result->setOrganizer(toString(organizerData));
877 if (!JSValueIsUndefined(m_context, attendeesData)) {
878 EventAttendeeListPtr attendees = toVectorOfAttendeesFromReference(attendeesData);
879 result->setAttendees(attendees);
881 if (!JSValueIsUndefined(m_context, geolocationData) && !JSValueIsNull(m_context, geolocationData)) {
883 DeviceAPI::Tizen::SimpleCoordinatesPtr geoLocation = DeviceAPI::Tizen::JSSimpleCoordinates::getSimpleCoordinates(m_context, geolocationData);
884 result->setGeolocation(geoLocation);
885 } Catch(InvalidArgumentException) {
886 ThrowMsg(ConversionException, "Wrong geolocation type.");
890 if (!JSValueIsUndefined(m_context, visibilityData)) {
891 result->setVisibility(toEventVisibility(toString(visibilityData)));
893 if (!JSValueIsUndefined(m_context, availabilityData)) {
894 result->setAvailability(toEventAvailability(toString(availabilityData)));
896 if (!JSValueIsUndefined(m_context, recurrenceRuleData) && !JSValueIsNull(m_context, recurrenceRuleData)) {
897 result->setRecurrenceRule(toEventRecurrenceRule(recurrenceRuleData));
899 if (!JSValueIsUndefined(m_context, priorityData)) {
900 result->setPriority(toTaskPriority(toString(priorityData)));
902 if (!JSValueIsUndefined(m_context, endDateData) && !JSValueIsNull(m_context, endDateData)) {
903 if( result->getTimeZone().empty() ) {
904 result->setTimeZone(timeUtilConverter.getPropertiesInTZDate(endDateData).timezone);
906 result->setEndTime((long long int) (timeUtilConverter.getTimeInMilliseconds(endDateData)/1000));
908 if (!JSValueIsUndefined(m_context, dueDateData) && !JSValueIsNull(m_context, dueDateData)) {
909 if( result->getTimeZone().empty() ) {
910 result->setTimeZone(timeUtilConverter.getPropertiesInTZDate(dueDateData).timezone);
912 result->setEndTime((long long int) (timeUtilConverter.getTimeInMilliseconds(dueDateData)/1000));
914 if (!JSValueIsUndefined(m_context, completedDateData) && !JSValueIsNull(m_context, completedDateData)) {
915 if( result->getTimeZone().empty() ) {
916 result->setTimeZone(timeUtilConverter.getPropertiesInTZDate(completedDateData).timezone);
918 result->setCompletedDate((long long int) (timeUtilConverter.getTimeInMilliseconds(completedDateData)/1000));
920 if (!JSValueIsUndefined(m_context, progressData)) {
921 result->setProgress(toInt(progressData));
923 LoggerD("timezone: "<<result->getTimeZone());
928 CalendarEventListPtr CalendarConverter::toVectorOfItems(JSValueRef items)
930 if(!JSIsArrayValue(m_context, items)) {
931 LoggerW("JSValue is not an array.");
932 ThrowMsg(ConversionException, "Invalid array type.");
935 CalendarEventListPtr result(new CalendarEventList());
937 JSObjectRef objArg = toJSObjectRef(items);
938 LoggerD("array length "<<JSGetArrayLength(m_context, objArg));
939 for (std::size_t i = 0; i < JSGetArrayLength(m_context, objArg); i++) {
940 JSValueRef element = JSGetArrayElement(m_context, objArg, i);
941 if (JSValueIsObjectOfClass(m_context, element, JSCalendarEvent::getClassRef())) {
942 JSObjectRef arg = JSValueToObject(m_context, element, NULL);
943 result->push_back(JSCalendarEvent::getPrivateObject(arg));
944 } else if (JSValueIsObjectOfClass(m_context, element, JSCalendarTask::getClassRef())) {
945 JSObjectRef arg = JSValueToObject(m_context, element, NULL);
946 result->push_back(JSCalendarTask::getPrivateObject(arg));
948 LoggerD("Invalid item type. Skip this with index: "<<i);
956 CalendarEventListPtr CalendarConverter::toVectorOfItemsFromDictionary(JSValueRef items, bool updateMode)
958 if(!JSIsArrayValue(m_context, items)) {
959 LoggerW("JSValue is not an array.");
960 ThrowMsg(ConversionException, "Invalid array type.");
963 CalendarEventListPtr result(new CalendarEventList());
965 JSObjectRef objArg = toJSObjectRef(items);
966 LoggerD("array length "<<JSGetArrayLength(m_context, objArg));
967 for (std::size_t i = 0; i < JSGetArrayLength(m_context, objArg); i++) {
968 result->push_back(toItem(JSGetArrayElement(m_context, objArg, i), updateMode));
974 EventIdPtr CalendarConverter::toEventId(JSValueRef eventId)
976 EventIdPtr result(new EventId());
977 const ScopedJSStringRef uidStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_EVENT_ID_UID));
978 const ScopedJSStringRef recurrenceIdStr(JSStringCreateWithUTF8CString(TIZEN_CALENDAR_EVENT_ID_RECURRENCEID));
980 JSObjectRef arg = toJSObjectRef(eventId);
982 JSValueRef uidData = JSObjectGetProperty(m_context, arg, uidStr.get(), NULL);
983 JSValueRef recurrenceIdData = JSObjectGetProperty(m_context, arg, recurrenceIdStr.get(), NULL);
985 if (!JSValueIsUndefined(m_context, uidData)) {
986 result->setUId(toString(uidData));
988 if (!JSValueIsUndefined(m_context, recurrenceIdData)) {
989 result->setRecurrenceId(toString(recurrenceIdData));
995 EventIdListPtr CalendarConverter::toVectorOfEventIds(JSValueRef eventIds)
997 if(!JSIsArrayValue(m_context, eventIds)) {
998 LoggerW("JSValue is not an array.");
999 ThrowMsg(ConversionException, "Invalid array type.");
1002 EventIdListPtr result(new EventIdList());
1004 JSObjectRef objArg = toJSObjectRef(eventIds);
1005 LoggerD("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);
1009 if (JSValueIsObjectOfClass(m_context, element, JSCalendarEventId::getClassRef())) {
1010 EventIdPtr idPtr = JSCalendarEventId::getPrivateObject(JSValueToObject(m_context, element, NULL));
1011 idPtr->setCalendarType(CalendarEvent::EVENT_TYPE);
1012 result->push_back(idPtr);
1014 LoggerD("Invalid event id type. Skip this index: "<<i);
1022 std::vector<long long int> CalendarConverter::toVectorOfTimeFromTZDate(JSValueRef dates)
1024 if(!JSIsArrayValue(m_context, dates)) {
1025 LoggerW("JSValue is not an array.");
1026 ThrowMsg(ConversionException, "Invalid array type.");
1029 std::vector<long long int> result;
1030 TimeUtilConverter converter(m_context);
1032 JSObjectRef objArg = toJSObjectRef(dates);
1033 LoggerD("array length "<<JSGetArrayLength(m_context, objArg));
1034 for (std::size_t i = 0; i < JSGetArrayLength(m_context, objArg); i++) {
1035 JSValueRef element = JSGetArrayElement(m_context, objArg, i);
1036 result.push_back((long long int) (converter.getTimeInMilliseconds(element)/1000));
1042 std::string CalendarConverter::toTizenValue(CalendarEvent::TaskPriority abstractValue) const
1044 switch (abstractValue) {
1045 case CalendarEvent::HIGH_PRIORITY:
1046 return TIZEN_CALENDAR_PROPERTY_HIGH_PRIORITY;
1047 case CalendarEvent::MEDIUM_PRIORITY:
1048 return TIZEN_CALENDAR_PROPERTY_MEDIUM_PRIORITY;
1049 case CalendarEvent::LOW_PRIORITY:
1050 return TIZEN_CALENDAR_PROPERTY_LOW_PRIORITY;
1054 return TIZEN_CALENDAR_PROPERTY_LOW_PRIORITY;
1057 CalendarEvent::TaskPriority CalendarConverter::toTaskPriority(std::string priority) const
1059 if (!priority.compare(TIZEN_CALENDAR_PROPERTY_HIGH_PRIORITY))
1060 return CalendarEvent::HIGH_PRIORITY;
1061 else if (!priority.compare(TIZEN_CALENDAR_PROPERTY_MEDIUM_PRIORITY))
1062 return CalendarEvent::MEDIUM_PRIORITY;
1063 else if (!priority.compare(TIZEN_CALENDAR_PROPERTY_LOW_PRIORITY))
1064 return CalendarEvent::LOW_PRIORITY;
1066 ThrowMsg(ConversionException, "Invalid priority type.");
1068 return CalendarEvent::UNDEFINED_PRIORITY;
1071 CalendarEvent::CalendarType CalendarConverter::toCalendarType(std::string type) const
1073 if (!type.compare(TIZEN_CALENDAR_PROPERTY_TYPE_EVENT))
1074 return CalendarEvent::EVENT_TYPE;
1075 else if (!type.compare(TIZEN_CALENDAR_PROPERTY_TYPE_TASK))
1076 return CalendarEvent::TASK_TYPE;
1078 ThrowMsg(ConversionException, "Invalid calendar type.");
1080 return CalendarEvent::UNDEFINED_TYPE;
1083 CalendarEvent::VObjectFormat CalendarConverter::toVObjectFormat(std::string format) const
1085 if (!format.compare(TIZEN_CALENDAR_PROPERTY_VCALENDAR_20_FORMAT))
1086 return CalendarEvent::ICALENDAR_20;
1087 else if (!format.compare(TIZEN_CALENDAR_PROPERTY_VCALENDAR_10_FORMAT))
1088 return CalendarEvent::VCALENDAR_10;
1090 ThrowMsg(ConversionException, "Invalid format type.");
1092 return CalendarEvent::UNDEFINED_FORMAT;