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.
19 #include <dpl/log/log.h>
20 #include <CommonsJavaScript/JSUtils.h>
21 #include <CommonsJavaScript/Validator.h>
22 #include <CommonsJavaScript/ScopedJSStringRef.h>
23 #include <Commons/RegexUtils.h>
24 #include <Commons/Exception.h>
26 #include "ApplicationConverter.h"
27 #include "JSApplication.h"
28 #include "JSApplicationInformation.h"
29 #include "JSApplicationContext.h"
30 #include "JSApplicationControlData.h"
31 #include "JSApplicationControlData.h"
32 #include "JSApplicationControl.h"
33 #include "JSRequestedApplicationControl.h"
34 #include "JSApplicationCert.h"
37 namespace Application {
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)
53 LogDebug("entered to toJSValueRefFromApplication ");
55 Throw(Commons::ConversionException);
57 return CommonsJavaScript::JSUtils::makeObject(m_context, JSApplication::getClassRef(), arg);
61 JSValueRef ApplicationConverter::toJSValueRefFromApplicationCert(const ApplicationCertPtr &arg)
63 LogDebug("entered to toJSValueRefFromApplicationCert ");
65 Throw(Commons::ConversionException);
67 return CommonsJavaScript::JSUtils::makeObject(m_context, JSApplicationCert::getClassRef(), arg);
71 JSValueRef ApplicationConverter::toJSValueRefFromeApplicationCerts(const ApplicationCertArrayPtr &arg)
74 Throw(Commons::InvalidArgumentException);
76 return toJSValueRef_(*arg, &ApplicationConverter::toJSValueRefFromApplicationCert, this);
80 JSValueRef ApplicationConverter::toJSValueRefFromApplicationInformation(const ApplicationInformationPtr &arg)
83 Throw(Commons::ConversionException);
85 return CommonsJavaScript::JSUtils::makeObject(m_context, JSApplicationInformation::getClassRef(), arg);
88 ApplicationInformationPtr ApplicationConverter::toApplicationInformation(const JSValueRef &jsValue)
90 if(JSApplicationInformation::isObjectOfClass(m_context, jsValue))
91 return JSApplicationInformation::getApplicationInformation(m_context, jsValue);
93 const ScopedJSStringRef nameStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_NAME));
94 const ScopedJSStringRef appIdStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_ID));
95 const ScopedJSStringRef iconPathStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_ICONPATH));
96 const ScopedJSStringRef versionStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_VERSION));
97 const ScopedJSStringRef showStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_SHOW));
98 const ScopedJSStringRef categoriesStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_CATEGORIES));
99 const ScopedJSStringRef installDateStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_INSTALL_DATE));
100 const ScopedJSStringRef installSizeStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_INSTALL_SIZE));
101 const ScopedJSStringRef packageIdStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_INFORMATION_PACKAGE_ID));
103 JSObjectRef jsObject = toJSObjectRef(jsValue);
105 JSValueRef nameData = JSObjectGetProperty(m_context, jsObject, nameStr.get(), NULL);
106 JSValueRef appIdStrData = JSObjectGetProperty(m_context, jsObject, appIdStr.get(), NULL);
107 JSValueRef iconPathData = JSObjectGetProperty(m_context, jsObject, iconPathStr.get(), NULL);
108 JSValueRef versionData = JSObjectGetProperty(m_context, jsObject, versionStr.get(), NULL);
109 JSValueRef showData = JSObjectGetProperty(m_context, jsObject, showStr.get(), NULL);
110 JSValueRef categoriesData = JSObjectGetProperty(m_context, jsObject, categoriesStr.get(), NULL);
111 JSValueRef installDateData = JSObjectGetProperty(m_context, jsObject, installDateStr.get(), NULL);
112 JSValueRef installSizeData = JSObjectGetProperty(m_context, jsObject, installSizeStr.get(), NULL);
113 JSValueRef pkgIdStrData = JSObjectGetProperty(m_context, jsObject, packageIdStr.get(), NULL);
117 std::string iconPath;
120 std::vector <std::string> categories;
125 ApplicationInformationPtr result(new ApplicationInformation());
127 Throw(Commons::ConversionException);
130 if (!JSValueIsUndefined(m_context, nameData)) {
131 name = toString(nameData);
132 result->setName(name);
134 if (!JSValueIsUndefined(m_context, appIdStrData)) {
135 appid = toString(appIdStrData);
136 result->setAppId(appid);
138 if (!JSValueIsUndefined(m_context, iconPathData)) {
139 iconPath = toString(iconPathData);
140 result->setIconPath(iconPath);
142 if (!JSValueIsUndefined(m_context, versionData)) {
143 version = toString(versionData);
144 result->setVersion(version);
146 if (!JSValueIsUndefined(m_context, showData)) {
147 show = toBool(showData);
148 result->setShow(show);
150 if (!JSValueIsUndefined(m_context, categoriesData)) {
151 categories = toVectorOfStrings(categoriesData);
152 result->setCategories(categories);
154 if (!JSValueIsUndefined(m_context, installDateData)) {
155 installDate = toDateTimeT(installDateData);
156 result->setInstallDate(installDate);
158 if (!JSValueIsUndefined(m_context, installSizeData)) {
159 installSize = toDateTimeT(installSizeData);
160 result->setInstallSize(installSize);
162 if (!JSValueIsUndefined(m_context, pkgIdStrData)) {
163 pkgid = toString(pkgIdStrData);
164 result->setPackageId(pkgid);
169 JSValueRef ApplicationConverter::toJSValueRef(const ApplicationInformationArrayPtr &arg)
172 Throw(Commons::InvalidArgumentException);
174 return toJSValueRef_(*arg, &ApplicationConverter::toJSValueRefFromApplicationInformation, this);
177 ApplicationInformationArrayPtr ApplicationConverter::toApplicationInformationArray(const JSValueRef &jsValue)
179 ApplicationInformationArrayPtr result(new ApplicationInformationArray());
181 JSObjectRef jsObject = toJSObjectRef(jsValue);
182 for (std::size_t i = 0; i < JSGetArrayLength(m_context, jsObject); ++i) {
183 JSValueRef element = JSGetArrayElement(m_context, jsObject, i);
184 result->push_back(toApplicationInformation(element));
189 JSValueRef ApplicationConverter::toJSValueRefFromApplicationContext(const ApplicationContextPtr &arg)
192 Throw(Commons::InvalidArgumentException);
194 return CommonsJavaScript::JSUtils::makeObject(m_context, JSApplicationContext::getClassRef(), arg);
197 ApplicationContextPtr ApplicationConverter::toApplicationContext(const JSValueRef &jsValue)
199 if(JSApplicationContext::isObjectOfClass(m_context, jsValue))
200 return JSApplicationContext::getApplicationContext(m_context, jsValue);
202 const ScopedJSStringRef appIdStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_CONTEXT_APP_ID));
203 const ScopedJSStringRef contextIdStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_CONTEXT_ID));
205 JSObjectRef jsObject = toJSObjectRef(jsValue);
207 JSValueRef appIdStrData = JSObjectGetProperty(m_context, jsObject, appIdStr.get(), NULL);
208 JSValueRef contextIdStrData = JSObjectGetProperty(m_context, jsObject, contextIdStr.get(), NULL);
211 std::string contextid;
213 ApplicationContextPtr result(new ApplicationContext());
215 Throw(Commons::ConversionException);
218 if (!JSValueIsUndefined(m_context, appIdStrData)) {
219 appid = toString(appIdStrData);
220 result->setAppId(appid);
222 if (!JSValueIsUndefined(m_context, contextIdStrData)) {
223 contextid = toString(contextIdStrData);
224 result->setContextId(contextid);
230 JSValueRef ApplicationConverter::toJSValueRef(const ApplicationContextArrayPtr &arg)
233 Throw(Commons::ConversionException);
235 return toJSValueRef_(*arg, &ApplicationConverter::toJSValueRefFromApplicationContext, this);
238 ApplicationContextArrayPtr ApplicationConverter::toApplicationContextArray(const JSValueRef &jsValue)
240 ApplicationContextArrayPtr result(new ApplicationContextArray());
242 JSObjectRef jsObject = toJSObjectRef(jsValue);
243 for (std::size_t i = 0; i < JSGetArrayLength(m_context, jsObject); ++i) {
244 JSValueRef element = JSGetArrayElement(m_context, jsObject, i);
245 result->push_back(toApplicationContext(element));
251 JSValueRef ApplicationConverter::toJSValueRef(const RequestedApplicationControlPtr &arg)
253 LogDebug("entered to toJSValueRefFromRequestedApplicationControl" );
255 Throw(Commons::InvalidArgumentException);
257 return CommonsJavaScript::JSUtils::makeObject(m_context, JSRequestedApplicationControl::getClassRef(), arg);
260 RequestedApplicationControlPtr ApplicationConverter::toRequestedApplicationControl(const JSValueRef &jsValue)
262 if(JSRequestedApplicationControl::isObjectOfClass(m_context, jsValue)) {
263 return JSRequestedApplicationControl::getRequestedApplicationControl(m_context, jsValue);
265 ThrowMsg(Commons::ConversionException, "Wrong parameter type.");
270 JSValueRef ApplicationConverter::toJSValueRef(const ApplicationControlPtr &arg)
274 Throw(Commons::InvalidArgumentException);
276 return JSApplicationControl::createJSObject(m_context, arg);
279 ApplicationControlPtr ApplicationConverter::toApplicationControl(const JSValueRef &jsValue)
281 if(JSApplicationControl::isObjectOfClass(m_context, jsValue)) {
282 return JSApplicationControl::getApplicationControl(m_context, jsValue);
284 ThrowMsg(Commons::ConversionException, "Wrong parameter type.");
288 JSValueRef ApplicationConverter::toJSValueRef(const ApplicationControlDataPtr &arg)
291 return CommonsJavaScript::JSUtils::makeObject(m_context, JSApplicationControlData::getClassRef(), arg);
294 ApplicationControlDataPtr ApplicationConverter::toApplicationControlData(const JSValueRef &jsValue)
296 if(JSApplicationControlData::isObjectOfClass(m_context, jsValue))
297 return JSApplicationControlData::getApplicationControlData(m_context, jsValue);
299 const ScopedJSStringRef appControlDataKeyStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_CONTROL_DATA_KEY));
300 const ScopedJSStringRef appControlDataValueStr(JSStringCreateWithUTF8CString(TIZEN_APPLICATION_CONTROL_DATA_VALUE));
302 JSObjectRef jsObject = toJSObjectRef(jsValue);
304 JSValueRef appControlDataKeyData = JSObjectGetProperty(m_context, jsObject, appControlDataKeyStr.get(), NULL);
305 JSValueRef appControlDataValueData = JSObjectGetProperty(m_context, jsObject, appControlDataValueStr.get(), NULL);
307 ApplicationControlDataPtr result(new ApplicationControlData());
309 Throw(Commons::ConversionException);
312 if (!JSValueIsUndefined(m_context, appControlDataKeyData)) {
313 result->setKey(toString(appControlDataKeyData));
316 if (!JSValueIsUndefined(m_context, appControlDataValueData)) {
317 result->setValue(toVectorOfStrings(appControlDataValueData));
322 JSValueRef ApplicationConverter::toJSValueRef(const std::vector<ApplicationControlDataPtr> &arg)
324 JSObjectRef jsResult = JSCreateArrayObject(m_context, 0, NULL);
326 if (jsResult == NULL) {
327 ThrowMsg(Commons::ConversionException, "Could not create js array object");
330 for (std::size_t i = 0; i < arg.size(); ++i) {
331 JSValueRef tmpVal = toJSValueRef(arg[i]);
332 if (!JSSetArrayElement(m_context, jsResult, i, tmpVal)) {
333 ThrowMsg(Commons::ConversionException, "Could not insert value into js array");
340 std::vector<ApplicationControlDataPtr> ApplicationConverter::toApplicationControlDataArray(const JSValueRef &jsValue)
342 if (JSValueIsNull(m_context, jsValue) || JSValueIsUndefined(m_context, jsValue)) {
343 return std::vector<ApplicationControlDataPtr>();
346 if (!JSIsArrayValue(m_context, jsValue)) {
347 ThrowMsg(Commons::ConversionException, "Argument is not an JS array.");
350 std::vector<ApplicationControlDataPtr> result;
351 JSObjectRef objArg = toJSObjectRef(jsValue);
352 for (std::size_t i = 0; i < JSGetArrayLength(m_context, objArg); ++i) {
353 JSValueRef element = JSGetArrayElement(m_context, objArg, i);
354 result.push_back(toApplicationControlData(element));