2 // Open Service Platform
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 * @file FAppPkg_PackageManagerImpl.cpp
19 * @brief This is the implementation for the _PackageManagerImpl class.
27 #include <unique_ptr.h>
29 #include <package-manager-types.h>
31 #include <FAppPkgPackageManager.h>
32 #include <FAppPkgPackageAppInfo.h>
33 #include <FAppPkgPackageInfo.h>
34 #include <FAppPkgIPackageInstallationEventListener.h>
35 #include <FAppPkgIPackageInstallationResponseListener.h>
36 #include <FAppPkgIPackageUninstallationResponseListener.h>
37 #include <FBaseSysLog.h>
39 #include <FIoRegistry.h>
40 #include <FSysSystemTime.h>
41 #include <FBase_StringConverter.h>
43 #include "FAppPkg_PackageManagerImpl.h"
44 #include "FAppPkg_PackageInfoImpl.h"
45 #include "FAppPkg_PackageAppInfoImpl.h"
46 #include "FAppPkg_PackageParser.h"
47 #include "FApp_AppInfo.h"
48 #include "FApp_PackageManagerProxy.h"
50 using namespace Tizen::Base;
51 using namespace Tizen::Base::Runtime;
52 using namespace Tizen::Base::Collection;
53 using namespace Tizen::Io;
54 using namespace Tizen::System;
56 namespace Tizen { namespace App { namespace Package
59 PackageManager* pPackageManagerInstance = null;
61 Tizen::Base::Collection::HashMap _PackageManagerImpl::__installationList;
64 _PackageManagerEvent::FireImpl(IEventListener& listener, const IEventArg& arg)
66 IPackageInstallationEventListener* pListener = dynamic_cast<IPackageInstallationEventListener*> (&listener);
67 SysTryReturnVoidResult(NID_APP, pListener != null, E_OUT_OF_MEMORY, "pListener instance must not be null.");
69 const _PackageManagerEventArg* pArg = dynamic_cast<const _PackageManagerEventArg*>(&arg);
70 SysTryReturnVoidResult(NID_APP, pArg != null, E_OUT_OF_MEMORY, "pArg instance must not be null.");
72 if (pArg->__eventKey == L"end")
74 if (pArg->__eventValue == L"ok")
78 SysLog(NID_APP, "Installation is Completed. [PackageId = %ls]", pArg->__packageId.GetPointer());
79 pListener->OnPackageInstallationCompleted(pArg->__packageId, PACKAGE_INSTALLATION_RESULT_SUCCESS);
83 SysLog(NID_APP, "Uninstallation is Completed. [PackageId = %ls]", pArg->__packageId.GetPointer());
84 pListener->OnPackageUninstallationCompleted(pArg->__packageId, true);
91 SysLog(NID_APP, "Installation is Completed(Error). [PackageId = %ls]", pArg->__packageId.GetPointer());
92 pListener->OnPackageInstallationCompleted(pArg->__packageId, PACKAGE_INSTALLATION_RESULT_INVALID_PACKAGE);
96 SysLog(NID_APP, "Uninstallation is Completed(Error). [PackageId = %ls]", pArg->__packageId.GetPointer());
97 pListener->OnPackageUninstallationCompleted(pArg->__packageId, false);
101 else if (pArg->__eventKey == L"install_percent")
103 std::unique_ptr<char[]> pProgress(_StringConverter::CopyToCharArrayN(pArg->__eventValue));
106 sscanf(pProgress.get(), "%d", &progress);
108 SysLog(NID_APP, "InstallationInProgress [%d]", progress);
109 pListener->OnPackageInstallationInProgress(pArg->__packageId, progress);
114 _PackageManagerImpl::GetPackageIdByAppId(const AppId& appId)
116 SysTryReturn(NID_APP, appId.IsEmpty() == false, L"", E_INVALID_ARG, "appId is empty");
120 if (appId.StartsWith(L".", 10) == true)
122 appId.SubString(0, 10, packageId);
127 char* pPackageId = null;
128 pkgmgrinfo_appinfo_h pAppInfoHandle = null;
130 std::unique_ptr<char[]> pAppId(_StringConverter::CopyToCharArrayN(appId));
131 SysTryReturn(NID_APP, pAppId, L"", E_OUT_OF_MEMORY, "pAppId is null");
133 result = pkgmgrinfo_appinfo_get_appinfo(pAppId.get(), &pAppInfoHandle);
134 SysTryReturn(NID_APP, result == 0, L"", E_PKG_NOT_INSTALLED, "pkgmgrinfo_appinfo_get_appinfo() failed. result=[%d], appId=[%s]", result, pAppId.get());
136 result = pkgmgrinfo_appinfo_get_pkgname(pAppInfoHandle, &pPackageId);
138 packageId.Append(pPackageId);
142 pkgmgrinfo_appinfo_destroy_appinfo(pAppInfoHandle);
146 SysLog(NID_APP, "appId = [%ls], packageId = [%ls]", appId.GetPointer(), packageId.GetPointer());
152 _PackageManagerImpl::AddEventListener(IPackageInstallationEventListener* pListener, int priority)
154 SysTryReturnResult(NID_APP, (priority < 3) && (priority >= 0), E_INVALID_ARG, "priority is invalid.");
156 result r = E_SUCCESS;
159 std::unique_ptr< IEnumeratorT<_PackageManagerEvent*> > pEnum(__packageEventListenerList.GetEnumeratorN());
160 SysTryReturnResult(NID_APP, pEnum, E_OUT_OF_MEMORY, "The memory is insufficient.");
162 while (pEnum->MoveNext() == E_SUCCESS)
164 _PackageManagerEvent* pEvent = null;
165 pEnum->GetCurrent(pEvent);
168 if (pEvent->__pListener == pListener)
170 SysLog(NID_APP, "The event listener already exist. listener = [0x%x]", pListener);
171 return E_OBJ_ALREADY_EXIST;
176 if (__pListeningClient == null)
178 __pListeningClient = pkgmgr_client_new(PC_LISTENING);
179 SysTryReturnResult(NID_APP, __pListeningClient != null, E_SYSTEM, "pkgmgr_client_new(PC_LISTENING) failed");
181 res = pkgmgr_client_listen_status(__pListeningClient, PackageEventHandler, this);
182 if (res < PKGMGR_R_OK)
184 pkgmgr_client_free(__pListeningClient);
185 __pListeningClient = null;
187 if (res == PKGMGR_R_EINVAL)
189 SysLog(NID_APP, "pkgmgr_client_listen_status() returns ARGV error");
190 return E_INVALID_ARG;
192 else if (res == PKGMGR_R_ECOMM)
194 SysLog(NID_APP, "pkgmgr_client_listen_status() returns COMM error");
196 else if (res == PKGMGR_R_ETIMEOUT)
198 SysLog(NID_APP, "pkgmgr_client_listen_status() returns TIME_OUT error");
200 else if (res == PKGMGR_R_ERROR)
202 SysLog(NID_APP, "pkgmgr_client_listen_status() returns Unknown error");
206 SysLog(NID_APP, "pkgmgr_client_listen_status() returns Unknown error, res = %d", res);
213 _PackageManagerEvent* pEvent = new (std::nothrow) _PackageManagerEvent();
214 SysTryReturnResult(NID_APP, pEvent != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
216 r = pEvent->Construct();
217 SysTryReturnResult(NID_APP, r == E_SUCCESS, E_SYSTEM, "pEvent->Construct() failed.");
219 pEvent->__pListener = pListener;
221 r = pEvent->AddListener(*pListener, true);
222 SysTryReturnResult(NID_APP, r == E_SUCCESS, r, "pEvent->AddListener() failed. [%s]", GetErrorMessage(r));
224 r = __packageEventListenerList.Add(pEvent);
225 SysTryReturnResult(NID_APP, !IsFailed(r), r, "[%s] Propagating.", GetErrorMessage(r));
227 SysLog(NID_APP, "Add PackageInstallationEventListener = [0x%x]", pListener);
232 _PackageManagerImpl::RemoveEventListener(IPackageInstallationEventListener* pListener)
234 std::unique_ptr< IEnumeratorT<_PackageManagerEvent*> > pEnum(__packageEventListenerList.GetEnumeratorN());
235 SysTryReturnResult(NID_APP, pEnum, E_OUT_OF_MEMORY, "The memory is insufficient.");
237 result r = E_SUCCESS;
239 while (pEnum->MoveNext() == E_SUCCESS)
241 _PackageManagerEvent* pEvent = null;
242 pEnum->GetCurrent(pEvent);
245 if (pEvent->__pListener == pListener)
247 r = __packageEventListenerList.Remove(pEvent);
248 SysTryReturnResult(NID_APP, !IsFailed(r), r, "[%s] Propagating.", GetErrorMessage(r));
252 SysLog(NID_APP, "Remove PackageInstallationEventListener = [0x%x]", pListener);
258 return E_OBJ_NOT_FOUND;
262 _PackageManagerImpl::GetPackageInfoN(const PackageId& packageId) const
264 SysTryReturn(NID_APP, packageId.IsEmpty() == false, null, E_INVALID_ARG, "[E_INVALID_ARG] packageId is empty.");
265 SysTryReturn(NID_APP, packageId.GetLength() < NATIVE_APP_MAX_APPID_LENGTH, null, E_INVALID_ARG, "packageId is invalid.(length)");
267 result r = E_SUCCESS;
268 PackageInfo* pPackageInfo = null;
270 pPackageInfo = new (std::nothrow) PackageInfo;
271 SysTryReturn(NID_APP, pPackageInfo != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pPackageInfo instance must not be null.");
273 _PackageInfoImpl* pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPackageInfo);
274 r = pPackageInfoImpl->Construct(packageId);
275 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[E_PKG_NOT_INSTALLED] packageId (%ls) is not found.", packageId.GetPointer());
285 _PackageManagerImpl::GetPackageAppInfoN(const AppId& appId) const
287 SysTryReturn(NID_APP, appId.IsEmpty() == false, null, E_INVALID_ARG, "[E_INVALID_ARG] appId is empty.");
289 result r = E_SUCCESS;
290 PackageAppInfo* pPackageAppInfo = null;
292 pPackageAppInfo = new (std::nothrow) PackageAppInfo;
293 SysTryReturn(NID_APP, pPackageAppInfo != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pPackageAppInfo instance must not be null.");
295 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo);
296 r = pPackageAppInfoImpl->Construct(appId);
297 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[E_PKG_NOT_INSTALLED] appId (%ls) is not found.", appId.GetPointer());
299 return pPackageAppInfo;
302 delete pPackageAppInfo;
307 _PackageManagerImpl::GetPackageInfoListN(void) const
309 result r = E_SUCCESS;
311 ArrayList* pList = null;
313 pList = new (std::nothrow) ArrayList();
314 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "ArrayList creation failure.");
317 res = pkgmgrinfo_pkginfo_get_list(PackageInfoEventHandler, pList);
320 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_list() is failed. result = [%d]", res);
322 pList->RemoveAll(true);
331 _PackageManagerImpl::IsPackageInstalled(const PackageId& packageId) const
333 SysTryReturn(NID_APP, packageId.IsEmpty() == false, false, E_INVALID_ARG, "packageId is empty");
336 pkgmgrinfo_pkginfo_h pPackageInfoHandle = null;
338 std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
339 SysTryReturn(NID_APP, pPackageId, false, E_OUT_OF_MEMORY, "pPackageId is null");
341 result = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &pPackageInfoHandle);
344 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_pkginfo() failed. result=[%d], packageId=[%s]", result, pPackageId.get());
348 if(pPackageInfoHandle)
350 pkgmgrinfo_pkginfo_destroy_pkginfo(pPackageInfoHandle);
353 SysLog(NID_APP, "packageId = [%ls] is installed.", packageId.GetPointer());
359 _PackageManagerImpl::InstallPackage(const PackageId& packageId, const String& packagePath, IPackageInstallationResponseListener* pListener)
361 SysTryReturnResult(NID_APP, packageId.IsEmpty() == false, E_INVALID_ARG, "packageId is empty.");
362 SysTryReturnResult(NID_APP, packagePath.IsEmpty() == false, E_INVALID_ARG, "packagePath is empty.");
363 SysTryReturnResult(NID_APP, File::IsFileExist(packagePath) == true, E_FILE_NOT_FOUND, "packagePath is not existed.");
365 String extension = File::GetFileExtension(packagePath);
366 SysTryReturnResult(NID_APP, extension.IsEmpty() == false, E_INVALID_ARG, "extension is empty.");
368 std::unique_ptr<char[]> pPackagePath(_StringConverter::CopyToCharArrayN(packagePath));
369 SysTryReturnResult(NID_APP, pPackagePath, E_OUT_OF_MEMORY, "pPackagePath is null");
371 std::unique_ptr<char[]> pExtension(_StringConverter::CopyToCharArrayN(extension));
372 SysTryReturnResult(NID_APP, pExtension, E_OUT_OF_MEMORY, "pExtension is null");
374 if ((strcasecmp(pExtension.get(), "tpk") == 0) || (strcasecmp(pExtension.get(), "wgt") == 0))
376 SysLog(NID_APP, "packageId = [%ls], packagePath = [%s], extension = [%s]", packageId.GetPointer(), pPackagePath.get(), pExtension.get());
380 SysLog(NID_APP, "invalid extension! - packagePath = [%s], extension = [%s]", pPackagePath.get(), pExtension.get());
384 result r = E_SUCCESS;
385 _PackageManagerProxy packageManagerProxy;
386 r = packageManagerProxy.Construct();
387 SysTryReturnResult(NID_APP, r == E_SUCCESS, E_SYSTEM, "packageManagerProxy.Construct() failed.");
389 r = packageManagerProxy.InstallPackage(packageId, packagePath, null);
390 SysTryReturnResult(NID_APP, r == E_SUCCESS, r, "packageManagerProxy.InstallPackage() failed.");
392 if (__pRequestClient == null)
394 __pRequestClient = pkgmgr_client_new(PC_REQUEST);
395 SysTryReturnResult(NID_APP, __pRequestClient != null, E_SYSTEM, "pkgmgr_client_new(PC_REQUEST) failed");
398 int res = pkgmgr_client_install(__pRequestClient, pExtension.get(), null, pPackagePath.get(), null, PM_QUIET, InstallationEventHandler, pListener);
400 if (res < PKGMGR_R_OK)
402 pkgmgr_client_free(__pRequestClient);
403 __pRequestClient = null;
405 if (res == PKGMGR_R_EINVAL)
407 SysLog(NID_APP, "pkgmgr_client_install() returns ARGV error");
408 return E_INVALID_ARG;
410 else if (res == PKGMGR_R_ECOMM)
412 SysLog(NID_APP, "pkgmgr_client_install() returns COMM error");
414 else if (res == PKGMGR_R_ETIMEOUT)
416 SysLog(NID_APP, "pkgmgr_client_install() returns TIME_OUT error");
418 else if (res == PKGMGR_R_ERROR)
420 SysLog(NID_APP, "pkgmgr_client_install() returns Unknown error");
424 SysLog(NID_APP, "pkgmgr_client_install() returns Unknown error, res = %d", res);
434 _PackageManagerImpl::UninstallPackage(const PackageId& packageId, IPackageUninstallationResponseListener* pListener)
436 SysTryReturnResult(NID_APP, packageId.IsEmpty() == false, E_INVALID_ARG, "packageId is empty.");
437 SysTryReturnResult(NID_APP, packageId.GetLength() < NATIVE_APP_MAX_APPID_LENGTH, E_INVALID_ARG, "The packageId is invalid.(length)");
438 SysTryReturnResult(NID_APP, IsPackageInstalled(packageId) == true, E_PKG_NOT_INSTALLED, "package is not installed.");
440 result r = E_SUCCESS;
443 pkgmgrinfo_pkginfo_h pPackageInfoHandle = null;
445 _PackageManagerProxy packageManagerProxy;
446 r = packageManagerProxy.Construct();
447 SysTryReturnResult(NID_APP, r == E_SUCCESS, E_SYSTEM, "packageManagerProxy.Construct() failed.");
449 r = packageManagerProxy.UninstallPackage(packageId, pListener);
450 SysTryReturnResult(NID_APP, r == E_SUCCESS, r, "packageManagerProxy.UninstallPackage() failed.");
452 std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
453 SysTryReturnResult(NID_APP, pPackageId != null, E_OUT_OF_MEMORY, "pPackageId is null");
455 res = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &pPackageInfoHandle);
456 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_pkginfo() failed. result=[%d], packageId=[%s]", res, pPackageId.get());
458 res = pkgmgrinfo_pkginfo_get_type(pPackageInfoHandle, &pType);
459 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_type() failed. result=[%d], packageId=[%s]", res, pPackageId.get());
461 if (__pRequestClient == null)
463 __pRequestClient = pkgmgr_client_new(PC_REQUEST);
464 SysTryReturnResult(NID_APP, __pRequestClient != null, E_SYSTEM, "pkgmgr_client_new(PC_REQUEST) failed");
467 res = pkgmgr_client_uninstall(__pRequestClient, pType, pPackageId.get(), PM_QUIET, UninstallationEventHandler, pListener);
468 SysLog(NID_APP, "pkgmgr_client_uninstall - req_id=[%d], packageId=[%s], type=[%s]", res, pPackageId.get(), pType);
470 if(pPackageInfoHandle)
472 pkgmgrinfo_pkginfo_destroy_pkginfo(pPackageInfoHandle);
475 if (res < PKGMGR_R_OK)
477 pkgmgr_client_free(__pRequestClient);
478 __pRequestClient = null;
480 if (res == PKGMGR_R_EINVAL)
482 SysLog(NID_APP, "pkgmgr_client_uninstall() returns ARGV error");
483 return E_INVALID_ARG;
485 else if (res == PKGMGR_R_ECOMM)
487 SysLog(NID_APP, "pkgmgr_client_uninstall() returns COMM error");
489 else if (res == PKGMGR_R_ETIMEOUT)
491 SysLog(NID_APP, "pkgmgr_client_uninstall() returns TIME_OUT error");
493 else if (res == PKGMGR_R_ERROR)
495 SysLog(NID_APP, "pkgmgr_client_uninstall() returns Unknown error");
499 SysLog(NID_APP, "pkgmgr_client_uninstall() returns Unknown error, res = %d", res);
509 _PackageManagerImpl::MoveToExternalStorage(const PackageId& packageId)
511 SysTryReturnResult(NID_APP, packageId.IsEmpty() == false, E_INVALID_ARG, "packageId is empty");
512 SysTryReturnResult(NID_APP, IsPackageInstalled(packageId) == true, E_PKG_NOT_INSTALLED, "package is not installed.");
516 pkgmgrinfo_installed_storage storage = PMINFO_INTERNAL_STORAGE;
517 pkgmgrinfo_pkginfo_h packageInfoHandle = null;
519 std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
520 SysTryReturnResult(NID_APP, pPackageId != null, E_OUT_OF_MEMORY, "pPackageId is null");
522 res = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &packageInfoHandle);
523 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_pkginfo() failed. result=[%d], packageId=[%s]", res, pPackageId.get());
525 res = pkgmgrinfo_pkginfo_get_type(packageInfoHandle, &pType);
526 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_type() failed. result=[%d], packageId=[%s]", res, pPackageId.get());
528 res = pkgmgrinfo_pkginfo_get_installed_storage(packageInfoHandle, &storage);
529 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_installed_storage() failed. result=[%d], packageId=[%s]", res, pPackageId.get());
531 if (storage == PMINFO_EXTERNAL_STORAGE)
533 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_installed_storage(): storage = [%d][E_INVALID_OPERATION]", storage);
534 return E_INVALID_OPERATION;
537 if (__pRequestClient == null)
539 __pRequestClient = pkgmgr_client_new(PC_REQUEST);
540 SysTryReturnResult(NID_APP, __pRequestClient != null, E_SYSTEM, "pkgmgr_client_new(PC_REQUEST) failed");
543 res = pkgmgr_client_move(__pRequestClient, pType, pPackageId.get(), PM_MOVE_TO_SDCARD, PM_QUIET);
545 if(packageInfoHandle)
547 pkgmgrinfo_pkginfo_destroy_pkginfo(packageInfoHandle);
550 if (res < PKGMGR_R_OK)
552 pkgmgr_client_free(__pRequestClient);
553 __pRequestClient = null;
555 if (res == PKGMGR_R_EINVAL)
557 SysLog(NID_APP, "pkgmgr_client_move() returns ARGV error");
558 return E_INVALID_ARG;
560 else if (res == PKGMGR_R_ERROR)
562 SysLog(NID_APP, "pkgmgr_client_move() returns Unknown error");
566 SysLog(NID_APP, "pkgmgr_client_move() returns Unknown error, res = %d", res);
576 _PackageManagerImpl::MoveToInternalStorage(const PackageId& packageId)
578 SysTryReturnResult(NID_APP, packageId.IsEmpty() == false, E_INVALID_ARG, "packageId is empty");
579 SysTryReturnResult(NID_APP, IsPackageInstalled(packageId) == true, E_PKG_NOT_INSTALLED, "package is not installed.");
583 pkgmgrinfo_installed_storage storage = PMINFO_INTERNAL_STORAGE;
584 pkgmgrinfo_pkginfo_h packageInfoHandle = null;
586 std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
587 SysTryReturnResult(NID_APP, pPackageId != null, E_OUT_OF_MEMORY, "pPackageId is null");
589 res = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &packageInfoHandle);
590 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_pkginfo() failed. result=[%d], packageId=[%s]", res, pPackageId.get());
592 res = pkgmgrinfo_pkginfo_get_type(packageInfoHandle, &pType);
593 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_type() failed. result=[%d], packageId=[%s]", res, pPackageId.get());
595 res = pkgmgrinfo_pkginfo_get_installed_storage(packageInfoHandle, &storage);
596 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_installed_storage() failed. result=[%d], packageId=[%s]", res, pPackageId.get());
598 if (storage == PMINFO_INTERNAL_STORAGE)
600 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_installed_storage(): storage = [%d][E_INVALID_OPERATION]", storage);
601 return E_INVALID_OPERATION;
604 if (__pRequestClient == null)
606 __pRequestClient = pkgmgr_client_new(PC_REQUEST);
607 SysTryReturnResult(NID_APP, __pRequestClient != null, E_SYSTEM, "pkgmgr_client_new(PC_REQUEST) failed");
610 res = pkgmgr_client_move(__pRequestClient, pType, pPackageId.get(), PM_MOVE_TO_INTERNAL, PM_QUIET);
612 if(packageInfoHandle)
614 pkgmgrinfo_pkginfo_destroy_pkginfo(packageInfoHandle);
617 if (res < PKGMGR_R_OK)
619 pkgmgr_client_free(__pRequestClient);
620 __pRequestClient = null;
622 if (res == PKGMGR_R_EINVAL)
624 SysLog(NID_APP, "pkgmgr_client_move() returns ARGV error");
625 return E_INVALID_ARG;
627 else if (res == PKGMGR_R_ERROR)
629 SysLog(NID_APP, "pkgmgr_client_move() returns Unknown error");
633 SysLog(NID_APP, "pkgmgr_client_move() returns Unknown error, res = %d", res);
643 _PackageManagerImpl::InstallationEventHandler(int reqId, const char* pType, const char* pPackageId, const char* pKey, const char* pVal, const void* pMsg, void* pData)
645 SysLog(NID_APP, "reqId[%d], Type[%s], PackageId[%s], Key[%s], Val[%s]", reqId, pType, pPackageId, pKey, pVal);
649 IPackageInstallationResponseListener* pListener = (IPackageInstallationResponseListener*) pData;
651 if (strcmp(pKey, "end") == 0)
653 if (strcmp(pVal, "ok") == 0)
655 pListener->OnPackageInstallationResponseReceived(pPackageId, PACKAGE_INSTALLATION_RESULT_SUCCESS);
656 SysLog(NID_APP, "OnPackageInstallationResponseReceived(PACKAGE_INSTALLATION_RESULT_SUCCESS)");
660 pListener->OnPackageInstallationResponseReceived(pPackageId, PACKAGE_INSTALLATION_RESULT_INVALID_PACKAGE);
661 SysLog(NID_APP, "OnPackageInstallationResponseReceived(PACKAGE_INSTALLATION_RESULT_INVALID_PACKAGE)");
666 else if (strcmp(pKey, "install_percent") == 0)
669 sscanf(pVal, "%d", &progress);
671 pListener->OnPackageInstallationInProgressResponseReceived(pPackageId, progress);
672 SysLog(NID_APP, "OnPackageInstallationInProgressResponseReceived(%s, %d)", pPackageId, progress);
680 _PackageManagerImpl::UninstallationEventHandler(int reqId, const char* pType, const char* pPackageId, const char* pKey, const char* pVal, const void* pMsg, void* pData)
682 SysLog(NID_APP, "reqId[%d], Type[%s], PackageId[%s], Key[%s], Val[%s]", reqId, pType, pPackageId, pKey, pVal);
686 if (strcmp(pKey, "end") == 0)
688 IPackageUninstallationResponseListener* pListener = (IPackageUninstallationResponseListener*) pData;
690 if (strcmp(pVal, "ok") == 0)
692 SysLog(NID_APP, "OnPackageUninstallationResponseReceived(true)");
693 pListener->OnPackageUninstallationResponseReceived(pPackageId, true);
697 SysLog(NID_APP, "OnPackageUninstallationResponseReceived(false)");
698 pListener->OnPackageUninstallationResponseReceived(pPackageId, false);
709 _PackageManagerImpl::GetPackageInfoFromFileN(const String& filePath) const
711 SysTryReturn(NID_APP, filePath.IsEmpty() == false, null, E_INVALID_ARG, "filePath is empty.");
712 SysTryReturn(NID_APP, File::IsFileExist(filePath) == true, null, E_FILE_NOT_FOUND, "package is not existed.");
714 String extension = File::GetFileExtension(filePath);
715 SysTryReturn(NID_APP, extension.IsEmpty() == false, null, E_INVALID_ARG, "extension is empty.");
717 std::unique_ptr<char[]> pPackagePath(_StringConverter::CopyToCharArrayN(filePath));
718 SysTryReturn(NID_APP, pPackagePath, null, E_OUT_OF_MEMORY, "pPackagePath is null.");
720 std::unique_ptr<char[]> pExtension(_StringConverter::CopyToCharArrayN(extension));
721 SysTryReturn(NID_APP, pExtension, null, E_OUT_OF_MEMORY, "pExtension is null.");
723 std::unique_ptr< PackageInfo > pPackageInfo(new (std::nothrow) PackageInfo);
724 SysTryReturn(NID_APP, pPackageInfo, null, E_OUT_OF_MEMORY, "pPackageInfo instance must not be null.");
726 SysLog(NID_APP, "packagePath = [%s], extension = [%s]", pPackagePath.get(), pExtension.get());
730 if (strcasecmp(pExtension.get(), "tpk") == 0)
732 _PackageParser packageParser;
734 res = packageParser.Construct(pPackageInfo.get());
735 SysTryReturn(NID_APP, res, null, E_PARSING_FAILED, "Construct() is failed. [%s]", pPackagePath.get());
737 res = packageParser.Parse(filePath);
738 SysTryReturn(NID_APP, res, null, E_PARSING_FAILED, "Parse() is failed. [%s]", pPackagePath.get());
740 else if (strcasecmp(pExtension.get(), "wgt") == 0)
742 pkgmgr_info* pPkgmgrInfo = null;
744 pPkgmgrInfo = pkgmgr_client_check_pkginfo_from_file(pPackagePath.get());
745 SysTryReturn(NID_APP, pPkgmgrInfo, null, E_PARSING_FAILED, "pkgmgr_client_check_pkginfo_from_file(%s) is failed.", pPackagePath.get());
747 _package_manager_pkg_detail_info_t* pPkgInfo = (_package_manager_pkg_detail_info_t*) pPkgmgrInfo;
748 _PackageInfoImpl* pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPackageInfo.get());
750 SysLog(NID_APP, "id(%s), version(%s), label(%s), description(%s), author(%s)", pPkgInfo->pkgid, pPkgInfo->version, pPkgInfo->label, pPkgInfo->pkg_description, pPkgInfo->author);
752 pPackageInfoImpl->SetType(PACKAGE_TYPE_WGT);
753 pPackageInfoImpl->SetId(pPkgInfo->pkgid);
754 pPackageInfoImpl->SetVersion(pPkgInfo->version);
755 pPackageInfoImpl->SetDisplayName(pPkgInfo->label);
756 pPackageInfoImpl->SetDescription(pPkgInfo->pkg_description);
757 pPackageInfoImpl->SetAuthor(pPkgInfo->author);
761 pkgmgr_client_free_pkginfo(pPkgmgrInfo);
765 SysTryReturn(NID_APP, false, null, E_UNSUPPORTED_FORMAT, "invalid extension! - packagePath = [%s], extension = [%s]", pPackagePath.get(), pExtension.get());
768 return pPackageInfo.release();
772 _PackageManagerImpl::GetPackageInfoListN(const IMap& packageFilterMap) const
774 SysTryReturn(NID_APP, packageFilterMap.GetCount() > 0, null, E_INVALID_ARG, "packageFilterMap.GetCount() is invalid.");
780 _PackageManagerImpl::GetPackageAppInfoListN(const IMap& packageAppFilterMap) const
782 SysTryReturn(NID_APP, packageAppFilterMap.GetCount() > 0, null, E_INVALID_ARG, "packageAppFilterMap.GetCount() is invalid.");
784 std::unique_ptr<IMapEnumerator> pEnum(packageAppFilterMap.GetMapEnumeratorN());
785 SysTryReturn(NID_APP, pEnum, null, E_INVALID_ARG, "GetMapEnumeratorN() is failed.");
788 ArrayList* pList = null;
789 pkgmgrinfo_appinfo_filter_h handle = null;
791 res = pkgmgrinfo_appinfo_filter_create(&handle);
792 SysTryReturn(NID_APP, res == PMINFO_R_OK, null, E_SYSTEM, "pkgmgrinfo_appinfo_filter_create() is failed. [%d]", res);
794 while(pEnum->MoveNext() == E_SUCCESS)
796 String* pKey = static_cast<String*>(pEnum->GetKey());
797 SysTryCatch(NID_APP, pKey, , E_INVALID_ARG, "GetKey() is failed.");
799 if ((*pKey) == PACKAGE_APP_FILTER_MENUICON_VISIBLE)
801 Boolean* pVal = static_cast<Boolean*>(pEnum->GetValue());
802 SysTryCatch(NID_APP, pVal, , E_INVALID_ARG, "GetValue() is failed.");
804 bool nodisplay = !(pVal->ToBool());
805 SysLog(NID_APP, "Key[%ls], Value[%d]", pKey->GetPointer(), nodisplay);
807 res = pkgmgrinfo_appinfo_filter_add_bool(handle, PMINFO_APPINFO_PROP_APP_NODISPLAY, nodisplay);
808 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_pkginfo_filter_add_bool(NODISPLAY, %d) is failed. [%d]", nodisplay, res);
810 else if ((*pKey) == PACKAGE_APP_FILTER_CATEGORY)
812 String* pVal = static_cast<String*>(pEnum->GetValue());
813 SysTryCatch(NID_APP, pVal, , E_INVALID_ARG, "GetValue() is failed.");
815 SysLog(NID_APP, "Key[%ls], Value[%ls]", pKey->GetPointer(), pVal->GetPointer());
817 std::unique_ptr<char[]> pValue(_StringConverter::CopyToCharArrayN(*pVal));
818 SysTryCatch(NID_APP, pValue, , E_OUT_OF_MEMORY, "pValue is null.");
820 res = pkgmgrinfo_appinfo_filter_add_string(handle, PMINFO_APPINFO_PROP_APP_CATEGORY, pValue.get());
821 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_appinfo_filter_add_string(CATEGORY, %s) is failed. [%d]", pValue.get(), res);
825 SysTryCatch(NID_APP, false, , E_INVALID_ARG, "Invalid key(%ls)", pKey->GetPointer());
829 pList = new (std::nothrow) ArrayList();
830 SysTryCatch(NID_APP, pList, , E_OUT_OF_MEMORY, "ArrayList creation failure.");
833 res = pkgmgrinfo_appinfo_filter_foreach_appinfo(handle, PackageAppInfoHandler, pList);
836 SysLog(NID_APP, "pkgmgrinfo_appinfo_filter_foreach_appinfo() is failed. result = [%d]", res);
838 pList->RemoveAll(true);
845 pkgmgrinfo_appinfo_filter_destroy(handle);
852 _PackageManagerImpl::GetPackageAppInfoListN(const IMap& packageFilterMap, const IMap& packageAppFilterMap) const
854 SysTryReturn(NID_APP, packageFilterMap.GetCount() > 0, null, E_INVALID_ARG, "packageFilterMap.GetCount() is invalid.");
855 SysTryReturn(NID_APP, packageAppFilterMap.GetCount() > 0, null, E_INVALID_ARG, "packageAppFilterMap.GetCount() is invalid.");
861 _PackageManagerImpl::PackageAppInfoHandler(const pkgmgrinfo_appinfo_h handle, void* pUserData)
863 SysTryReturn(NID_APP, handle, 0, E_SYSTEM, "handle must not be null.");
864 SysTryReturn(NID_APP, pUserData, 0, E_SYSTEM, "pUserData must not be null.");
866 result r = E_SUCCESS;
867 int res = PMINFO_R_OK;
869 ArrayList* pList = (ArrayList*)pUserData;
871 res = pkgmgrinfo_appinfo_get_appid(handle, &pAppId);
872 SysTryReturn(NID_APP, res == PMINFO_R_OK, 0, E_SYSTEM, "pkgmgrinfo_appinfo_get_appid is failed. [%d]", res);
874 std::unique_ptr<PackageAppInfo> pPackageAppInfo(new (std::nothrow) PackageAppInfo);
875 SysTryReturn(NID_APP, pPackageAppInfo, 0, E_OUT_OF_MEMORY, "pPackageAppInfo instance must not be null.");
877 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo.get());
878 r = pPackageAppInfoImpl->Construct(pAppId);
879 SysTryReturn(NID_APP, r == E_SUCCESS, 0, E_SYSTEM, "Construct(%s) is failed.", pAppId);
881 pList->Add(*pPackageAppInfo.release());
887 _PackageManagerImpl::GetInstance(void)
889 return PackageManager::GetInstance()->__pPackageManagerImpl;
893 _PackageManagerImpl::Construct(void)
897 result r = __installationList.Construct();
898 SysTryReturnResult(NID_APP, r == E_SUCCESS, r, "The memory is insufficient.");
903 _PackageManagerImpl::_PackageManagerImpl(void)
904 :__pRequestClient(null),
905 __pListeningClient(null),
908 CreatePackageTables();
911 _PackageManagerImpl::~_PackageManagerImpl(void)
916 _PackageManagerImpl::SendPackageEvent(PackageType type, const PackageId& packageId, const char* pEventKey, const char* pEventValue)
918 result r = E_SUCCESS;
921 if (strcmp(pEventKey, "start") == 0)
923 if ((strcmp(pEventValue, "install") == 0) || (strcmp(pEventValue, "uninstall") == 0))
925 String* pAppId = new (std::nothrow) String(packageId);
926 SysTryReturnVoidResult(NID_APP, pAppId != null, E_OUT_OF_MEMORY, "pAppId instance must not be null.");
928 String* pOperation = new (std::nothrow) String(pEventValue);
929 SysTryReturnVoidResult(NID_APP, pOperation != null, E_OUT_OF_MEMORY, "pOperation instance must not be null.");
931 r = __installationList.Add(*pAppId, *pOperation);
936 SysLog(NID_APP, "Failed to add installation condition.");
937 SetLastResult(E_SYSTEM);
942 else if (strcmp(pEventKey, "end") == 0)
944 String* pOperation = static_cast <String*>(__installationList.GetValue(packageId));
947 if (pOperation->Equals("uninstall", true) == true)
952 r = __installationList.Remove(packageId, true);
955 SysLogException(NID_APP, r, "[%s] Remove Element [%ls] is failed from installing list.", GetErrorMessage(r), packageId.GetPointer());
960 std::unique_ptr< IEnumeratorT<_PackageManagerEvent*> > pEnum(__packageEventListenerList.GetEnumeratorN());
961 SysTryReturnVoidResult(NID_APP, pEnum, E_OUT_OF_MEMORY, "The memory is insufficient.");
963 while (pEnum->MoveNext() == E_SUCCESS)
965 _PackageManagerEvent* pEvent = null;
966 pEnum->GetCurrent(pEvent);
969 _PackageManagerEventArg* pEventArg= new (std::nothrow) _PackageManagerEventArg();
970 SysTryReturnVoidResult(NID_APP, pEventArg, E_OUT_OF_MEMORY, "The memory is insufficient.");
972 String eventKey(pEventKey);
973 String eventValue(pEventValue);
975 pEventArg->__packageId = packageId;
976 pEventArg->__eventKey = eventKey;
977 pEventArg->__eventValue = eventValue;
978 pEventArg->__install = install;
980 r = pEvent->Fire(*pEventArg);
983 SysLog(NID_APP, "pEvent->Fire(*pEventArg) failed. [%s]", GetErrorMessage(r));
986 SysLog(NID_APP, "PackageId = [%ls], Key = [%ls], Value = [%ls], install = [%d]", pEventArg->__packageId.GetPointer(), pEventArg->__eventKey.GetPointer(), pEventArg->__eventValue.GetPointer(), pEventArg->__install);
990 SysLog(NID_APP, "pEvent is null.");
996 _PackageManagerImpl::GetPackageInfoN(PackageType packageType, const String& packageName) const
998 SysTryReturn(NID_APP, packageName.IsEmpty() == false, null, E_INVALID_ARG, "[E_INVALID_ARG] packageName is empty.");
1000 result r = E_SUCCESS;
1002 DbStatement* pStmt = null;
1003 DbEnumerator* pEnum = null;
1005 PackageInfo *pPackageInfo = null;
1007 query.Format( 1024, L"SELECT PkgInfo.*, AppInfo.APP_MAINMENU_ICON FROM AppInfo, PkgInfo WHERE AppInfo.ID = PkgInfo.UNIQUE_ID and AppInfo.PACKAGE_NAME = '%ls'", packageName.GetPointer());
1009 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1010 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1012 pStmt = CreateStatementN(db, query);
1014 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1016 pEnum = ExecuteStatementN(db, pStmt);
1019 if (pEnum->MoveNext() == E_SUCCESS)
1021 pPackageInfo = new (std::nothrow) PackageInfo;
1022 SysTryReturn(NID_APP, pPackageInfo != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pPackageInfo instance must not be null.");
1024 _PackageInfoImpl* pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPackageInfo);
1030 String appApiVersion;
1033 String appDescription;
1037 int appStorageType = 0;
1038 DateTime appInstallationTime;
1041 pEnum->GetStringAt(1, id);
1042 pEnum->GetStringAt(3, appVersion);
1043 pEnum->GetStringAt(4, appType);
1044 pEnum->GetStringAt(5, appMimeType);
1045 pEnum->GetStringAt(6, appApiVersion);
1046 pEnum->GetStringAt(7, appName);
1047 pEnum->GetStringAt(8, appVendor);
1048 pEnum->GetStringAt(9, appDescription);
1049 pEnum->GetStringAt(10, appUrl);
1050 pEnum->GetStringAt(11, appCid);
1051 pEnum->GetStringAt(16, appRootPath);
1052 pEnum->GetIntAt(17, appStorageType);
1053 pEnum->GetDateTimeAt(18, appInstallationTime);
1054 pEnum->GetStringAt(21, appIconPath);
1056 pPackageInfoImpl->SetAppId(id);
1057 pPackageInfoImpl->SetAppVersion(appVersion);
1058 pPackageInfoImpl->SetAppMimeType(appMimeType);
1059 pPackageInfoImpl->SetAppApiVersion(appApiVersion);
1060 pPackageInfoImpl->SetAppName(appName);
1061 pPackageInfoImpl->SetAppVendor(appVendor);
1062 pPackageInfoImpl->SetAppDescription(appDescription);
1063 pPackageInfoImpl->SetAppUrl(appUrl);
1064 pPackageInfoImpl->SetAppCid(appCid);
1065 pPackageInfoImpl->SetAppRootPath(appRootPath);
1066 pPackageInfoImpl->SetAppStorageType(appStorageType);
1067 pPackageInfoImpl->SetAppInstallationTime(appInstallationTime);
1068 pPackageInfoImpl->SetAppIconPath(appIconPath);
1075 r = E_OBJ_NOT_FOUND;
1080 return pPackageInfo;
1084 _PackageManagerImpl::PackageInfoEventHandler(const pkgmgrinfo_pkginfo_h handle, void* pUserData)
1086 SysTryReturn(NID_APP, handle != null, 0, E_SYSTEM, "[E_SYSTEM] handle must not be null.");
1089 char* pPackage = null;
1090 ArrayList* pList = (ArrayList*)pUserData;
1092 PackageInfo *pPackageInfo = new (std::nothrow) PackageInfo;
1093 SysTryReturn(NID_APP, pPackageInfo != null, 0, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pPackageInfo instance must not be null.");
1095 _PackageInfoImpl* pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPackageInfo);
1097 result = pkgmgrinfo_pkginfo_get_pkgname(handle, &pPackage);
1100 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_pkgname(): package = [%s]", pPackage);
1104 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_pkgname() is failed. result = [%d]", result);
1107 pPackageInfoImpl->Construct(pPackage);
1108 pList->Add(*pPackageInfo);
1114 _PackageManagerImpl::GetFilteredAppIdListN(const String& feature, const String& value) const
1116 result r = E_SUCCESS;
1118 DbStatement* pStmt = null;
1119 DbEnumerator* pEnum = null;
1121 ArrayList* pList = null;
1123 query.Format(1024, L"SELECT AppInfo.PACKAGE_NAME FROM AppInfo, AppFeature WHERE AppFeature.ID = AppInfo.UNIQUE_ID and AppFeature.NAME = '%ls' and AppFeature.VALUE = '%ls' COLLATE NOCASE", feature.GetPointer(), value.GetPointer());
1125 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1126 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1128 pStmt = CreateStatementN(db, query);
1129 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1131 pEnum = ExecuteStatementN(db, pStmt);
1135 pList = new (std::nothrow) ArrayList();
1136 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "ArrayList creation failure.");
1139 while (pEnum->MoveNext() == E_SUCCESS)
1141 String* pPackageName = new (std::nothrow) String;
1142 SysTryReturn(NID_APP, pPackageName != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pPackageName instance must not be null.");
1144 pEnum->GetStringAt(0, *pPackageName);
1146 pList->Add(*pPackageName);
1154 r = E_OBJ_NOT_FOUND;
1163 _PackageManagerImpl::GetDataControlInfoN(const String& providerId, const String& type) const
1165 result r = E_SUCCESS;
1167 DbStatement* pStmt = null;
1168 DbEnumerator* pEnum = null;
1170 ArrayList* pList = null;
1172 query.Format(1024, L"SELECT AppInfo.PACKAGE_NAME, DataControl.ACCESS FROM AppInfo, DataControl WHERE DataControl.ID = AppInfo.UNIQUE_ID and DataControl.PROVIDER_ID = '%ls' and DataControl.TYPE = '%ls' COLLATE NOCASE", providerId.GetPointer(), type.GetPointer());
1174 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1175 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1177 pStmt = CreateStatementN(db, query);
1178 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1180 pEnum = ExecuteStatementN(db, pStmt);
1184 pList = new (std::nothrow) ArrayList();
1185 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "ArrayList creation failure.");
1188 while (pEnum->MoveNext() == E_SUCCESS)
1190 String* pPackageName = new (std::nothrow) String;
1191 SysTryReturn(NID_APP, pPackageName != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pPackageName instance must not be null.");
1193 String* pAccess = new (std::nothrow) String;
1194 SysTryReturn(NID_APP, pAccess != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pAccess instance must not be null.");
1196 pEnum->GetStringAt(0, *pPackageName);
1197 pList->Add(*pPackageName);
1199 pEnum->GetStringAt(1, *pAccess);
1200 pList->Add(*pAccess);
1208 r = E_OBJ_NOT_FOUND;
1217 _PackageManagerImpl::GetUiThemeListN(const PackageId& packageId) const
1219 result r = E_SUCCESS;
1221 DbStatement* pStmt = null;
1222 DbEnumerator* pEnum = null;
1224 HashMap* pList = null;
1226 query.Format(1024, L"SELECT AppFeature.NAME, AppFeature.VALUE FROM PkgInfo, AppInfo, AppFeature WHERE (AppFeature.ID = AppInfo.UNIQUE_ID and AppInfo.ID = PkgInfo.UNIQUE_ID and PkgInfo.PKG_ID = '%ls') and (AppFeature.NAME = 'SystemTheme' or AppFeature.NAME = 'UserDefinedTheme')"
1227 , packageId.GetPointer());
1229 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1230 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1232 pStmt = CreateStatementN(db, query);
1233 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1235 pEnum = ExecuteStatementN(db, pStmt);
1239 pList = new (std::nothrow) HashMap();
1240 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "HashMap creation failure.");
1243 while (pEnum->MoveNext() == E_SUCCESS)
1245 String* pName = new (std::nothrow) String;
1246 SysTryCatch(NID_APP, pName != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pName instance must not be null.");
1248 String* pValue = new (std::nothrow) String;
1249 SysTryCatch(NID_APP, pValue != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pValue instance must not be null.");
1251 pEnum->GetStringAt(0, *pName);
1252 pEnum->GetStringAt(1, *pValue);
1254 pList->Add(*pName, *pValue);
1262 r = E_OBJ_NOT_FOUND;
1271 _PackageManagerImpl::IsAppInstalled(const AppId& appId)
1273 if (appId == _AppInfo::GetPackageId())
1279 pkgmgrinfo_pkginfo_h pPackageInfoHandle = null;
1281 std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(appId));
1282 SysTryReturn(NID_APP, pPackageId, false, E_OUT_OF_MEMORY, "pPackageId is null");
1284 result = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &pPackageInfoHandle);
1285 SysTryReturn(NID_APP, result == 0, false, E_APP_NOT_INSTALLED, "pkgmgrinfo_pkginfo_get_pkginfo() failed. result=[%d], packageId=[%s]", result, pPackageId.get());
1287 if(pPackageInfoHandle)
1289 pkgmgrinfo_pkginfo_destroy_pkginfo(pPackageInfoHandle);
1296 _PackageManagerImpl::PackageEventHandler(int req_id, const char* pkg_type, const char* pkg_name,
1297 const char* key, const char* val, const void* pmsg, void* data)
1299 SysLog(NID_APP, "PackageEventHandler - req_id: %d, pkg_type: %s, pkg_name: %s, key: %s, val: %s", req_id, pkg_type,
1300 pkg_name, key, val);
1302 PackageType type = PACKAGE_TYPE_TPK;
1303 PackageId packageId(pkg_name);
1305 if (strcmp(pkg_type, "tpk") == 0)
1307 type = PACKAGE_TYPE_TPK;
1309 else if (strcmp(pkg_type, "wgt") == 0)
1311 type = PACKAGE_TYPE_WGT;
1315 SysLog(NID_APP, "Invalid type - pkg_type: %s", pkg_type);
1319 _PackageManagerImpl* pThis = _PackageManagerImpl::GetInstance();
1320 pThis->SendPackageEvent(type, packageId, key, val);
1326 _PackageManagerImpl::GetAppIdOfDataControlN(const String& providerId)
1328 result r = E_SUCCESS;
1330 DbStatement* pStmt = null;
1331 DbEnumerator* pEnum = null;
1333 String* pAppId = null;
1335 query.Format(1024, L"SELECT PkgInfo.PKG_ID FROM PkgInfo, AppInfo, DataControl WHERE DataControl.PROVIDER_ID = '%ls' and DataControl.ID = AppInfo.UNIQUE_ID and AppInfo.ID = PkgInfo.UNIQUE_ID",
1336 providerId.GetPointer());
1338 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1339 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1341 pStmt = CreateStatementN(db, query);
1342 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1344 pEnum = ExecuteStatementN(db, pStmt);
1348 if (pEnum->MoveNext() == E_SUCCESS)
1350 pAppId = new (std::nothrow) String;
1351 SysTryReturn(NID_APP, pAppId != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
1353 pEnum->GetStringAt(0, *pAppId);
1365 _PackageManagerImpl::CreatePackageTables(void)
1367 result r = E_SUCCESS;
1371 if (File::IsFileExist(PACKAGE_DATABASE_FILE_NAME) == true)
1373 SysLog(NID_APP, ".app-package.db is already existed!");
1377 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, true);
1378 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.Construct is failed. [%s]", GetErrorMessage(r));
1381 createQuery.Format(1024, L"CREATE TABLE IF NOT EXISTS PkgInfo"
1382 "( UNIQUE_ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
1387 "PKG_MIMETYPE TEXT,"
1388 "PKG_APIVERSION TEXT,"
1391 "PKG_DESCRIPTION TEXT,"
1394 "PKG_READONLY_SIZE INTEGER,"
1395 "PKG_DATA_SIZE INTEGER,"
1396 "PKG_PARENT_ID TEXT,"
1397 "PKG_ATTRIBUTE INTEGER,"
1398 "PKG_ROOTPATH TEXT,"
1399 "PKG_STORAGE_TYPE INTEGER,"
1400 "PKG_INSTALLATION_DATE TEXT,"
1401 "PKG_STATE INTEGER,"
1402 "PKG_INITIATOR INTEGER )");
1403 r = db.ExecuteSql(createQuery, true);
1404 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1405 createQuery.Clear();
1408 createQuery.Format(1024, L"CREATE TABLE IF NOT EXISTS PkgPrivileges"
1411 "HMAC_PPRIVILEGES TEXT,"
1412 "CERTIFICATE_TYPE INTEGER,"
1413 "STR_PRIVILEGES TEXT )");
1414 r = db.ExecuteSql(createQuery, true);
1415 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1416 createQuery.Clear();
1419 createQuery.Format(1024, L"CREATE TABLE IF NOT EXISTS PkgIntegrity"
1422 "HMAC_APPSECRET TEXT,"
1424 "SLOT_NUM INTEGER )");
1425 r = db.ExecuteSql(createQuery, true);
1426 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1427 createQuery.Clear();
1430 createQuery.Format(1024, L"CREATE TABLE IF NOT EXISTS AppInfo"
1431 "( UNIQUE_ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
1436 "APP_MAINMENU_ICON TEXT,"
1437 "APP_SETTING_ICON TEXT,"
1438 "APP_TICKER_ICON TEXT,"
1439 "APP_QUICKPANEL_ICON TEXT,"
1440 "APP_LAUNCHIMAGE_ICON TEXT,"
1441 "APP_FEATURE INTEGER,"
1442 "PACKAGE_NAME TEXT )");
1443 r = db.ExecuteSql(createQuery, true);
1444 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1445 createQuery.Clear();
1448 createQuery.Format(1024, L"CREATE TABLE IF NOT EXISTS Notification"
1452 r = db.ExecuteSql(createQuery, true);
1453 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1454 createQuery.Clear();
1457 createQuery.Format(1024, L"CREATE TABLE IF NOT EXISTS AppFeature"
1461 r = db.ExecuteSql(createQuery, true);
1462 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1463 createQuery.Clear();
1466 createQuery.Format(1024, L"CREATE TABLE IF NOT EXISTS LaunchCondition"
1470 r = db.ExecuteSql(createQuery, true);
1471 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1472 createQuery.Clear();
1475 createQuery.Format(1024, L"CREATE TABLE IF NOT EXISTS DataControl"
1480 r = db.ExecuteSql(createQuery, true);
1481 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1482 createQuery.Clear();
1485 createQuery.Format(1024, L"CREATE TABLE IF NOT EXISTS Capability"
1486 "( ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
1487 "OPERATION_ID TEXT )");
1488 r = db.ExecuteSql(createQuery, true);
1489 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1490 createQuery.Clear();
1492 // ResolutionUriScheme
1493 createQuery.Format(1024, L"CREATE TABLE IF NOT EXISTS ResolutionUriScheme"
1494 "( ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
1495 "URI_SCHEME TEXT )");
1496 r = db.ExecuteSql(createQuery, true);
1497 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1498 createQuery.Clear();
1500 // ResolutionMimeType
1501 createQuery.Format(1024, L"CREATE TABLE IF NOT EXISTS ResolutionMimeType"
1502 "( ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
1503 "MIME_TYPE TEXT )");
1504 r = db.ExecuteSql(createQuery, true);
1505 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1506 createQuery.Clear();
1509 createQuery.Format(1024, L"CREATE TABLE IF NOT EXISTS AppControl"
1510 "( ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
1513 r = db.ExecuteSql(createQuery, true);
1514 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1515 createQuery.Clear();
1518 createQuery.Format(1024, L"CREATE TABLE IF NOT EXISTS AppInfoLookup"
1519 "( AppInfoID INTEGER,"
1520 "CapabilityID INTEGER,"
1521 "ResolutionUriSchemeID INTEGER,"
1522 "ResolutionMimeTypeID INTEGER,"
1523 "AppControlID INTEGER )");
1524 r = db.ExecuteSql(createQuery, true);
1525 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1526 createQuery.Clear();
1532 _PackageManagerImpl::RegisterPackageInfo(_PackageInfoImpl& pkgInfoImpl)
1534 result r = E_SUCCESS;
1536 DbStatement* pStmt = null;
1537 DbEnumerator* pEnum = null;
1540 String hmacPrivileges;
1541 PackageInfo packageInfo;
1544 SysLog(NID_APP, "_PackageManagerImpl::RegisterPackageInfo()");
1547 1024, L"INSERT INTO PkgInfo "
1548 "(PKG_ID, PKG_SECRET, PKG_VERSION, PKG_TYPE, PKG_MIMETYPE, PKG_APIVERSION, PKG_NAME, PKG_VENDOR, PKG_DESCRIPTION, PKG_URL, PKG_CID, PKG_READONLY_SIZE, PKG_DATA_SIZE, PKG_PARENT_ID,"
1549 " PKG_ATTRIBUTE, PKG_ROOTPATH, PKG_STORAGE_TYPE, PKG_INSTALLATION_DATE, PKG_STATE, PKG_INITIATOR) "
1550 "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
1552 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, false);
1553 //SysTryCatch(NID_APP, r == E_SUCCESS, r, r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1555 pStmt = CreateStatementN(db, query);
1556 //SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1558 PackageId packageId = pkgInfoImpl.GetAppId();
1559 String appVersion = pkgInfoImpl.GetAppVersion();
1560 String type = pkgInfoImpl.GetAppType();
1561 String appMimeType = pkgInfoImpl.GetAppMimeType();
1562 String appApiVersion = pkgInfoImpl.GetAppApiVersion();
1563 String appName = pkgInfoImpl.GetAppName();
1564 String appVendor = pkgInfoImpl.GetAppVendor();
1565 String appDescription = pkgInfoImpl.GetAppDescription();
1566 String appUrl = pkgInfoImpl.GetAppUrl();
1567 String appCid = pkgInfoImpl.GetAppCid();
1569 pkgInfoImpl.GetPrivilegesValue(privileges, hmacPrivileges);
1570 String appRootPath = pkgInfoImpl.GetAppRootPath();
1571 int appStorageType = pkgInfoImpl.GetAppStorageType();
1572 int certType = pkgInfoImpl.GetCertType();
1573 ArrayList* pAppInfoImplList = pkgInfoImpl.GetAppInfoList();
1576 r = SystemTime::GetCurrentTime(time);
1577 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "An error occurs while getting a current time.");
1579 if (!packageId.IsEmpty())
1581 r = pStmt->BindString(0, packageId);
1582 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1585 if (!appVersion.IsEmpty())
1587 r = pStmt->BindString(2, appVersion);
1588 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1591 if (!type.IsEmpty())
1593 r = pStmt->BindString(3, type);
1594 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1597 if (!appMimeType.IsEmpty())
1599 r = pStmt->BindString(4, appMimeType);
1600 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1603 if (!appApiVersion.IsEmpty())
1605 r = pStmt->BindString(5, appApiVersion);
1606 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1609 if (!appName.IsEmpty())
1611 r = pStmt->BindString(6, appName);
1612 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1615 if (!appVendor.IsEmpty())
1617 r = pStmt->BindString(7, appVendor);
1618 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1621 if (!appDescription.IsEmpty())
1623 r = pStmt->BindString(8, appDescription);
1624 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1627 if (!appUrl.IsEmpty())
1629 r = pStmt->BindString(9, appUrl);
1630 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1633 if (!appCid.IsEmpty())
1635 r = pStmt->BindString(10, appCid);
1636 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1639 if (!appRootPath.IsEmpty())
1641 r = pStmt->BindString(15, appRootPath);
1642 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1645 if (appStorageType != 0)
1647 r = pStmt->BindInt(16, appStorageType);
1648 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1651 r = pStmt->BindDateTime(17, time);
1652 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1654 pEnum = ExecuteStatementN(db, pStmt);
1656 r = GetLastResult();
1658 uniqueId = pkgInfoImpl.GetUniqueId();
1660 SysLog(NID_APP, "_PackageManagerImpl::RegisterPackageInfo()-GetUniqueId(%d)", uniqueId);
1665 RegisterAppInfoList(uniqueId, pAppInfoImplList);
1668 RegisterPrivileges(uniqueId, privileges, hmacPrivileges, certType);
1678 _PackageManagerImpl::UnregisterPackageInfo(const PackageId& packageId)
1680 SysLog(NID_APP, "packageId = [%ls]", packageId.GetPointer());
1682 result r = E_SUCCESS;
1686 PackageInfo* pPkgInfo;
1687 _PackageInfoImpl* pPackageInfoImpl = null;
1688 ArrayList* pList = null;
1690 pPkgInfo = GetPackageInfoN(packageId);
1691 SysTryReturn(NID_APP, pPkgInfo != null, r, r, "UnregisterPackageInfo: GetUniqueId() is invalid. [%d]", id);
1693 pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPkgInfo);
1694 pPackageInfoImpl->SetAppId(packageId);
1695 id = pPackageInfoImpl->GetUniqueId();
1696 SysTryReturn(NID_APP, id > 0, r, r, "UnregisterPackageInfo: GetUniqueId() is invalid. [%d]", id);
1698 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, false);
1699 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "UnregisterPackageInfo: db.Construct is failed. [%s]", GetErrorMessage(r));
1702 pList = pPackageInfoImpl->GetAppInfoListN();
1705 for (int i = 0; i < pList->GetCount(); i++)
1707 _PackageAppInfoImpl* pAppInfoImpl = dynamic_cast <_PackageAppInfoImpl*>(pList->GetAt(i));
1709 if (pAppInfoImpl != null)
1712 uniqueId = pAppInfoImpl->GetUniqueId();
1714 query.Format(1024, L"DELETE FROM AppInfoLookup WHERE AppInfoID = %d", uniqueId);
1715 r = db.ExecuteSql(query, true);
1716 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "UnregisterPackageInfo: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1724 query.Format(1024, L"DELETE FROM PkgInfo WHERE PKG_ID = '%ls'", packageId.GetPointer());
1725 r = db.ExecuteSql(query, true);
1726 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "UnregisterPackageInfo: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1730 query.Format(1024, L"DELETE FROM AppInfo WHERE ID = %d", id);
1731 r = db.ExecuteSql(query, true);
1732 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "UnregisterPackageInfo: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1736 query.Format(1024, L"DELETE FROM PkgPrivileges WHERE ID = %d", id);
1737 r = db.ExecuteSql(query, true);
1738 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "UnregisterPackageInfo: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1742 query.Format(1024, L"DELETE FROM DataControl WHERE ID = %d", id);
1743 r = db.ExecuteSql(query, true);
1744 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "UnregisterPackageInfo: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1752 _PackageManagerImpl::GetPackageInfoN(const String& providerId, const String& operationId) const
1754 result r = E_SUCCESS;
1755 PackageInfo* pPkgInfo = null;
1757 DbStatement* pStmt = null;
1758 DbEnumerator* pEnum = null;
1761 query.Format(1024, L"SELECT PkgInfo.PKG_ID FROM PkgInfo, AppInfo, AppInfoLookup, AppControl, Capability "
1762 "WHERE AppControl.PROVIDER_ID ='%ls' and Capability.OPERATION_ID ='%ls' and AppControl.ID = AppInfoLookup.AppControlID "
1763 "and Capability.ID = AppInfoLookup.CapabilityID and AppInfoLookup.AppInfoID = AppInfo.UNIQUE_ID and AppInfo.ID = PkgInfo.UNIQUE_ID "
1764 "GROUP BY AppInfoID"
1765 , providerId.GetPointer(), operationId.GetPointer());
1767 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1768 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1770 pStmt = CreateStatementN(db, query);
1771 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1773 pEnum = ExecuteStatementN(db, pStmt);
1776 if (pEnum->MoveNext() == E_SUCCESS)
1778 PackageId packageId;
1779 pEnum->GetStringAt(0, packageId);
1781 pPkgInfo = GetPackageInfoN(packageId);
1788 r = E_OBJ_NOT_FOUND;
1797 _PackageManagerImpl::GetAppInfo(int uniqueId, _PackageAppInfoImpl& appInfo) const
1799 result r = E_SUCCESS;
1801 DbStatement* pStmt = null;
1802 DbEnumerator* pEnum = null;
1805 query.Format(1024, L"SELECT * FROM AppInfo WHERE UNIQUE_ID = %d", uniqueId);
1807 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1808 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1810 pStmt = CreateStatementN(db, query);
1811 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1813 pEnum = ExecuteStatementN(db, pStmt);
1816 if (pEnum->MoveNext() == E_SUCCESS)
1822 String mainmenuIcon;
1825 String quickpanelIcon;
1826 String launchImageIcon;
1830 pEnum->GetIntAt(0, uniqueId);
1831 pEnum->GetIntAt(1, pkgId);
1832 pEnum->GetStringAt(2, name);
1833 pEnum->GetStringAt(3, defaultapp);
1834 pEnum->GetStringAt(4, mainmenuIcon);
1835 pEnum->GetStringAt(5, settingIcon);
1836 pEnum->GetStringAt(7, quickpanelIcon);
1837 pEnum->GetIntAt(9, appFeature);
1838 pEnum->GetStringAt(10, packageName);
1840 appInfo.SetUniqueId(uniqueId);
1841 appInfo.SetPkgId(pkgId);
1842 appInfo.SetName(name);
1843 appInfo.SetDefault(defaultapp);
1844 appInfo.SetMainmenuIcon(mainmenuIcon);
1845 appInfo.SetSettingIcon(settingIcon);
1846 appInfo.SetQuickpanelIcon(quickpanelIcon);
1847 appInfo.SetAppFeature(appFeature);
1848 appInfo.SetPackageName(packageName);
1855 r = E_OBJ_NOT_FOUND;
1864 _PackageManagerImpl::GetPackageAppInfoImplListN(const String& packageId) const
1866 result r = E_SUCCESS;
1868 DbStatement* pStmt = null;
1869 DbEnumerator* pEnum = null;
1872 PackageInfo* pPkgInfo = null;
1873 _PackageInfoImpl* pPackageInfoImpl = null;
1874 ArrayList* pList = null;
1876 pPkgInfo = GetPackageInfoN(packageId);
1877 SysTryCatch(NID_APP, pPkgInfo != null, , r, "[%s] GetPackageInfoN() is failed", GetErrorMessage(r));
1879 pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPkgInfo);
1880 query.Format(1024, L"SELECT * FROM AppInfo WHERE ID = %d", pPackageInfoImpl->GetUniqueId());
1882 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1883 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1885 pStmt = CreateStatementN(db, query);
1886 SysTryCatch(NID_APP, pStmt != null, GetLastResult(),
1887 GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1889 pEnum = ExecuteStatementN(db, pStmt);
1893 pList = new (std::nothrow) ArrayList;
1894 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Container allocation failure.");
1898 while (pEnum->MoveNext() == E_SUCCESS)
1900 _PackageAppInfoImpl* pPackageAppInfoImpl = new (std::nothrow) _PackageAppInfoImpl;
1901 SysTryReturn(NID_APP, pPackageAppInfoImpl != null, null, E_OUT_OF_MEMORY, "pPackageAppInfoImpl instance must not be null.");
1907 String mainmenuIcon;
1909 String quickpanelIcon;
1913 pEnum->GetIntAt(0, uniqueId);
1914 pEnum->GetIntAt(1, pkgId);
1915 pEnum->GetStringAt(2, name);
1916 pEnum->GetStringAt(3, defaultapp);
1917 pEnum->GetStringAt(4, mainmenuIcon);
1918 pEnum->GetStringAt(5, settingIcon);
1919 pEnum->GetStringAt(7, quickpanelIcon);
1920 pEnum->GetIntAt(9, appFeature);
1921 pEnum->GetStringAt(10, packageName);
1923 pPackageAppInfoImpl->SetUniqueId(uniqueId);
1924 pPackageAppInfoImpl->SetPkgId(pkgId);
1925 pPackageAppInfoImpl->SetName(name);
1926 pPackageAppInfoImpl->SetDefault(defaultapp);
1927 pPackageAppInfoImpl->SetMainmenuIcon(mainmenuIcon);
1928 pPackageAppInfoImpl->SetSettingIcon(settingIcon);
1929 pPackageAppInfoImpl->SetQuickpanelIcon(quickpanelIcon);
1930 pPackageAppInfoImpl->SetAppFeature(appFeature);
1931 pPackageAppInfoImpl->SetPackageName(packageName);
1933 pList->Add(*pPackageAppInfoImpl);
1946 _PackageManagerImpl::GetPackageAppFeatureListN(const PackageId& packageId, const Tizen::Base::String& appExecutableName) const
1948 ArrayList* pAppInfoList = GetPackageAppInfoImplListN(packageId);
1949 SysTryReturn(NID_APP, pAppInfoList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] AppInfo list instance must not be null.");
1951 ArrayList* pResult = null;
1953 for (int i = 0; i < pAppInfoList->GetCount(); i++)
1955 const _PackageAppInfoImpl* pAppInfoImpl = static_cast<const _PackageAppInfoImpl*>(pAppInfoList->GetAt(i));
1956 if (pAppInfoImpl == null)
1961 if (pAppInfoImpl->GetName() == appExecutableName)
1963 pResult = pAppInfoImpl->GetAppFeatureListN();
1969 pAppInfoList->RemoveAll(true);
1970 delete pAppInfoList;
1975 HashMapT<String, _AppFeatureInfoImpl*>*
1976 _PackageManagerImpl::GetPackageAppFeatureMapN(const PackageId& packageId, const Tizen::Base::String& appExecutableName) const
1978 ArrayList* pAppInfoList = GetPackageAppInfoImplListN(packageId);
1979 SysTryReturn(NID_APP, pAppInfoList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] AppInfo list instance must not be null.");
1981 HashMapT<String, _AppFeatureInfoImpl*>* pResult = null;
1983 std::auto_ptr<IEnumerator> pEnum(pAppInfoList->GetEnumeratorN());
1985 while (pEnum->MoveNext() == E_SUCCESS)
1987 const _PackageAppInfoImpl* pAppInfoImpl = static_cast<const _PackageAppInfoImpl*>(pEnum->GetCurrent());
1988 if (pAppInfoImpl == null)
1993 if (pAppInfoImpl->GetName() == appExecutableName)
1995 pResult = pAppInfoImpl->GetAppFeatureMapN();
2001 pAppInfoList->RemoveAll(true);
2002 delete pAppInfoList;
2008 _PackageManagerImpl::GetAppLaunchConditionListN(const String& packageName) const
2010 result r = E_SUCCESS;
2012 DbStatement* pStmt = null;
2013 DbEnumerator* pEnum = null;
2015 ArrayList* pList = null;
2017 query.Format(1024, L"SELECT LaunchCondition.* FROM LaunchCondition, AppInfo WHERE AppInfo.UNIQUE_ID = LaunchCondition.ID and AppInfo.PACKAGE_NAME = '%ls'", packageName.GetPointer());
2019 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
2020 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
2022 pStmt = CreateStatementN(db, query);
2023 SysTryCatch(NID_APP, pStmt != null, GetLastResult(),
2024 GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
2026 pEnum = ExecuteStatementN(db, pStmt);
2029 pList = new (std::nothrow) ArrayList;
2030 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Container allocation failure.");
2034 while (pEnum->MoveNext() == E_SUCCESS)
2036 _LaunchConditionInfoImpl* pLaunchCondtion = new (std::nothrow) _LaunchConditionInfoImpl;
2037 SysTryReturn(NID_APP, pLaunchCondtion != null, null, E_OUT_OF_MEMORY, "pLaunchCondtion instance must not be null.");
2042 pEnum->GetStringAt(1, name);
2043 pEnum->GetStringAt(2, value);
2045 pLaunchCondtion->SetName(name);
2046 pLaunchCondtion->SetValue(value);
2048 pList->Add(*pLaunchCondtion);
2050 SysLog(NID_APP, "Name[%ls], Value[%ls]", name.GetPointer(), value.GetPointer());
2062 _PackageManagerImpl::RegisterAppInfoList(int id, ArrayList* pList)
2064 SysTryReturnResult(NID_APP, __pDb != null, E_SYSTEM, "__pDb is null");
2066 result r = E_SUCCESS;
2068 DbStatement* pStmt = null;
2072 for (int i = 0; i < pList->GetCount(); i++)
2074 _PackageAppInfoImpl* pAppInfoImpl = dynamic_cast <_PackageAppInfoImpl*>(pList->GetAt(i));
2076 if (pAppInfoImpl != null)
2078 DbEnumerator* pEnum = null;
2081 String name = pAppInfoImpl->GetName();
2082 String defaultapp = pAppInfoImpl->GetDefault();
2083 String mainmenuIcon = pAppInfoImpl->GetMainmenuIcon();
2084 String settingIcon = pAppInfoImpl->GetSettingIcon();
2085 String quickpanelIcon = pAppInfoImpl->GetQuickpanelIcon();
2086 int appFeature = pAppInfoImpl->GetAppFeature();
2087 String packageName = pAppInfoImpl->GetPackageName();
2088 String type = pAppInfoImpl->GetType();
2090 ArrayList* pLaunchConditionImplList = pAppInfoImpl->GetLaunchConditionList();
2091 ArrayList* pNotificationImplList = pAppInfoImpl->GetNotificationList();
2092 ArrayList* pAppFeatureImplList = pAppInfoImpl->GetAppFeatureList();
2093 ArrayList* pDataControlImplList = pAppInfoImpl->GetDataControlList();
2096 1024, L"INSERT INTO AppInfo "
2097 "(ID, APP_NAME, APP_DEFAULT, APP_MAINMENU_ICON, APP_SETTING_ICON, APP_TICKER_ICON, APP_QUICKPANEL_ICON, APP_LAUNCHIMAGE_ICON, APP_FEATURE, PACKAGE_NAME, APP_TYPE) "
2098 "VALUES (?,?,?,?,?,?,?,?,?,?,?)");
2100 pStmt = CreateStatementN(*__pDb, query);
2101 //SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
2105 r = pStmt->BindInt(0, id);
2106 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2109 if (!name.IsEmpty())
2111 r = pStmt->BindString(1, name);
2112 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2115 if (!defaultapp.IsEmpty())
2117 r = pStmt->BindString(2, defaultapp);
2118 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2121 if (!mainmenuIcon.IsEmpty())
2123 r = pStmt->BindString(3, mainmenuIcon);
2124 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2127 if (!settingIcon.IsEmpty())
2129 r = pStmt->BindString(4, settingIcon);
2130 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2133 if (!quickpanelIcon.IsEmpty())
2135 r = pStmt->BindString(6, quickpanelIcon);
2136 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2139 if (appFeature != 0)
2141 r = pStmt->BindInt(8, appFeature);
2142 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2145 if (!packageName.IsEmpty())
2147 r = pStmt->BindString(9, packageName);
2148 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2151 if (!type.IsEmpty())
2153 r = pStmt->BindString(10, type);
2154 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2157 pEnum = ExecuteStatementN(*__pDb, pStmt);
2164 pAppInfoImpl->SetPkgId(id);
2165 uniqueId = pAppInfoImpl->GetUniqueId();
2166 RegisterLaunchConditionList(uniqueId, pLaunchConditionImplList);
2167 RegisterNotificationList(uniqueId, pNotificationImplList);
2168 RegisterAppFeatureList(uniqueId, pAppFeatureImplList);
2169 RegisterDataControlList(uniqueId, pDataControlImplList);
2170 //RegisterAppControlList(uniqueId, pAppControlImplList);
2175 r = GetLastResult();
2184 _PackageManagerImpl::RegisterLaunchConditionList(int id, ArrayList* pList)
2186 SysTryReturnResult(NID_APP, __pDb != null, E_SYSTEM, "__pDb is null");
2188 result r = E_SUCCESS;
2190 DbStatement* pStmt = null;
2194 for (int i = 0; i < pList->GetCount(); i++)
2196 _LaunchConditionInfoImpl* pLaunchCondition = dynamic_cast<_LaunchConditionInfoImpl*>(pList->GetAt(i));
2198 if (pLaunchCondition != null)
2200 DbEnumerator* pEnum = null;
2202 String name = pLaunchCondition->GetName();
2203 String value = pLaunchCondition->GetValue();
2205 query.Format(1024, L"INSERT INTO LaunchCondition (ID, NAME, VALUE) VALUES (?,?,?)");
2207 pStmt = CreateStatementN(*__pDb, query);
2208 //SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
2212 r = pStmt->BindInt(0, id);
2213 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2216 if (!name.IsEmpty())
2218 r = pStmt->BindString(1, name);
2219 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2222 if (!value.IsEmpty())
2224 r = pStmt->BindString(2, value);
2225 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2228 pEnum = ExecuteStatementN(*__pDb, pStmt);
2238 r = GetLastResult();
2247 _PackageManagerImpl::RegisterNotificationList(int id, ArrayList* pList)
2249 SysTryReturnResult(NID_APP, __pDb != null, E_SYSTEM, "__pDb is null");
2251 result r = E_SUCCESS;
2253 DbStatement* pStmt = null;
2257 for (int i = 0; i < pList->GetCount(); i++)
2259 _NotificationInfoImpl* pNotification = dynamic_cast<_NotificationInfoImpl*>(pList->GetAt(i));
2261 if (pNotification != null)
2263 DbEnumerator* pEnum = null;
2265 String name = pNotification->GetName();
2266 String value = pNotification->GetValue();
2268 query.Format(1024, L"INSERT INTO Notification (ID, NAME, VALUE) VALUES (?,?,?)");
2270 pStmt = CreateStatementN(*__pDb, query);
2271 //SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
2275 r = pStmt->BindInt(0, id);
2276 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2279 if (!name.IsEmpty())
2281 r = pStmt->BindString(1, name);
2282 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2285 if (!value.IsEmpty())
2287 r = pStmt->BindString(2, value);
2288 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2291 pEnum = ExecuteStatementN(*__pDb, pStmt);
2301 r = GetLastResult();
2310 _PackageManagerImpl::RegisterAppFeatureList(int id, ArrayList* pList)
2312 SysTryReturnResult(NID_APP, __pDb != null, E_SYSTEM, "__pDb is null");
2314 result r = E_SUCCESS;
2316 DbStatement* pStmt = null;
2320 for (int i = 0; i < pList->GetCount(); i++)
2322 _AppFeatureInfoImpl* pAppFeature = dynamic_cast<_AppFeatureInfoImpl*>(pList->GetAt(i));
2324 if (pAppFeature != null)
2326 DbEnumerator* pEnum = null;
2328 String name = pAppFeature->GetName();
2329 String value = pAppFeature->GetValue();
2331 query.Format(1024, L"INSERT INTO AppFeature (ID, NAME, VALUE) VALUES (?,?,?)");
2333 pStmt = CreateStatementN(*__pDb, query);
2334 //SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
2338 r = pStmt->BindInt(0, id);
2339 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2342 if (!name.IsEmpty())
2344 r = pStmt->BindString(1, name);
2345 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2348 if (!value.IsEmpty())
2350 r = pStmt->BindString(2, value);
2351 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2354 pEnum = ExecuteStatementN(*__pDb, pStmt);
2364 r = GetLastResult();
2373 _PackageManagerImpl::RegisterDataControlList(int id, ArrayList* pList)
2375 SysTryReturnResult(NID_APP, __pDb != null, E_SYSTEM, "__pDb is null");
2377 result r = E_SUCCESS;
2379 DbStatement* pStmt = null;
2383 for (int i = 0; i < pList->GetCount(); i++)
2385 _DataControlInfoImpl* pDataControl = dynamic_cast<_DataControlInfoImpl*>(pList->GetAt(i));
2387 if (pDataControl != null)
2389 DbEnumerator* pEnum = null;
2391 String providerId = pDataControl->GetProviderId();
2392 ArrayList* pTypeList = pDataControl->GetControlTypeList();
2394 if (pTypeList != null)
2396 for (int j = 0; j < pTypeList->GetCount(); j++)
2398 _DataControlTypeImpl* pControlType = dynamic_cast<_DataControlTypeImpl*>(pTypeList->GetAt(j));
2400 if (pControlType != null)
2402 String access = pControlType->GetAccess();
2403 String type = pControlType->GetType();
2405 query.Format(1024, L"INSERT INTO DataControl (ID, PROVIDER_ID, TYPE, ACCESS) VALUES (?,?,?,?)");
2407 pStmt = CreateStatementN(*__pDb, query);
2408 //SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
2412 r = pStmt->BindInt(0, id);
2413 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2416 if (!providerId.IsEmpty())
2418 r = pStmt->BindString(1, providerId);
2419 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2422 if (!type.IsEmpty())
2424 r = pStmt->BindString(2, type);
2425 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2428 if (!access.IsEmpty())
2430 r = pStmt->BindString(3, access);
2431 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2434 pEnum = ExecuteStatementN(*__pDb, pStmt);
2447 r = GetLastResult();
2456 _PackageManagerImpl::FindRecord(const String& tableName, const String& columnName, const String& value) const
2459 result r = E_SUCCESS;
2462 DbStatement* pStmt = null;
2463 DbEnumerator* pEnum = null;
2466 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
2467 //SysTryCatch(NID_APP, r == E_SUCCESS, r, r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
2469 query.Format(1024, L"SELECT * FROM %ls WHERE %ls = '%ls'", tableName.GetPointer(), columnName.GetPointer(), value.GetPointer());
2471 pStmt = CreateStatementN(db, query);
2472 //SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
2474 pEnum = ExecuteStatementN(db, pStmt);
2478 if (pEnum->MoveNext() == E_SUCCESS)
2480 pEnum->GetIntAt(0, uniqueId);
2493 _PackageManagerImpl::GetRecord(const String& tableName, int uniqueId, const String& columnName, String& value) const
2495 result r = E_SUCCESS;
2498 DbStatement* pStmt = null;
2499 DbEnumerator* pEnum = null;
2501 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
2502 //SysTryCatch(NID_APP, r == E_SUCCESS, r, r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
2504 query.Format(1024, L"SELECT %ls FROM %ls WHERE UNIQUE_ID = %d", columnName.GetPointer(), tableName.GetPointer(), uniqueId);
2506 pStmt = CreateStatementN(db, query);
2507 //SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
2509 pEnum = ExecuteStatementN(db, pStmt);
2513 if (pEnum->MoveNext() == E_SUCCESS)
2515 pEnum->GetStringAt(0, value);
2528 _PackageManagerImpl::RegisterPrivileges(int id, const String& privileges, const String& hmacPrivileges, int certType)
2530 SysTryReturnResult(NID_APP, __pDb != null, E_SYSTEM, "__pDb is null");
2532 result r = E_SUCCESS;
2534 DbStatement* pStmt = null;
2535 DbEnumerator* pEnum = null;
2537 query.Format(1024, L"INSERT INTO PkgPrivileges (ID, PRIVILEGES, HMAC_PPRIVILEGES, CERTIFICATE_TYPE) VALUES (?,?,?,?)");
2539 pStmt = CreateStatementN(*__pDb, query);
2540 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
2544 r = pStmt->BindInt(0, id);
2545 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2548 if (!privileges.IsEmpty())
2550 r = pStmt->BindString(1, privileges);
2551 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2554 if (!hmacPrivileges.IsEmpty())
2556 r = pStmt->BindString(2, hmacPrivileges);
2557 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2562 r = pStmt->BindInt(3, certType);
2563 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2566 pEnum = ExecuteStatementN(*__pDb, pStmt);
2573 r = GetLastResult();
2581 _PackageManagerImpl::GetPackageName(const PackageId& packageId, const String* pName, char* pPackageName, int bufferSize)
2583 result r = E_SUCCESS;
2585 DbStatement* pStmt = null;
2586 DbEnumerator* pEnum = null;
2588 Tizen::Base::String packageName;
2594 L"SELECT AppInfo.PACKAGE_NAME FROM AppInfo, PkgInfo WHERE AppInfo.ID = PkgInfo.UNIQUE_ID and AppInfo.APP_DEFAULT = '%s' and PkgInfo.PKG_ID = '%ls'",
2595 "True", packageId.GetPointer());
2601 L"SELECT AppInfo.PACKAGE_NAME FROM AppInfo, PkgInfo WHERE AppInfo.ID = PkgInfo.UNIQUE_ID and APP_NAME = '%ls' and PkgInfo.PKG_ID = '%ls'",
2602 pName->GetPointer(), packageId.GetPointer());
2605 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
2606 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
2608 pStmt = CreateStatementN(db, query);
2609 SysTryCatch(NID_APP, pStmt != null, GetLastResult(),
2610 GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
2612 pEnum = ExecuteStatementN(db, pStmt);
2615 if (pEnum->MoveNext() == E_SUCCESS)
2617 pEnum->GetStringAt(0, packageName);
2618 snprintf(pPackageName, bufferSize, "%ls", packageName.GetPointer());
2624 r = E_OBJ_NOT_FOUND;
2634 _PackageManagerImpl::GetDefaultAppExecutableName(const PackageId& packageId)
2636 result r = E_SUCCESS;
2638 DbStatement* pStmt = null;
2639 DbEnumerator* pEnum = null;
2641 String executableName;
2645 L"SELECT AppInfo.APP_NAME FROM AppInfo, PkgInfo WHERE AppInfo.ID = PkgInfo.UNIQUE_ID and AppInfo.APP_DEFAULT = '%s' and PkgInfo.PKG_ID = '%ls'",
2646 "True", packageId.GetPointer());
2648 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
2649 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
2651 pStmt = CreateStatementN(db, query);
2652 SysTryCatch(NID_APP, pStmt != null, GetLastResult(),
2653 GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
2655 pEnum = ExecuteStatementN(db, pStmt);
2658 if (pEnum->MoveNext() == E_SUCCESS)
2660 pEnum->GetStringAt(0, executableName);
2666 r = E_OBJ_NOT_FOUND;
2673 return executableName;
2677 _PackageManagerImpl::CreateStatementN(Database& db, const String& query)
2679 result r = E_SUCCESS;
2680 DbStatement* pStmt = null;
2682 for (int i = 0; i < MAX_DATABASE_RETRY_COUNT; i++)
2684 pStmt = db.CreateStatementN(query);
2685 r = GetLastResult();
2687 if (r != E_OBJECT_LOCKED)
2693 SysLog(NID_APP, "RetryCount[%d] CreateStatementN - E_OBJECT_LOCKED", i);
2704 _PackageManagerImpl::ExecuteStatementN(Database& db, const DbStatement* pStmt)
2706 result r = E_SUCCESS;
2707 DbEnumerator* pEnum = null;
2709 for (int i = 0; i < MAX_DATABASE_RETRY_COUNT; i++)
2711 pEnum = db.ExecuteStatementN(*pStmt);
2712 r = GetLastResult();
2714 if (r != E_OBJECT_LOCKED)
2720 SysLog(NID_APP, "RetryCount[%d] ExecuteStatementN - E_OBJECT_LOCKED", i);
2730 } } } // Tizen::App::Package