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 "JSCalendarEventId.h"
19 #include "CalendarConverter.h"
20 #include <JSTizenExceptionFactory.h>
21 #include <JSTizenException.h>
22 #include <CommonsJavaScript/Converter.h>
23 #include <TimeUtilConverter.h>
28 using namespace WrtDeviceApis::Commons;
29 using namespace WrtDeviceApis::CommonsJavaScript;
30 using namespace DeviceAPI::Common;
35 JSClassDefinition JSCalendarEventId::m_classInfo = {
37 kJSClassAttributeNone,
38 TIZEN_INTERFACE_CALENDAR_EVENT_ID,
47 NULL, //deleteProperty,
48 NULL, //getPropertyNames,
49 NULL, //callAsFunction,
52 NULL, //convertToType,
55 JSStaticValue JSCalendarEventId::m_property[] = {
56 { TIZEN_CALENDAR_EVENT_ID_UID, getProperty, setProperty, kJSPropertyAttributeNone },
57 { TIZEN_CALENDAR_EVENT_ID_RECURRENCEID, getProperty, setProperty, kJSPropertyAttributeNone },
61 JSClassRef JSCalendarEventId::m_jsClassRef = JSClassCreate(
62 JSCalendarEventId::getClassInfo());
64 const JSClassDefinition* JSCalendarEventId::getClassInfo()
66 return &(m_classInfo);
69 JSClassRef JSCalendarEventId::getClassRef()
72 m_jsClassRef = JSClassCreate(&m_classInfo);
77 EventIdPtr JSCalendarEventId::getPrivateObject(JSObjectRef object)
79 EventIdPrivateObject *priv =
80 static_cast<EventIdPrivateObject*>(JSObjectGetPrivate(object));
82 ThrowMsg(NullPointerException, "Private object is null");
84 EventIdPtr result = priv->getObject();
86 ThrowMsg(NullPointerException, "Private object is null");
91 void JSCalendarEventId::setPrivateObject(const EventIdPtr &eventId,
93 const JSObjectRef object)
97 EventIdPrivateObject *priv =
98 static_cast<EventIdPrivateObject*>(JSObjectGetPrivate(object));
100 priv = new EventIdPrivateObject(ctx, eventId);
101 if (!JSObjectSetPrivate(object, static_cast<void*>(priv))) {
107 LoggerE("Error during replacing event id object.");
111 JSObjectRef JSCalendarEventId::createJSCalendarEventId(JSContextRef context, EventIdPtr eventId)
113 EventIdPrivateObject *priv = new EventIdPrivateObject(context, eventId);
114 return JSObjectMake(context, getClassRef(), priv);
117 void JSCalendarEventId::initialize(JSContextRef context,
120 if (!JSObjectGetPrivate(object)) {
121 LoggerD("Create calendar event id private object.");
122 EventIdPtr eventId( new EventId() );
123 EventIdPrivateObject *priv = new EventIdPrivateObject(context, eventId);
124 if (!JSObjectSetPrivate(object, static_cast<void*>(priv))) {
128 LoggerD("Private object already set.");
132 void JSCalendarEventId::finalize(JSObjectRef object)
134 EventIdPrivateObject* priv = static_cast<EventIdPrivateObject*>(JSObjectGetPrivate(object));
137 JSObjectSetPrivate(object, NULL);
141 JSObjectRef JSCalendarEventId::constructor(JSContextRef context,
142 JSObjectRef constructor,
143 size_t argumentCount,
144 const JSValueRef arguments[],
145 JSValueRef* exception)
149 CalendarConverter converter(context);
152 if (argumentCount==0) {
153 EventIdPtr result( new EventId());
155 } else if (argumentCount==1) {
156 EventIdPtr result( new EventId());
158 eventId->setUId(converter.toString(arguments[0]));
159 } else if (argumentCount>=2) {
160 EventIdPtr result( new EventId());
162 eventId->setUId(converter.toString(arguments[0]));
163 eventId->setRecurrenceId(converter.toString(arguments[1]));
166 return createJSCalendarEventId(context, eventId);
168 Catch(UnsupportedException)
170 LoggerW("Exception: "<<_rethrown_exception.GetMessage());
171 *exception = JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::NOT_SUPPORTED_ERROR, _rethrown_exception.GetMessage());
173 Catch(InvalidArgumentException)
175 LoggerW("Exception: "<<_rethrown_exception.GetMessage());
176 *exception = JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::INVALID_VALUES_ERROR, _rethrown_exception.GetMessage());
178 Catch(ConversionException)
180 LoggerW("Exception: "<<_rethrown_exception.GetMessage());
181 *exception = JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::TYPE_MISMATCH_ERROR, _rethrown_exception.GetMessage());
185 LoggerW("Exception: "<<_rethrown_exception.GetMessage());
186 *exception = JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::UNKNOWN_ERROR, _rethrown_exception.GetMessage());
192 JSValueRef JSCalendarEventId::getProperty(JSContextRef context,
194 JSStringRef propertyName,
195 JSValueRef* exception)
199 EventIdPrivateObject* priv = static_cast<EventIdPrivateObject*>(JSObjectGetPrivate(object));
201 ThrowMsg(NullPointerException, "Private object is NULL.");
204 EventIdPtr eventId = priv->getObject();
206 ThrowMsg(NullPointerException, "EventId is NULL.");
209 Converter converter(context);
210 if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_CALENDAR_EVENT_ID_UID)) {
211 if (eventId->getUId()==UNDEFINED_ID) {
212 return JSValueMakeNull(context);
214 return converter.toJSValueRef(eventId->getUId());
216 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_CALENDAR_EVENT_ID_RECURRENCEID)) {
217 if (eventId->getRecurrenceId()==UNDEFINED_ID) {
218 return JSValueMakeNull(context);
220 return converter.toJSValueRef(eventId->getRecurrenceId());
226 LoggerW("Exception: "<<_rethrown_exception.GetMessage());
228 return JSValueMakeUndefined(context);
231 bool JSCalendarEventId::setProperty(JSContextRef context,
233 JSStringRef propertyName,
235 JSValueRef* exception)
239 EventIdPrivateObject* priv = static_cast<EventIdPrivateObject*>(JSObjectGetPrivate(object));
241 ThrowMsg(NullPointerException, "Private object is NULL.");
244 EventIdPtr eventId = priv->getObject();
245 Converter converter(context);
246 if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_CALENDAR_EVENT_ID_UID)) {
247 std::string uid = converter.toString(value);
248 eventId->setUId(uid);
250 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_CALENDAR_EVENT_ID_RECURRENCEID)) {
251 std::string recurrenceId = converter.toString(value);
252 eventId->setRecurrenceId(recurrenceId);
258 LoggerW("Exception: "<<_rethrown_exception.GetMessage());