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 <JSWebAPIErrorFactory.h>
26 #include "JSApplicationControlData.h"
27 #include "ApplicationConverter.h"
28 #include "ApplicationUtil.h"
30 using namespace WrtDeviceApis::Commons;
31 using namespace WrtDeviceApis::CommonsJavaScript;
32 using namespace DeviceAPI::Common;
35 namespace Application {
37 JSClassRef JSApplicationControlData::m_classRef = NULL;
39 JSClassDefinition JSApplicationControlData::m_classInfo =
42 kJSClassAttributeNone,
43 TIZEN_INTERFACE_APPLICATION_CONTROL_DATA,
52 NULL, //DeleteProperty,
53 NULL, //getPropertyNames,
57 NULL, //ConvertToType,
60 JSStaticValue JSApplicationControlData::m_property[] = {
61 { TIZEN_APPLICATION_CONTROL_DATA_KEY, getProperty, setProperty, kJSPropertyAttributeNone },
62 { TIZEN_APPLICATION_CONTROL_DATA_VALUE, getProperty, setProperty, kJSPropertyAttributeNone },
66 JSStaticFunction JSApplicationControlData::m_functions[] =
71 JSClassRef DLL_EXPORT JSApplicationControlData::getClassRef() {
73 m_classRef = JSClassCreate(&m_classInfo);
78 JSObjectRef JSApplicationControlData::createJSObject(JSContextRef context, const ApplicationControlDataPtr &appdata)
80 JSApplicationControlDataPriv *priv = new JSApplicationControlDataPriv(context, appdata);
83 throw TypeMismatchException("Private object is null");
86 return JSObjectMake(context, getClassRef(), priv);
89 JSObjectRef DLL_EXPORT JSApplicationControlData::constructor(JSContextRef context, JSObjectRef constructor, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
91 ArgumentValidator validator(context, argumentCount, arguments);
93 ApplicationControlDataPtr appdata(new ApplicationControlData());
96 appdata->setKey(validator.toString(0));
97 appdata->setValue(JSUtil::JSArrayToStringVector(context, validator.toArrayObject(1)));
98 } catch (BasePlatformException &err) {
99 LoggerE("Exception occured while creating constructor : " << err.getMessage());
102 JSApplicationControlDataPriv *priv = new JSApplicationControlDataPriv(context, appdata);
103 JSObjectRef obj = JSObjectMake(context, getClassRef(),priv);
105 JSStringRef ctorName = JSStringCreateWithUTF8CString("constructor");
106 JSObjectSetProperty(context, obj, ctorName, constructor,
107 kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete | kJSPropertyAttributeDontEnum, NULL);
108 JSStringRelease(ctorName);
113 void JSApplicationControlData::initialize(JSContextRef context, JSObjectRef object)
117 void JSApplicationControlData::finalize(JSObjectRef object)
119 JSApplicationControlDataPriv* priv = static_cast<JSApplicationControlDataPriv*>(JSObjectGetPrivate(object));
120 JSObjectSetPrivate(object, NULL);
124 bool JSApplicationControlData::isObjectOfClass(JSContextRef context, JSValueRef value)
126 return JSValueIsObjectOfClass(context, value, getClassRef());
129 ApplicationControlDataPtr JSApplicationControlData::getPrivData(JSObjectRef object)
131 JSApplicationControlDataPriv *priv = static_cast<JSApplicationControlDataPriv*>(JSObjectGetPrivate(object));
133 throw TypeMismatchException("Private object is null");
135 ApplicationControlDataPtr result = priv->getObject();
137 throw TypeMismatchException("Private object is null");
142 ApplicationControlDataPtr JSApplicationControlData::getApplicationControlData(JSContextRef context, JSValueRef value)
144 if (!isObjectOfClass(context, value)) {
145 throw TypeMismatchException("is not a object class");
147 JSObjectRef object = JSValueToObject(context, value, NULL);
149 throw TypeMismatchException("Fail to get object");
151 JSApplicationControlDataPriv *priv = static_cast<JSApplicationControlDataPriv*>(JSObjectGetPrivate(object));
153 throw TypeMismatchException("Private object is null");
155 return priv->getObject();
159 JSValueRef JSApplicationControlData::getProperty(JSContextRef context,
161 JSStringRef propertyName,
162 JSValueRef* exception)
165 WrtDeviceApis::CommonsJavaScript::Converter converter(context);
166 ApplicationControlDataPtr privateData = getPrivData(object);
168 if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_CONTROL_DATA_KEY)) {
169 return converter.toJSValueRef(privateData->getKey());
170 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_CONTROL_DATA_VALUE)) {
171 return converter.toJSValueRef(privateData->getValue());
174 LoggerE("Exception occured while get property");
175 return JSValueMakeUndefined(context);
178 /* do not return undefined object to find method */
183 bool JSApplicationControlData::setProperty(JSContextRef context,
185 JSStringRef propertyName,
187 JSValueRef* exception)
189 const JSValueRef arguments[1] = {value};
190 ArgumentValidator validator(context, 1, arguments);
193 ApplicationControlDataPtr privateData = getPrivData(object);
195 if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_CONTROL_DATA_KEY)) {
196 privateData->setKey(JSUtil::JSValueToString(context, value));
198 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_CONTROL_DATA_VALUE)) {
199 privateData->setValue(JSUtil::JSArrayToStringVector(context, validator.toArrayObject(0)));
202 } catch (const BasePlatformException &err) {
203 LoggerE("Setting property is failed." << err.getMessage());