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 "JSCalendarAttendee.h"
19 #include <JSTizenException.h>
20 #include <JSTizenExceptionFactory.h>
21 #include <CommonsJavaScript/Converter.h>
22 #include "CalendarConverter.h"
24 #include <JSContactRef.h>
25 #include <ContactConverter.h>
26 #include <DurationProperties.h>
27 #include <ContactRef.h>
30 using namespace WrtDeviceApis::Commons;
31 using namespace WrtDeviceApis::CommonsJavaScript;
32 using namespace DeviceAPI::Common;
37 JSClassDefinition JSCalendarAttendee::m_classInfo = {
39 kJSClassAttributeNone,
40 TIZEN_INTERFACE_CALENDAR_ATTENDEE,
49 NULL, //deleteProperty,
50 NULL, //getPropertyNames,
51 NULL, //callAsFunction,
54 NULL, //convertToType,
57 JSStaticValue JSCalendarAttendee::m_property[] = {
58 { TIZEN_ATTENDEE_NAME, getProperty, setProperty, kJSPropertyAttributeNone },
59 { TIZEN_ATTENDEE_URI, getProperty, setProperty, kJSPropertyAttributeNone },
60 { TIZEN_ATTENDEE_ROLE, getProperty, setProperty, kJSPropertyAttributeNone },
61 { TIZEN_ATTENDEE_STATUS, getProperty, setProperty, kJSPropertyAttributeNone },
62 { TIZEN_ATTENDEE_RSVP, getProperty, setProperty, kJSPropertyAttributeNone },
63 { TIZEN_ATTENDEE_TYPE, getProperty, setProperty, kJSPropertyAttributeNone },
64 { TIZEN_ATTENDEE_GROUP, getProperty, setProperty, kJSPropertyAttributeNone },
65 { TIZEN_ATTENDEE_DELEGATORURI, getProperty, setProperty, kJSPropertyAttributeNone },
66 { TIZEN_ATTENDEE_DELEGATEURI, getProperty, setProperty, kJSPropertyAttributeNone },
67 { TIZEN_ATTENDEE_CONTACT_REF, getProperty, setProperty, kJSPropertyAttributeNone },
72 JSClassRef JSCalendarAttendee::m_jsClassRef = JSClassCreate(
73 JSCalendarAttendee::getClassInfo());
75 const JSClassDefinition* JSCalendarAttendee::getClassInfo()
77 return &(m_classInfo);
80 JSClassRef JSCalendarAttendee::getClassRef()
83 m_jsClassRef = JSClassCreate(&m_classInfo);
88 JSObjectRef JSCalendarAttendee::createJSCalendarAttendee(JSContextRef context, EventAttendeePtr attendee)
90 AttendeePrivateObject *priv = new AttendeePrivateObject(context, attendee);
91 return JSObjectMake(context, getClassRef(), priv);
94 void JSCalendarAttendee::initialize(JSContextRef context,
97 if (!JSObjectGetPrivate(object)) {
98 LoggerD("Create calendar attendee private object.");
99 EventAttendeePtr attendee( new EventAttendee() );
100 AttendeePrivateObject *priv = new AttendeePrivateObject(context, attendee);
101 if (!JSObjectSetPrivate(object, static_cast<void*>(priv))) {
105 LoggerD("Private object already set.");
109 void JSCalendarAttendee::finalize(JSObjectRef object)
111 AttendeePrivateObject* priv = static_cast<AttendeePrivateObject*>(JSObjectGetPrivate(object));
114 JSObjectSetPrivate(object, NULL);
118 EventAttendeePtr JSCalendarAttendee::getPrivateObject(JSObjectRef object)
120 AttendeePrivateObject *priv =
121 static_cast<AttendeePrivateObject*>(JSObjectGetPrivate(object));
123 ThrowMsg(NullPointerException, "Private object is null.");
125 EventAttendeePtr result = priv->getObject();
127 ThrowMsg(NullPointerException, "Private object is null.");
132 void JSCalendarAttendee::setPrivateObject(const EventAttendeePtr &attendee,
134 const JSObjectRef object)
138 AttendeePrivateObject *priv =
139 static_cast<AttendeePrivateObject*>(JSObjectGetPrivate(object));
141 priv = new AttendeePrivateObject(ctx, attendee);
142 if (!JSObjectSetPrivate(object, static_cast<void*>(priv))) {
148 LoggerE("Error during replacing attendee object");
152 JSObjectRef JSCalendarAttendee::constructor(JSContextRef context,
153 JSObjectRef constructor,
154 size_t argumentCount,
155 const JSValueRef arguments[],
156 JSValueRef* exception)
160 CalendarConverter converter(context);
161 EventAttendeePtr attendee;
163 if (argumentCount==0) {
164 EventAttendeePtr result(new EventAttendee());
166 } else if (argumentCount==1) {
167 EventAttendeePtr result(new EventAttendee());
169 attendee->setURI(converter.toString(arguments[0]));
170 } else if (argumentCount>=2) {
171 if (JSValueIsNull(context, arguments[1]) || JSValueIsUndefined(context, arguments[1])) {
172 EventAttendeePtr result(new EventAttendee());
175 if (!JSValueIsObject(context, arguments[1])) {
176 ThrowMsg(ConversionException, "Wrong second parameter type.");
179 attendee = converter.toAttendee(arguments[1]);
181 ThrowMsg(ConversionException, "Parameter conversion failed.");
184 attendee->setURI(converter.toString(arguments[0]));
187 return createJSCalendarAttendee(context, attendee);
189 Catch(UnsupportedException)
191 LoggerW("Exception: "<<_rethrown_exception.GetMessage());
192 *exception = JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::NOT_SUPPORTED_ERROR, _rethrown_exception.GetMessage());
194 Catch(InvalidArgumentException)
196 LoggerW("Exception: "<<_rethrown_exception.GetMessage());
197 *exception = JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::INVALID_VALUES_ERROR, _rethrown_exception.GetMessage());
199 Catch(ConversionException)
201 LoggerW("Exception: "<<_rethrown_exception.GetMessage());
202 *exception = JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::TYPE_MISMATCH_ERROR, _rethrown_exception.GetMessage());
206 LoggerW("Exception: "<<_rethrown_exception.GetMessage());
207 *exception = JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::UNKNOWN_ERROR, _rethrown_exception.GetMessage());
213 JSValueRef JSCalendarAttendee::getProperty(JSContextRef context,
215 JSStringRef propertyName,
216 JSValueRef* exception)
218 CalendarConverter converter(context);
221 AttendeePrivateObject* priv =
222 static_cast<AttendeePrivateObject*>(JSObjectGetPrivate(object));
224 ThrowMsg(NullPointerException, "Private object is NULL.");
226 EventAttendeePtr attendee = priv->getObject();
228 if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_NAME)) {
229 return converter.toJSValueRef(attendee->getName());
230 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_URI)) {
231 return converter.toJSValueRef(attendee->getURI());
232 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_ROLE)) {
233 return converter.toJSValueRef(converter.toTizenValue(attendee->getRole()));
234 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_STATUS)) {
235 return converter.toJSValueRef(converter.toTizenValue(attendee->getStatus()));
236 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_RSVP)) {
237 return converter.toJSValueRef(attendee->getRSVP());
238 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_TYPE)) {
239 return converter.toJSValueRef(converter.toTizenValue(attendee->getType()));
240 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_GROUP)) {
241 return converter.toJSValueRef(attendee->getGroup());
242 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_DELEGATORURI)) {
243 return converter.toJSValueRef(attendee->getDelegatorURI());
244 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_DELEGATEURI)) {
245 return converter.toJSValueRef(attendee->getDelegateURI());
246 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_CONTACT_REF)) {
247 DeviceAPI::Contact::ContactConverter contactConverter(context);
248 DeviceAPI::Contact::ContactRefPtr contactRefPtr( new DeviceAPI::Contact::ContactRef() );
249 contactRefPtr->setContactId(attendee->getContactId());
250 contactRefPtr->setAddressBookId(attendee->getAddressBookId());
251 return contactConverter.toJSValueRef(contactRefPtr);
256 LoggerW("Exception: "<<_rethrown_exception.GetMessage());
258 return JSValueMakeUndefined(context);
261 bool JSCalendarAttendee::setProperty(JSContextRef context,
263 JSStringRef propertyName,
265 JSValueRef* exception)
267 CalendarConverter converter(context);
270 AttendeePrivateObject* priv =
271 static_cast<AttendeePrivateObject*>(JSObjectGetPrivate(object));
273 ThrowMsg(NullPointerException, "Attendee object is NULL.");
275 EventAttendeePtr attendee = priv->getObject();
277 if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_NAME)) {
278 std::string name = converter.toString(value);
279 attendee->setName(name);
281 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_URI)) {
282 std::string uri = converter.toString(value);
283 attendee->setURI(uri);
285 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_ROLE)) {
286 std::string role = converter.toString(value);
287 attendee->setRole(converter.toEventAttendeeRole(role));
289 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_STATUS)) {
290 std::string status = converter.toString(value);
291 attendee->setStatus(converter.toEventAttendeeStatus(status));
293 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_RSVP)) {
294 bool RSVP = converter.toBool(value);
295 attendee->setRSVP(RSVP);
297 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_TYPE)) {
298 std::string type = converter.toString(value);
299 attendee->setType(converter.toEventAttendeeType(type));
301 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_GROUP)) {
302 std::string group = converter.toString(value);
303 attendee->setGroup(group);
305 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_DELEGATORURI)) {
306 std::string delegatorURI = converter.toString(value);
307 attendee->setDelegatorURI(delegatorURI);
309 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_DELEGATEURI)) {
310 std::string delegateURI = converter.toString(value);
311 attendee->setDelegateURI(delegateURI);
313 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_CONTACT_REF)) {
314 if (!JSValueIsObjectOfClass(context, value, DeviceAPI::Contact::JSContactRef::getClassRef())) {
315 ThrowMsg(ConversionException, "Wrong contactRef type.");
318 DeviceAPI::Contact::ContactConverter contactConverter(context);
319 attendee->setContactId(contactConverter.toContactRef(value)->getContactId());
320 attendee->setAddressBookId(contactConverter.toContactRef(value)->getAddressBookId());
326 LoggerW("Exception: "<<_rethrown_exception.GetMessage());