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.
20 #include <CommonsJavaScript/Converter.h>
21 #include <CommonsJavaScript/JSDOMExceptionFactory.h>
22 #include <CommonsJavaScript/PrivateObject.h>
23 #include <CommonsJavaScript/JSUtils.h>
24 #include <SecurityExceptions.h>
25 #include <ArgumentValidator.h>
28 //#include <Commons/Exception.h>
29 #include <JSWebAPIErrorFactory.h>
31 #include "plugin_config.h"
33 #include "ApplicationConverter.h"
34 #include "ApplicationUtil.h"
35 #include "JSApplicationControl.h"
37 using namespace WrtDeviceApis::Commons;
38 using namespace WrtDeviceApis::CommonsJavaScript;
39 using namespace DeviceAPI::Common;
42 namespace Application {
44 JSClassRef JSApplicationControl::m_jsClassRef = NULL;
46 JSClassDefinition JSApplicationControl::m_classInfo = {
48 kJSClassAttributeNone,
49 TIZEN_INTERFACE_APPLICATION_CONTROL,
58 NULL, //DeleteProperty,
59 NULL, //GetPropertyNames,
60 NULL, //CallAsFunction,
61 NULL, //CallAsConstructor,
66 JSStaticValue JSApplicationControl::m_property[] = {
67 { TIZEN_APPLICATION_CONTROL_OPERATION, getProperty, setProperty, kJSPropertyAttributeNone },
68 { TIZEN_APPLICATION_CONTROL_URI, getProperty, setProperty, kJSPropertyAttributeNone },
69 { TIZEN_APPLICATION_CONTROL_MIME, getProperty, setProperty, kJSPropertyAttributeNone },
70 { TIZEN_APPLICATION_CONTROL_CATEGORY, getProperty, setProperty, kJSPropertyAttributeNone },
71 { TIZEN_APPLICATION_CONTROL_DATA, getProperty, setProperty, kJSPropertyAttributeNone },
75 const JSClassDefinition* JSApplicationControl::getClassInfo()
80 const JSClassRef DLL_EXPORT JSApplicationControl::getClassRef()
83 m_jsClassRef = JSClassCreate(&m_classInfo);
89 JSObjectRef JSApplicationControl::createJSObject(JSContextRef context, const ApplicationControlPtr &appsvc)
91 JSApplicationControlPriv *priv = new JSApplicationControlPriv(context, appsvc);
94 throw TypeMismatchException("Private object is null");
97 return JSObjectMake(context, getClassRef(), priv);
101 ApplicationControlPtr DLL_EXPORT JSApplicationControl::getApplicationControl(JSContextRef context, JSValueRef value)
103 if (!isObjectOfClass(context, value)) {
104 throw TypeMismatchException("is not a object class");
107 JSObjectRef object = JSValueToObject(context, value, NULL);
109 throw TypeMismatchException("Private object is null");
112 JSApplicationControlPriv *priv = static_cast<JSApplicationControlPriv*>(JSObjectGetPrivate(object));
114 throw TypeMismatchException("Private object is null");
116 return priv->getObject();
119 void JSApplicationControl::initialize(JSContextRef context,JSObjectRef object)
123 void JSApplicationControl::finalize(JSObjectRef object)
125 JSApplicationControlPriv* priv = static_cast<JSApplicationControlPriv*>(JSObjectGetPrivate(object));
126 JSObjectSetPrivate(object, NULL);
130 JSObjectRef DLL_EXPORT JSApplicationControl::constructor(JSContextRef context,
131 JSObjectRef constructor,
132 size_t argumentCount,
133 const JSValueRef arguments[],
134 JSValueRef* exception)
136 ArgumentValidator validator(context, argumentCount, arguments);
138 ApplicationControlPtr appsvc = ApplicationControlPtr(new ApplicationControl());
141 appsvc->setOperation(validator.toString(0));
142 appsvc->setUri(validator.toString(1, true, ""));
143 appsvc->setMime(validator.toString(2, true, ""));
144 appsvc->setCategory(validator.toString(3, true, ""));
146 JSObjectRef dataArray = validator.toArrayObject(4, true);
148 ApplicationConverterFactory::ConverterType converter = ApplicationConverterFactory::getConverter(context);
149 std::vector<ApplicationControlDataPtr> appControlDataArray = converter->toApplicationControlDataArray(dataArray);
150 appsvc->setAppControlDataArray(appControlDataArray);
152 } catch (const BasePlatformException& err) {
153 LoggerE("Exception occured while creating constructor : " << err.getMessage());
156 JSApplicationControlPriv *priv = new JSApplicationControlPriv(context, appsvc);
158 JSObjectRef obj = JSObjectMake(context, getClassRef(), priv);
160 JSStringRef ctorName = JSStringCreateWithUTF8CString("constructor");
161 JSObjectSetProperty(context, obj, ctorName, constructor,
162 kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete | kJSPropertyAttributeDontEnum, NULL);
163 JSStringRelease(ctorName);
169 bool JSApplicationControl::isObjectOfClass(JSContextRef context, JSValueRef value)
171 return JSValueIsObjectOfClass(context, value, getClassRef());
174 ApplicationControlPtr JSApplicationControl::getPrivData(JSContextRef context, JSObjectRef object)
176 JSApplicationControlPriv *priv = static_cast<JSApplicationControlPriv*>(JSObjectGetPrivate(object));
178 throw TypeMismatchException("Private object is null");
180 ApplicationControlPtr result = priv->getObject();
182 throw TypeMismatchException("Private object is null");
188 JSValueRef JSApplicationControl::getProperty(JSContextRef context, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception)
190 JSApplicationControlPriv *priv = static_cast<JSApplicationControlPriv*>(JSObjectGetPrivate(object));
192 DeviceAPI::Common::TypeMismatchException err("TypeMismatchException occured");
193 return JSWebAPIErrorFactory::postException(context, exception, err);
197 ApplicationControlPtr appsvc = priv->getObject();
198 ApplicationConverterFactory::ConverterType converter = ApplicationConverterFactory::getConverter(context);
200 if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_CONTROL_OPERATION)) {
201 return converter->toJSValueRef(appsvc->getOperation());
202 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_CONTROL_URI)) {
203 std::string uri = appsvc->getUri();
205 return JSValueMakeNull(context);
207 return converter->toJSValueRef(uri);
209 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_CONTROL_MIME)) {
210 std::string mime = appsvc->getMime();
212 return JSValueMakeNull(context);
214 return converter->toJSValueRef(mime);
216 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_CONTROL_CATEGORY)) {
217 std::string category = appsvc->getCategory();
218 if (category.empty()) {
219 return JSValueMakeNull(context);
221 return converter->toJSValueRef(category);
223 }else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_CONTROL_DATA)) {
224 return converter->toJSValueRef(appsvc->getAppControlDataArray());
228 LoggerE("Exception occured while get property");
229 return JSValueMakeUndefined(context);
232 /* do not return undefined object to find method */
236 bool JSApplicationControl::setProperty(JSContextRef context, JSObjectRef object, JSStringRef propertyName, JSValueRef value, JSValueRef* exception)
239 ApplicationControlPtr privateData = getPrivData(context, object);
240 ApplicationConverterFactory::ConverterType converter = ApplicationConverterFactory::getConverter(context);
242 if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_CONTROL_OPERATION)) {
243 privateData->setOperation(converter->toString(value));
245 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_CONTROL_URI)) {
246 privateData->setUri(converter->toString(value));
248 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_CONTROL_MIME)) {
249 privateData->setMime(converter->toString(value));
251 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_CONTROL_CATEGORY)) {
252 privateData->setCategory(converter->toString(value));
254 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_CONTROL_DATA)) {
255 privateData->setAppControlDataArray(converter->toApplicationControlDataArray(value));
260 LoggerE("Exception occured while set property");