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"
36 namespace Application {
38 using namespace DeviceAPI::Common;
39 using namespace WrtDeviceApis;
40 using namespace WrtDeviceApis::CommonsJavaScript;
42 ApplicationConverter::ApplicationConverter(JSContextRef context) : Converter(context)
46 ApplicationConverter::~ApplicationConverter()
51 JSValueRef ApplicationConverter::toJSValueRefFromApplication(const ApplicationPtr &arg)
54 Throw(Commons::ConversionException);
56 return CommonsJavaScript::JSUtils::makeObject(m_context, JSApplication::getClassRef(), arg);
60 JSValueRef ApplicationConverter::toJSValueRefFromApplicationCert(const ApplicationCertPtr &arg)
63 Throw(Commons::ConversionException);
65 return CommonsJavaScript::JSUtils::makeObject(m_context, JSApplicationCert::getClassRef(), arg);
69 JSValueRef ApplicationConverter::toJSValueRefFromeApplicationCerts(const ApplicationCertArrayPtr &arg)
72 Throw(Commons::InvalidArgumentException);
74 return toJSValueRef_(*arg, &ApplicationConverter::toJSValueRefFromApplicationCert, this);
78 JSValueRef ApplicationConverter::toJSValueRefFromApplicationInformation(const ApplicationInformationPtr &arg)
81 Throw(Commons::ConversionException);
83 return CommonsJavaScript::JSUtils::makeObject(m_context, JSApplicationInformation::getClassRef(), arg);
86 ApplicationInformationPtr ApplicationConverter::toApplicationInformation(const JSValueRef &jsValue)
88 if(JSApplicationInformation::isObjectOfClass(m_context, jsValue))
89 return JSApplicationInformation::getApplicationInformation(m_context, jsValue);
91 const ScopedJSStringRef nameStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_NAME));
92 const ScopedJSStringRef appIdStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_ID));
93 const ScopedJSStringRef iconPathStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_ICONPATH));
94 const ScopedJSStringRef versionStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_VERSION));
95 const ScopedJSStringRef showStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_SHOW));
96 const ScopedJSStringRef categoriesStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_CATEGORIES));
97 const ScopedJSStringRef installDateStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_INSTALL_DATE));
98 const ScopedJSStringRef installSizeStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_INSTALL_SIZE));
99 const ScopedJSStringRef packageIdStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_PACKAGE_ID));
101 JSObjectRef jsObject = toJSObjectRef(jsValue);
103 JSValueRef nameData = JSObjectGetProperty(m_context, jsObject, nameStr.get(), NULL);
104 JSValueRef appIdStrData = JSObjectGetProperty(m_context, jsObject, appIdStr.get(), NULL);
105 JSValueRef iconPathData = JSObjectGetProperty(m_context, jsObject, iconPathStr.get(), NULL);
106 JSValueRef versionData = JSObjectGetProperty(m_context, jsObject, versionStr.get(), NULL);
107 JSValueRef showData = JSObjectGetProperty(m_context, jsObject, showStr.get(), NULL);
108 JSValueRef categoriesData = JSObjectGetProperty(m_context, jsObject, categoriesStr.get(), NULL);
109 JSValueRef installDateData = JSObjectGetProperty(m_context, jsObject, installDateStr.get(), NULL);
110 JSValueRef installSizeData = JSObjectGetProperty(m_context, jsObject, installSizeStr.get(), NULL);
111 JSValueRef pkgIdStrData = JSObjectGetProperty(m_context, jsObject, packageIdStr.get(), NULL);
115 std::string iconPath;
118 std::vector <std::string> categories;
123 ApplicationInformationPtr result(new ApplicationInformation());
125 Throw(Commons::ConversionException);
128 if (!JSValueIsUndefined(m_context, nameData)) {
129 name = toString(nameData);
130 result->setName(name);
132 if (!JSValueIsUndefined(m_context, appIdStrData)) {
133 appid = toString(appIdStrData);
134 result->setAppId(appid);
136 if (!JSValueIsUndefined(m_context, iconPathData)) {
137 iconPath = toString(iconPathData);
138 result->setIconPath(iconPath);
140 if (!JSValueIsUndefined(m_context, versionData)) {
141 version = toString(versionData);
142 result->setVersion(version);
144 if (!JSValueIsUndefined(m_context, showData)) {
145 show = toBool(showData);
146 result->setShow(show);
148 if (!JSValueIsUndefined(m_context, categoriesData)) {
149 categories = toVectorOfStrings(categoriesData);
150 result->setCategories(categories);
152 if (!JSValueIsUndefined(m_context, installDateData)) {
153 installDate = toDateTimeT(installDateData);
154 result->setInstallDate(installDate);
156 if (!JSValueIsUndefined(m_context, installSizeData)) {
157 installSize = toDateTimeT(installSizeData);
158 result->setInstallSize(installSize);
160 if (!JSValueIsUndefined(m_context, pkgIdStrData)) {
161 pkgid = toString(pkgIdStrData);
162 result->setPackageId(pkgid);
167 JSValueRef ApplicationConverter::toJSValueRef(const ApplicationInformationArrayPtr &arg)
170 Throw(Commons::InvalidArgumentException);
172 return toJSValueRef_(*arg, &ApplicationConverter::toJSValueRefFromApplicationInformation, this);
175 ApplicationInformationArrayPtr ApplicationConverter::toApplicationInformationArray(const JSValueRef &jsValue)
177 ApplicationInformationArrayPtr result(new ApplicationInformationArray());
179 JSObjectRef jsObject = toJSObjectRef(jsValue);
180 for (std::size_t i = 0; i < JSGetArrayLength(m_context, jsObject); ++i) {
181 JSValueRef element = JSGetArrayElement(m_context, jsObject, i);
182 result->push_back(toApplicationInformation(element));
187 JSValueRef ApplicationConverter::toJSValueRefFromApplicationContext(const ApplicationContextPtr &arg)
190 Throw(Commons::InvalidArgumentException);
192 return CommonsJavaScript::JSUtils::makeObject(m_context, JSApplicationContext::getClassRef(), arg);
195 ApplicationContextPtr ApplicationConverter::toApplicationContext(const JSValueRef &jsValue)
197 if(JSApplicationContext::isObjectOfClass(m_context, jsValue))
198 return JSApplicationContext::getApplicationContext(m_context, jsValue);
200 const ScopedJSStringRef appIdStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_CONTEXT_APP_ID));
201 const ScopedJSStringRef contextIdStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_CONTEXT_ID));
203 JSObjectRef jsObject = toJSObjectRef(jsValue);
205 JSValueRef appIdStrData = JSObjectGetProperty(m_context, jsObject, appIdStr.get(), NULL);
206 JSValueRef contextIdStrData = JSObjectGetProperty(m_context, jsObject, contextIdStr.get(), NULL);
209 std::string contextid;
211 ApplicationContextPtr result(new ApplicationContext());
213 Throw(Commons::ConversionException);
216 if (!JSValueIsUndefined(m_context, appIdStrData)) {
217 appid = toString(appIdStrData);
218 result->setAppId(appid);
220 if (!JSValueIsUndefined(m_context, contextIdStrData)) {
221 contextid = toString(contextIdStrData);
222 result->setContextId(contextid);
228 JSValueRef ApplicationConverter::toJSValueRef(const ApplicationContextArrayPtr &arg)
231 Throw(Commons::ConversionException);
233 return toJSValueRef_(*arg, &ApplicationConverter::toJSValueRefFromApplicationContext, this);
236 ApplicationContextArrayPtr ApplicationConverter::toApplicationContextArray(const JSValueRef &jsValue)
238 ApplicationContextArrayPtr result(new ApplicationContextArray());
240 JSObjectRef jsObject = toJSObjectRef(jsValue);
241 for (std::size_t i = 0; i < JSGetArrayLength(m_context, jsObject); ++i) {
242 JSValueRef element = JSGetArrayElement(m_context, jsObject, i);
243 result->push_back(toApplicationContext(element));
249 JSValueRef ApplicationConverter::toJSValueRef(const RequestedApplicationControlPtr &arg)
252 Throw(Commons::InvalidArgumentException);
254 return CommonsJavaScript::JSUtils::makeObject(m_context, JSRequestedApplicationControl::getClassRef(), arg);
257 RequestedApplicationControlPtr ApplicationConverter::toRequestedApplicationControl(const JSValueRef &jsValue)
259 if(JSRequestedApplicationControl::isObjectOfClass(m_context, jsValue)) {
260 return JSRequestedApplicationControl::getRequestedApplicationControl(m_context, jsValue);
262 ThrowMsg(Commons::ConversionException, "Wrong parameter type.");
267 JSValueRef ApplicationConverter::toJSValueRef(const ApplicationControlPtr &arg)
270 Throw(Commons::InvalidArgumentException);
272 return JSApplicationControl::createJSObject(m_context, arg);
275 ApplicationControlPtr ApplicationConverter::toApplicationControl(const JSValueRef &jsValue)
277 if(JSApplicationControl::isObjectOfClass(m_context, jsValue)) {
278 return JSApplicationControl::getApplicationControl(m_context, jsValue);
280 throw TypeMismatchException("not a object of class ApplicationControl");
284 JSValueRef ApplicationConverter::toJSValueRef(const ApplicationControlDataPtr &arg)
286 return CommonsJavaScript::JSUtils::makeObject(m_context, JSApplicationControlData::getClassRef(), arg);
289 ApplicationControlDataPtr ApplicationConverter::toApplicationControlData(const JSValueRef &jsValue)
291 if(JSApplicationControlData::isObjectOfClass(m_context, jsValue))
292 return JSApplicationControlData::getApplicationControlData(m_context, jsValue);
294 const ScopedJSStringRef appControlDataKeyStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_CONTROL_DATA_KEY));
295 const ScopedJSStringRef appControlDataValueStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_CONTROL_DATA_VALUE));
297 JSObjectRef jsObject = toJSObjectRef(jsValue);
299 JSValueRef appControlDataKeyData = JSObjectGetProperty(m_context, jsObject, appControlDataKeyStr.get(), NULL);
300 JSValueRef appControlDataValueData = JSObjectGetProperty(m_context, jsObject, appControlDataValueStr.get(), NULL);
302 ApplicationControlDataPtr result(new ApplicationControlData());
304 Throw(Commons::ConversionException);
307 if (!JSValueIsUndefined(m_context, appControlDataKeyData)) {
308 result->setKey(toString(appControlDataKeyData));
311 if (!JSValueIsUndefined(m_context, appControlDataValueData)) {
312 result->setValue(toVectorOfStrings(appControlDataValueData));
317 JSValueRef ApplicationConverter::toJSValueRef(const std::vector<ApplicationControlDataPtr> &arg)
319 JSObjectRef jsResult = JSCreateArrayObject(m_context, 0, NULL);
321 if (jsResult == NULL) {
322 ThrowMsg(Commons::ConversionException, "Could not create js array object");
325 for (std::size_t i = 0; i < arg.size(); ++i) {
326 JSValueRef tmpVal = toJSValueRef(arg[i]);
327 if (!JSSetArrayElement(m_context, jsResult, i, tmpVal)) {
328 ThrowMsg(Commons::ConversionException, "Could not insert value into js array");
335 std::vector<ApplicationControlDataPtr> ApplicationConverter::toApplicationControlDataArray(const JSValueRef &jsValue)
337 if (JSValueIsNull(m_context, jsValue) || JSValueIsUndefined(m_context, jsValue)) {
338 return std::vector<ApplicationControlDataPtr>();
341 if (!JSIsArrayValue(m_context, jsValue)) {
342 ThrowMsg(Commons::ConversionException, "Argument is not an JS array.");
345 std::vector<ApplicationControlDataPtr> result;
346 JSObjectRef objArg = toJSObjectRef(jsValue);
347 for (std::size_t i = 0; i < JSGetArrayLength(m_context, objArg); ++i) {
348 JSValueRef element = JSGetArrayElement(m_context, objArg, i);
349 result.push_back(toApplicationControlData(element));