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 <CommonsJavaScript/JSUtils.h>
19 #include <CommonsJavaScript/Validator.h>
20 #include <CommonsJavaScript/ScopedJSStringRef.h>
21 #include <Commons/RegexUtils.h>
22 #include <Commons/Exception.h>
23 #include <JSWebAPIError.h>
25 #include "ApplicationConverter.h"
26 #include "JSApplication.h"
27 #include "JSApplicationInformation.h"
28 #include "JSApplicationContext.h"
29 #include "JSApplicationControlData.h"
30 #include "JSApplicationControlData.h"
31 #include "JSApplicationControl.h"
32 #include "JSRequestedApplicationControl.h"
33 #include "JSApplicationCert.h"
37 namespace Application {
39 using namespace DeviceAPI::Common;
40 using namespace WrtDeviceApis;
41 using namespace WrtDeviceApis::CommonsJavaScript;
43 ApplicationConverter::ApplicationConverter(JSContextRef context) : Converter(context)
47 ApplicationConverter::~ApplicationConverter()
52 JSValueRef ApplicationConverter::toJSValueRefFromApplication(const ApplicationPtr &arg)
54 LoggerD("entered to toJSValueRefFromApplication ");
56 Throw(Commons::ConversionException);
58 return CommonsJavaScript::JSUtils::makeObject(m_context, JSApplication::getClassRef(), arg);
62 JSValueRef ApplicationConverter::toJSValueRefFromApplicationCert(const ApplicationCertPtr &arg)
64 LoggerD("entered to toJSValueRefFromApplicationCert ");
66 Throw(Commons::ConversionException);
68 return CommonsJavaScript::JSUtils::makeObject(m_context, JSApplicationCert::getClassRef(), arg);
72 JSValueRef ApplicationConverter::toJSValueRefFromeApplicationCerts(const ApplicationCertArrayPtr &arg)
75 Throw(Commons::InvalidArgumentException);
77 return toJSValueRef_(*arg, &ApplicationConverter::toJSValueRefFromApplicationCert, this);
81 JSValueRef ApplicationConverter::toJSValueRefFromApplicationInformation(const ApplicationInformationPtr &arg)
84 Throw(Commons::ConversionException);
86 return CommonsJavaScript::JSUtils::makeObject(m_context, JSApplicationInformation::getClassRef(), arg);
89 ApplicationInformationPtr ApplicationConverter::toApplicationInformation(const JSValueRef &jsValue)
91 if(JSApplicationInformation::isObjectOfClass(m_context, jsValue))
92 return JSApplicationInformation::getApplicationInformation(m_context, jsValue);
94 const ScopedJSStringRef nameStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_NAME));
95 const ScopedJSStringRef appIdStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_ID));
96 const ScopedJSStringRef iconPathStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_ICONPATH));
97 const ScopedJSStringRef versionStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_VERSION));
98 const ScopedJSStringRef showStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_SHOW));
99 const ScopedJSStringRef categoriesStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_CATEGORIES));
100 const ScopedJSStringRef installDateStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_INSTALL_DATE));
101 const ScopedJSStringRef installSizeStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_INSTALL_SIZE));
102 const ScopedJSStringRef packageIdStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_PACKAGE_ID));
104 JSObjectRef jsObject = toJSObjectRef(jsValue);
106 JSValueRef nameData = JSObjectGetProperty(m_context, jsObject, nameStr.get(), NULL);
107 JSValueRef appIdStrData = JSObjectGetProperty(m_context, jsObject, appIdStr.get(), NULL);
108 JSValueRef iconPathData = JSObjectGetProperty(m_context, jsObject, iconPathStr.get(), NULL);
109 JSValueRef versionData = JSObjectGetProperty(m_context, jsObject, versionStr.get(), NULL);
110 JSValueRef showData = JSObjectGetProperty(m_context, jsObject, showStr.get(), NULL);
111 JSValueRef categoriesData = JSObjectGetProperty(m_context, jsObject, categoriesStr.get(), NULL);
112 JSValueRef installDateData = JSObjectGetProperty(m_context, jsObject, installDateStr.get(), NULL);
113 JSValueRef installSizeData = JSObjectGetProperty(m_context, jsObject, installSizeStr.get(), NULL);
114 JSValueRef pkgIdStrData = JSObjectGetProperty(m_context, jsObject, packageIdStr.get(), NULL);
118 std::string iconPath;
121 std::vector <std::string> categories;
126 ApplicationInformationPtr result(new ApplicationInformation());
128 Throw(Commons::ConversionException);
131 if (!JSValueIsUndefined(m_context, nameData)) {
132 name = toString(nameData);
133 result->setName(name);
135 if (!JSValueIsUndefined(m_context, appIdStrData)) {
136 appid = toString(appIdStrData);
137 result->setAppId(appid);
139 if (!JSValueIsUndefined(m_context, iconPathData)) {
140 iconPath = toString(iconPathData);
141 result->setIconPath(iconPath);
143 if (!JSValueIsUndefined(m_context, versionData)) {
144 version = toString(versionData);
145 result->setVersion(version);
147 if (!JSValueIsUndefined(m_context, showData)) {
148 show = toBool(showData);
149 result->setShow(show);
151 if (!JSValueIsUndefined(m_context, categoriesData)) {
152 categories = toVectorOfStrings(categoriesData);
153 result->setCategories(categories);
155 if (!JSValueIsUndefined(m_context, installDateData)) {
156 installDate = toDateTimeT(installDateData);
157 result->setInstallDate(installDate);
159 if (!JSValueIsUndefined(m_context, installSizeData)) {
160 installSize = toDateTimeT(installSizeData);
161 result->setInstallSize(installSize);
163 if (!JSValueIsUndefined(m_context, pkgIdStrData)) {
164 pkgid = toString(pkgIdStrData);
165 result->setPackageId(pkgid);
170 JSValueRef ApplicationConverter::toJSValueRef(const ApplicationInformationArrayPtr &arg)
173 Throw(Commons::InvalidArgumentException);
175 return toJSValueRef_(*arg, &ApplicationConverter::toJSValueRefFromApplicationInformation, this);
178 ApplicationInformationArrayPtr ApplicationConverter::toApplicationInformationArray(const JSValueRef &jsValue)
180 ApplicationInformationArrayPtr result(new ApplicationInformationArray());
182 JSObjectRef jsObject = toJSObjectRef(jsValue);
183 for (std::size_t i = 0; i < JSGetArrayLength(m_context, jsObject); ++i) {
184 JSValueRef element = JSGetArrayElement(m_context, jsObject, i);
185 result->push_back(toApplicationInformation(element));
190 JSValueRef ApplicationConverter::toJSValueRefFromApplicationContext(const ApplicationContextPtr &arg)
193 Throw(Commons::InvalidArgumentException);
195 return CommonsJavaScript::JSUtils::makeObject(m_context, JSApplicationContext::getClassRef(), arg);
198 ApplicationContextPtr ApplicationConverter::toApplicationContext(const JSValueRef &jsValue)
200 if(JSApplicationContext::isObjectOfClass(m_context, jsValue))
201 return JSApplicationContext::getApplicationContext(m_context, jsValue);
203 const ScopedJSStringRef appIdStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_CONTEXT_APP_ID));
204 const ScopedJSStringRef contextIdStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_CONTEXT_ID));
206 JSObjectRef jsObject = toJSObjectRef(jsValue);
208 JSValueRef appIdStrData = JSObjectGetProperty(m_context, jsObject, appIdStr.get(), NULL);
209 JSValueRef contextIdStrData = JSObjectGetProperty(m_context, jsObject, contextIdStr.get(), NULL);
212 std::string contextid;
214 ApplicationContextPtr result(new ApplicationContext());
216 Throw(Commons::ConversionException);
219 if (!JSValueIsUndefined(m_context, appIdStrData)) {
220 appid = toString(appIdStrData);
221 result->setAppId(appid);
223 if (!JSValueIsUndefined(m_context, contextIdStrData)) {
224 contextid = toString(contextIdStrData);
225 result->setContextId(contextid);
231 JSValueRef ApplicationConverter::toJSValueRef(const ApplicationContextArrayPtr &arg)
234 Throw(Commons::ConversionException);
236 return toJSValueRef_(*arg, &ApplicationConverter::toJSValueRefFromApplicationContext, this);
239 ApplicationContextArrayPtr ApplicationConverter::toApplicationContextArray(const JSValueRef &jsValue)
241 ApplicationContextArrayPtr result(new ApplicationContextArray());
243 JSObjectRef jsObject = toJSObjectRef(jsValue);
244 for (std::size_t i = 0; i < JSGetArrayLength(m_context, jsObject); ++i) {
245 JSValueRef element = JSGetArrayElement(m_context, jsObject, i);
246 result->push_back(toApplicationContext(element));
252 JSValueRef ApplicationConverter::toJSValueRef(const RequestedApplicationControlPtr &arg)
254 LoggerD("entered to toJSValueRefFromRequestedApplicationControl" );
256 Throw(Commons::InvalidArgumentException);
258 return CommonsJavaScript::JSUtils::makeObject(m_context, JSRequestedApplicationControl::getClassRef(), arg);
261 RequestedApplicationControlPtr ApplicationConverter::toRequestedApplicationControl(const JSValueRef &jsValue)
263 if(JSRequestedApplicationControl::isObjectOfClass(m_context, jsValue)) {
264 return JSRequestedApplicationControl::getRequestedApplicationControl(m_context, jsValue);
266 ThrowMsg(Commons::ConversionException, "Wrong parameter type.");
271 JSValueRef ApplicationConverter::toJSValueRef(const ApplicationControlPtr &arg)
275 Throw(Commons::InvalidArgumentException);
277 return JSApplicationControl::createJSObject(m_context, arg);
280 ApplicationControlPtr ApplicationConverter::toApplicationControl(const JSValueRef &jsValue)
282 if(JSApplicationControl::isObjectOfClass(m_context, jsValue)) {
283 return JSApplicationControl::getApplicationControl(m_context, jsValue);
285 throw TypeMismatchException("not a object of class ApplicationControl");
289 JSValueRef ApplicationConverter::toJSValueRef(const ApplicationControlDataPtr &arg)
292 return CommonsJavaScript::JSUtils::makeObject(m_context, JSApplicationControlData::getClassRef(), arg);
295 ApplicationControlDataPtr ApplicationConverter::toApplicationControlData(const JSValueRef &jsValue)
297 if(JSApplicationControlData::isObjectOfClass(m_context, jsValue))
298 return JSApplicationControlData::getApplicationControlData(m_context, jsValue);
300 const ScopedJSStringRef appControlDataKeyStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_CONTROL_DATA_KEY));
301 const ScopedJSStringRef appControlDataValueStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_CONTROL_DATA_VALUE));
303 JSObjectRef jsObject = toJSObjectRef(jsValue);
305 JSValueRef appControlDataKeyData = JSObjectGetProperty(m_context, jsObject, appControlDataKeyStr.get(), NULL);
306 JSValueRef appControlDataValueData = JSObjectGetProperty(m_context, jsObject, appControlDataValueStr.get(), NULL);
308 ApplicationControlDataPtr result(new ApplicationControlData());
310 Throw(Commons::ConversionException);
313 if (!JSValueIsUndefined(m_context, appControlDataKeyData)) {
314 result->setKey(toString(appControlDataKeyData));
317 if (!JSValueIsUndefined(m_context, appControlDataValueData)) {
318 result->setValue(toVectorOfStrings(appControlDataValueData));
323 JSValueRef ApplicationConverter::toJSValueRef(const std::vector<ApplicationControlDataPtr> &arg)
325 JSObjectRef jsResult = JSCreateArrayObject(m_context, 0, NULL);
327 if (jsResult == NULL) {
328 ThrowMsg(Commons::ConversionException, "Could not create js array object");
331 for (std::size_t i = 0; i < arg.size(); ++i) {
332 JSValueRef tmpVal = toJSValueRef(arg[i]);
333 if (!JSSetArrayElement(m_context, jsResult, i, tmpVal)) {
334 ThrowMsg(Commons::ConversionException, "Could not insert value into js array");
341 std::vector<ApplicationControlDataPtr> ApplicationConverter::toApplicationControlDataArray(const JSValueRef &jsValue)
343 if (JSValueIsNull(m_context, jsValue) || JSValueIsUndefined(m_context, jsValue)) {
344 return std::vector<ApplicationControlDataPtr>();
347 if (!JSIsArrayValue(m_context, jsValue)) {
348 ThrowMsg(Commons::ConversionException, "Argument is not an JS array.");
351 std::vector<ApplicationControlDataPtr> result;
352 JSObjectRef objArg = toJSObjectRef(jsValue);
353 for (std::size_t i = 0; i < JSGetArrayLength(m_context, objArg); ++i) {
354 JSValueRef element = JSGetArrayElement(m_context, objArg, i);
355 result.push_back(toApplicationControlData(element));