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>
31 using namespace WrtDeviceApis::Commons;
32 using namespace WrtDeviceApis::CommonsJavaScript;
33 using namespace DeviceAPI::Common;
38 JSClassDefinition JSCalendarAttendee::m_classInfo = {
40 kJSClassAttributeNone,
41 TIZEN_INTERFACE_CALENDAR_ATTENDEE,
50 NULL, //deleteProperty,
51 NULL, //getPropertyNames,
52 NULL, //callAsFunction,
55 NULL, //convertToType,
58 JSStaticValue JSCalendarAttendee::m_property[] = {
59 { TIZEN_ATTENDEE_NAME, getProperty, setProperty, kJSPropertyAttributeNone },
60 { TIZEN_ATTENDEE_URI, getProperty, setProperty, kJSPropertyAttributeNone },
61 { TIZEN_ATTENDEE_ROLE, getProperty, setProperty, kJSPropertyAttributeNone },
62 { TIZEN_ATTENDEE_STATUS, getProperty, setProperty, kJSPropertyAttributeNone },
63 { TIZEN_ATTENDEE_RSVP, getProperty, setProperty, kJSPropertyAttributeNone },
64 { TIZEN_ATTENDEE_TYPE, getProperty, setProperty, kJSPropertyAttributeNone },
65 { TIZEN_ATTENDEE_GROUP, getProperty, setProperty, kJSPropertyAttributeNone },
66 { TIZEN_ATTENDEE_DELEGATORURI, getProperty, setProperty, kJSPropertyAttributeNone },
67 { TIZEN_ATTENDEE_DELEGATEURI, getProperty, setProperty, kJSPropertyAttributeNone },
68 { TIZEN_ATTENDEE_CONTACT_REF, getProperty, setProperty, kJSPropertyAttributeNone },
73 JSClassRef JSCalendarAttendee::m_jsClassRef = JSClassCreate(
74 JSCalendarAttendee::getClassInfo());
76 const JSClassDefinition* JSCalendarAttendee::getClassInfo()
78 return &(m_classInfo);
81 JSClassRef DLL_EXPORT JSCalendarAttendee::getClassRef()
84 m_jsClassRef = JSClassCreate(&m_classInfo);
89 JSObjectRef JSCalendarAttendee::createJSCalendarAttendee(JSContextRef context, EventAttendeePtr attendee)
91 AttendeePrivateObject *priv = new AttendeePrivateObject(context, attendee);
92 return JSObjectMake(context, getClassRef(), priv);
95 void JSCalendarAttendee::initialize(JSContextRef context,
98 if (!JSObjectGetPrivate(object)) {
99 LoggerD("Create calendar attendee private object.");
100 EventAttendeePtr attendee( new EventAttendee() );
101 AttendeePrivateObject *priv = new AttendeePrivateObject(context, attendee);
102 if (!JSObjectSetPrivate(object, static_cast<void*>(priv))) {
106 LoggerD("Private object already set.");
110 void JSCalendarAttendee::finalize(JSObjectRef object)
112 AttendeePrivateObject* priv = static_cast<AttendeePrivateObject*>(JSObjectGetPrivate(object));
115 JSObjectSetPrivate(object, NULL);
119 EventAttendeePtr JSCalendarAttendee::getPrivateObject(JSObjectRef object)
121 AttendeePrivateObject *priv =
122 static_cast<AttendeePrivateObject*>(JSObjectGetPrivate(object));
124 ThrowMsg(NullPointerException, "Private object is null.");
126 EventAttendeePtr result = priv->getObject();
128 ThrowMsg(NullPointerException, "Private object is null.");
133 void JSCalendarAttendee::setPrivateObject(const EventAttendeePtr &attendee,
135 const JSObjectRef object)
139 AttendeePrivateObject *priv =
140 static_cast<AttendeePrivateObject*>(JSObjectGetPrivate(object));
142 priv = new AttendeePrivateObject(ctx, attendee);
143 if (!JSObjectSetPrivate(object, static_cast<void*>(priv))) {
149 LoggerE("Error during replacing attendee object");
153 JSObjectRef DLL_EXPORT JSCalendarAttendee::constructor(JSContextRef context,
154 JSObjectRef constructor,
155 size_t argumentCount,
156 const JSValueRef arguments[],
157 JSValueRef* exception)
161 CalendarConverter converter(context);
162 EventAttendeePtr attendee;
164 if (argumentCount==0) {
165 EventAttendeePtr result(new EventAttendee());
167 } else if (argumentCount==1) {
168 EventAttendeePtr result(new EventAttendee());
170 attendee->setURI(converter.toString(arguments[0]));
171 } else if (argumentCount>=2) {
172 if (JSValueIsNull(context, arguments[1]) || JSValueIsUndefined(context, arguments[1])) {
173 EventAttendeePtr result(new EventAttendee());
176 if (!JSValueIsObject(context, arguments[1])) {
177 ThrowMsg(ConversionException, "Wrong second parameter type.");
180 attendee = converter.toAttendee(arguments[1]);
182 ThrowMsg(ConversionException, "Parameter conversion failed.");
185 attendee->setURI(converter.toString(arguments[0]));
188 return createJSCalendarAttendee(context, attendee);
190 Catch(UnsupportedException)
192 LoggerW("Exception: "<<_rethrown_exception.GetMessage());
193 JSObjectRef error = JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::NOT_SUPPORTED_ERROR, _rethrown_exception.GetMessage());
197 Catch(InvalidArgumentException)
199 LoggerW("Exception: "<<_rethrown_exception.GetMessage());
200 JSObjectRef error = JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::INVALID_VALUES_ERROR, _rethrown_exception.GetMessage());
204 Catch(ConversionException)
206 LoggerW("Exception: "<<_rethrown_exception.GetMessage());
207 JSObjectRef error = JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::TYPE_MISMATCH_ERROR, _rethrown_exception.GetMessage());
213 LoggerW("Exception: "<<_rethrown_exception.GetMessage());
214 JSObjectRef error = JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::UNKNOWN_ERROR, _rethrown_exception.GetMessage());
220 JSValueRef JSCalendarAttendee::getProperty(JSContextRef context,
222 JSStringRef propertyName,
223 JSValueRef* exception)
225 CalendarConverter converter(context);
228 AttendeePrivateObject* priv =
229 static_cast<AttendeePrivateObject*>(JSObjectGetPrivate(object));
231 ThrowMsg(NullPointerException, "Private object is NULL.");
233 EventAttendeePtr attendee = priv->getObject();
235 if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_NAME)) {
236 return converter.toJSValueRef(attendee->getName());
237 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_URI)) {
238 return converter.toJSValueRef(attendee->getURI());
239 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_ROLE)) {
240 return converter.toJSValueRef(converter.toTizenValue(attendee->getRole()));
241 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_STATUS)) {
242 return converter.toJSValueRef(converter.toTizenValue(attendee->getStatus()));
243 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_RSVP)) {
244 return converter.toJSValueRef(attendee->getRSVP());
245 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_TYPE)) {
246 return converter.toJSValueRef(converter.toTizenValue(attendee->getType()));
247 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_GROUP)) {
248 return converter.toJSValueRef(attendee->getGroup());
249 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_DELEGATORURI)) {
250 return converter.toJSValueRef(attendee->getDelegatorURI());
251 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_DELEGATEURI)) {
252 return converter.toJSValueRef(attendee->getDelegateURI());
253 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_CONTACT_REF)) {
254 DeviceAPI::Contact::ContactConverter contactConverter(context);
255 DeviceAPI::Contact::ContactRefPtr contactRefPtr( new DeviceAPI::Contact::ContactRef() );
256 contactRefPtr->setContactId(attendee->getContactId());
257 contactRefPtr->setAddressBookId(attendee->getAddressBookId());
258 return contactConverter.toJSValueRef(contactRefPtr);
263 LoggerW("Exception: "<<_rethrown_exception.GetMessage());
265 return JSValueMakeUndefined(context);
268 bool JSCalendarAttendee::setProperty(JSContextRef context,
270 JSStringRef propertyName,
272 JSValueRef* exception)
274 CalendarConverter converter(context);
277 AttendeePrivateObject* priv =
278 static_cast<AttendeePrivateObject*>(JSObjectGetPrivate(object));
280 ThrowMsg(NullPointerException, "Attendee object is NULL.");
282 EventAttendeePtr attendee = priv->getObject();
284 if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_NAME)) {
285 std::string name = converter.toString(value);
286 attendee->setName(name);
288 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_URI)) {
289 std::string uri = converter.toString(value);
290 attendee->setURI(uri);
292 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_ROLE)) {
293 std::string role = converter.toString(value);
294 attendee->setRole(converter.toEventAttendeeRole(role));
296 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_STATUS)) {
297 std::string status = converter.toString(value);
298 attendee->setStatus(converter.toEventAttendeeStatus(status));
300 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_RSVP)) {
301 bool RSVP = converter.toBool(value);
302 attendee->setRSVP(RSVP);
304 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_TYPE)) {
305 std::string type = converter.toString(value);
306 attendee->setType(converter.toEventAttendeeType(type));
308 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_GROUP)) {
309 std::string group = converter.toString(value);
310 attendee->setGroup(group);
312 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_DELEGATORURI)) {
313 std::string delegatorURI = converter.toString(value);
314 attendee->setDelegatorURI(delegatorURI);
316 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_DELEGATEURI)) {
317 std::string delegateURI = converter.toString(value);
318 attendee->setDelegateURI(delegateURI);
320 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_ATTENDEE_CONTACT_REF)) {
321 if (!JSValueIsObjectOfClass(context, value, DeviceAPI::Contact::JSContactRef::getClassRef())) {
322 ThrowMsg(ConversionException, "Wrong contactRef type.");
325 DeviceAPI::Contact::ContactConverter contactConverter(context);
326 attendee->setContactId(contactConverter.toContactRef(value)->getContactId());
327 attendee->setAddressBookId(contactConverter.toContactRef(value)->getAddressBookId());
333 LoggerW("Exception: "<<_rethrown_exception.GetMessage());