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 <dpl/shared_ptr.h>
19 #include <CommonsJavaScript/Converter.h>
20 #include <CommonsJavaScript/JSDOMExceptionFactory.h>
22 #include <ArgumentValidator.h>
23 #include <JSWebAPIException.h>
24 //#include <JSTizenExceptionFactory.h>
25 //#include <JSTizenException.h>
27 #include "JSApplicationControlData.h"
28 #include "ApplicationConverter.h"
29 #include "ApplicationUtil.h"
32 using namespace WrtDeviceApis::Commons;
33 using namespace WrtDeviceApis::CommonsJavaScript;
34 using namespace DeviceAPI::Common;
37 namespace Application {
39 JSClassRef JSApplicationControlData::m_classRef = NULL;
41 JSClassDefinition JSApplicationControlData::m_classInfo =
44 kJSClassAttributeNone,
45 TIZEN_INTERFACE_APPLICATION_CONTROL_DATA,
54 NULL, //DeleteProperty,
55 NULL, //getPropertyNames,
59 NULL, //ConvertToType,
62 JSStaticValue JSApplicationControlData::m_property[] = {
63 { TIZEN_APPLICATION_CONTROL_DATA_KEY, getProperty, setProperty, kJSPropertyAttributeNone },
64 { TIZEN_APPLICATION_CONTROL_DATA_VALUE, getProperty, setProperty, kJSPropertyAttributeNone },
68 JSStaticFunction JSApplicationControlData::m_functions[] =
73 JSClassRef JSApplicationControlData::getClassRef() {
75 m_classRef = JSClassCreate(&m_classInfo);
80 JSObjectRef JSApplicationControlData::createJSObject(JSContextRef context, const ApplicationControlDataPtr &appdata)
82 LoggerI(">> createJSObject");
83 JSApplicationControlDataPriv *priv = new JSApplicationControlDataPriv(context, appdata);
86 throw TypeMismatchException("Private object is null");
89 return JSObjectMake(context, getClassRef(), priv);
92 JSObjectRef JSApplicationControlData::constructor(JSContextRef context, JSObjectRef constructor, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
95 ArgumentValidator validator(context, argumentCount, arguments);
96 ApplicationControlDataPtr appdata(new ApplicationControlData());
98 appdata->setKey(validator.toString(0));
99 appdata->setValue(JSUtil::JSArrayToStringVector(context, validator.toArrayObject(1)));
101 JSApplicationControlDataPriv *priv = new JSApplicationControlDataPriv(context, appdata);
102 JSObjectRef obj = JSObjectMake(context, getClassRef(),priv);
104 JSStringRef ctorName = JSStringCreateWithUTF8CString("constructor");
105 JSObjectSetProperty(context, obj, ctorName, constructor,
106 kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete | kJSPropertyAttributeDontEnum, NULL);
107 JSStringRelease(ctorName);
110 } catch (BasePlatformException &err) {
111 JSObjectRef exceptionObj = JSWebAPIException::makeJSWebAPIException(context, err);
112 *exception = exceptionObj;
117 void JSApplicationControlData::initialize(JSContextRef context, JSObjectRef object)
119 LoggerI(">> initialize");
122 void JSApplicationControlData::finalize(JSObjectRef object)
124 LoggerI(">> finalize");
125 JSApplicationControlDataPriv* priv = static_cast<JSApplicationControlDataPriv*>(JSObjectGetPrivate(object));
126 JSObjectSetPrivate(object, NULL);
127 LoggerD("Deleting ApplicationControl object");
131 bool JSApplicationControlData::isObjectOfClass(JSContextRef context, JSValueRef value)
133 return JSValueIsObjectOfClass(context, value, getClassRef());
136 ApplicationControlDataPtr JSApplicationControlData::getPrivData(JSObjectRef object)
139 JSApplicationControlDataPriv *priv = static_cast<JSApplicationControlDataPriv*>(JSObjectGetPrivate(object));
141 throw TypeMismatchException("Private object is null");
143 ApplicationControlDataPtr result = priv->getObject();
145 throw TypeMismatchException("Private object is null");
150 ApplicationControlDataPtr JSApplicationControlData::getApplicationControlData(JSContextRef context, JSValueRef value)
152 if (!isObjectOfClass(context, value)) {
153 throw TypeMismatchException("is not a object class");
155 JSObjectRef object = JSValueToObject(context, value, NULL);
157 throw TypeMismatchException("Fail to get object");
159 JSApplicationControlDataPriv *priv = static_cast<JSApplicationControlDataPriv*>(JSObjectGetPrivate(object));
161 throw TypeMismatchException("Private object is null");
163 return priv->getObject();
167 JSValueRef JSApplicationControlData::getProperty(JSContextRef context,
169 JSStringRef propertyName,
170 JSValueRef* exception)
173 WrtDeviceApis::CommonsJavaScript::Converter converter(context);
174 ApplicationControlDataPtr privateData = getPrivData(object);
176 if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_CONTROL_DATA_KEY)) {
177 return converter.toJSValueRef(privateData->getKey());
178 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_CONTROL_DATA_VALUE)) {
179 return converter.toJSValueRef(privateData->getValue());
181 } catch (const BasePlatformException &err) {
182 return JSWebAPIException::throwException(context, exception, err);
184 DeviceAPI::Common::TypeMismatchException err("TypeMismatchException occured");
185 return JSWebAPIException::throwException(context, exception, err);
188 return JSValueMakeUndefined(context);
191 bool JSApplicationControlData::setProperty(JSContextRef context,
193 JSStringRef propertyName,
195 JSValueRef* exception)
198 WrtDeviceApis::CommonsJavaScript::Converter converter(context);
199 ApplicationControlDataPtr privateData = getPrivData(object);
201 if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_CONTROL_DATA_KEY)) {
202 privateData->setKey(converter.toString(value));
204 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_CONTROL_DATA_VALUE)) {
205 privateData->setValue(converter.toVectorOfStrings(value));
208 } catch (const BasePlatformException &err) {
209 return JSWebAPIException::throwException(context, exception, err);
211 DeviceAPI::Common::TypeMismatchException err("TypeMismatchException occured");
212 return JSWebAPIException::throwException(context, exception, err);