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.
21 #include <dpl/log/log.h>
22 #include <CommonsJavaScript/JSUtils.h>
23 #include <CommonsJavaScript/Converter.h>
24 #include <Commons/Exception.h>
25 #include <JSTizenExceptionFactory.h>
26 #include <JSTizenException.h>
27 #include "ApplicationInformation.h"
28 #include "JSApplicationInformation.h"
29 #include "AppManagerWrapper.h"
32 namespace Application {
34 using namespace WrtDeviceApis;
35 using namespace DeviceAPI::Common;
38 JSClassRef JSApplicationInformation::m_classRef = NULL;
40 JSClassDefinition JSApplicationInformation::m_classInfo = {
42 kJSClassAttributeNone,
43 TIZEN_INTERFACE_APPLICATION_INFORMATION,
50 getProperty, //GetProperty,
52 NULL, //DeleteProperty,
53 NULL, //GetPropertyNames,
54 NULL, //CallAsFunction,
55 NULL, //CallAsConstructor,
60 JSStaticValue JSApplicationInformation::m_property[] = {
61 { TIZEN_APPLICATION_INFORMATION_ID, getProperty, NULL, kJSPropertyAttributeReadOnly },
62 { TIZEN_APPLICATION_INFORMATION_NAME, getProperty, NULL, kJSPropertyAttributeReadOnly },
63 { TIZEN_APPLICATION_INFORMATION_ICONPATH, getProperty, NULL, kJSPropertyAttributeReadOnly },
64 { TIZEN_APPLICATION_INFORMATION_VERSION, getProperty, NULL, kJSPropertyAttributeReadOnly },
65 { TIZEN_APPLICATION_INFORMATION_SHOW, getProperty, NULL, kJSPropertyAttributeReadOnly },
66 { TIZEN_APPLICATION_INFORMATION_CATEGORIES, getProperty, NULL, kJSPropertyAttributeReadOnly },
67 { TIZEN_APPLICATION_INFORMATION_INSTALL_DATE, getProperty, NULL, kJSPropertyAttributeReadOnly },
68 { TIZEN_APPLICATION_INFORMATION_INSTALL_SIZE, getProperty, NULL, kJSPropertyAttributeReadOnly },
69 { TIZEN_APPLICATION_INFORMATION_PACKAGE_ID, getProperty, NULL, kJSPropertyAttributeReadOnly },
73 JSClassRef JSApplicationInformation::getClassRef() {
75 m_classRef = JSClassCreate(&m_classInfo);
80 JSValueRef JSApplicationInformation::createJSObject(JSContextRef context,
81 const std::string &name,
82 const std::string &appId,
83 const std::string &iconPath,
84 const std::string &version,
86 const std::vector<std::string> &categories,
87 const time_t &installDate,
88 const long &installSize,
89 const std::string &pkgId)
91 ApplicationInformationPtr privateData = ApplicationInformationPtr(new ApplicationInformation());
92 privateData->setName(name);
93 privateData->setAppId(appId);
94 privateData->setIconPath(iconPath);
95 privateData->setVersion(version);
96 privateData->setShow(show);
97 privateData->setCategories(categories);
98 privateData->setInstallDate(installDate);
99 privateData->setInstallSize(installSize);
100 privateData->setPackageId(pkgId);
102 JSApplicationInformationPriv *priv = new JSApplicationInformationPriv(context, privateData);
104 JSObjectRef jsValueRef = JSObjectMake(context, getClassRef(), static_cast<void*>(priv));
105 if (NULL == jsValueRef) {
106 LogError("object creation error");
107 return JSValueMakeUndefined(context);
113 void JSApplicationInformation::initialize(JSContextRef context, JSObjectRef object)
115 //LogInfo(">> initialize");
118 void JSApplicationInformation::finalize(JSObjectRef object)
120 LogInfo(">> finalize");
121 JSApplicationInformationPriv* priv = static_cast<JSApplicationInformationPriv*>(JSObjectGetPrivate(object));
122 JSObjectSetPrivate(object, NULL);
123 LogDebug("Deleting JSApplicationInformation object");
127 bool JSApplicationInformation::isObjectOfClass(JSContextRef context, JSValueRef value)
129 return JSValueIsObjectOfClass(context, value, getClassRef());
132 ApplicationInformationPtr JSApplicationInformation::getPrivData(JSObjectRef object)
134 JSApplicationInformationPriv *priv = static_cast<JSApplicationInformationPriv*>(JSObjectGetPrivate(object));
136 ThrowMsg(WrtDeviceApis::Commons::NullPointerException, "Private object is null");
138 ApplicationInformationPtr result = priv->getObject();
140 ThrowMsg(WrtDeviceApis::Commons::NullPointerException, "Private object is null");
145 ApplicationInformationPtr JSApplicationInformation::getApplicationInformation(JSContextRef context, JSValueRef value)
147 if (!isObjectOfClass(context, value)) {
148 Throw(WrtDeviceApis::Commons::InvalidArgumentException);
151 JSObjectRef object = JSValueToObject(context, value, NULL);
153 Throw(WrtDeviceApis::Commons::InvalidArgumentException);
156 JSApplicationInformationPriv *priv = static_cast<JSApplicationInformationPriv*>(JSObjectGetPrivate(object));
158 Throw(WrtDeviceApis::Commons::NullPointerException);
161 return priv->getObject();
164 JSValueRef JSApplicationInformation::getProperty(JSContextRef context,
166 JSStringRef propertyName,
167 JSValueRef* exception)
170 CommonsJavaScript::Converter converter(context);
171 ApplicationInformationPtr privateData = getPrivData(object);
173 if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_INFORMATION_ID)) {
174 return converter.toJSValueRef(privateData->getAppId());
175 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_INFORMATION_NAME)) {
176 return converter.toJSValueRef(privateData->getName());
177 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_INFORMATION_ICONPATH)) {
178 return converter.toJSValueRef(privateData->getIconPath());
179 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_INFORMATION_SHOW)) {
180 return converter.toJSValueRef(privateData->getShow());
181 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_INFORMATION_CATEGORIES)) {
182 return converter.toJSValueRef(privateData->getCategories());
183 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_INFORMATION_PACKAGE_ID)) {
184 return converter.toJSValueRef(privateData->getPackageId());
186 // below code is temporal. if package manager issue is solved, rollback this code.
187 #if 1 // below code is used to fill attribute lazy
188 if (!privateData->isInitialized()) {
189 //LogInfo(">> is Not Initialized");
190 AppManagerWrapperSingleton::Instance().initializeAppInfo(privateData);
193 if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_INFORMATION_VERSION)) {
194 return converter.toJSValueRef(privateData->getVersion());
195 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_INFORMATION_INSTALL_DATE)) {
196 return converter.toJSValueRef(privateData->getInstallDate());
197 } else if (JSStringIsEqualToUTF8CString(propertyName, TIZEN_APPLICATION_INFORMATION_INSTALL_SIZE)) {
198 return converter.toJSValueRefLong(privateData->getInstallSize());
201 } Catch(WrtDeviceApis::Commons::Exception) {
202 LogError("Exception: " << _rethrown_exception.GetMessage());
203 JSTizenExceptionFactory::postException(context, exception,JSTizenException::INVALID_VALUES_ERROR, "Invalid value error");
206 return JSValueMakeUndefined(context);