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 <FSysSystemTime.h>
30 #include <FAppPkgPackageManager.h>
31 #include <FAppPkgPackageAppInfo.h>
32 #include <FAppPkgPackageInfo.h>
33 #include <FAppPkgIPackageInstallationEventListener.h>
34 #include <FAppPkgIPackageInstallationResponseListener.h>
35 #include <FAppPkgIPackageUninstallationResponseListener.h>
37 #include <FIoRegistry.h>
39 #include <FBaseSysLog.h>
40 #include <FBase_StringConverter.h>
42 #include "FAppPkg_PackageManagerImpl.h"
43 #include "FAppPkg_PackageInfoImpl.h"
44 #include "FAppPkg_PackageAppInfoImpl.h"
45 #include "FApp_AppInfo.h"
46 #include "FApp_PackageManagerProxy.h"
48 using namespace Tizen::Base;
49 using namespace Tizen::Base::Runtime;
50 using namespace Tizen::Base::Collection;
51 using namespace Tizen::Io;
52 using namespace Tizen::System;
54 namespace Tizen { namespace App { namespace Package
57 PackageManager* pPackageManagerInstance = null;
59 Tizen::Base::Collection::HashMap _PackageManagerImpl::__installationList;
61 const wchar_t PACKAGE_DATABASE_FILE_NAME[] = L"/opt/usr/dbspace/.app-package.db";
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.");
514 #if defined(_OSP_EMUL_)
515 SysLog(NID_APP, "MoveToExternalStorage() is unavailable on the emulator.");
520 pkgmgrinfo_installed_storage storage = PMINFO_INTERNAL_STORAGE;
521 pkgmgrinfo_pkginfo_h packageInfoHandle = null;
523 std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
524 SysTryReturnResult(NID_APP, pPackageId != null, E_OUT_OF_MEMORY, "pPackageId is null");
526 res = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &packageInfoHandle);
527 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_pkginfo() failed. result=[%d], packageId=[%s]", res, pPackageId.get());
529 res = pkgmgrinfo_pkginfo_get_type(packageInfoHandle, &pType);
530 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_type() failed. result=[%d], packageId=[%s]", res, pPackageId.get());
532 res = pkgmgrinfo_pkginfo_get_installed_storage(packageInfoHandle, &storage);
533 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_installed_storage() failed. result=[%d], packageId=[%s]", res, pPackageId.get());
535 if (storage == PMINFO_EXTERNAL_STORAGE)
537 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_installed_storage(): storage = [%d][E_INVALID_OPERATION]", storage);
538 return E_INVALID_OPERATION;
541 if (__pRequestClient == null)
543 __pRequestClient = pkgmgr_client_new(PC_REQUEST);
544 SysTryReturnResult(NID_APP, __pRequestClient != null, E_SYSTEM, "pkgmgr_client_new(PC_REQUEST) failed");
547 res = pkgmgr_client_move(__pRequestClient, pType, pPackageId.get(), PM_MOVE_TO_SDCARD, PM_QUIET);
549 if(packageInfoHandle)
551 pkgmgrinfo_pkginfo_destroy_pkginfo(packageInfoHandle);
554 if (res < PKGMGR_R_OK)
556 pkgmgr_client_free(__pRequestClient);
557 __pRequestClient = null;
559 if (res == PKGMGR_R_EINVAL)
561 SysLog(NID_APP, "pkgmgr_client_move() returns ARGV error");
562 return E_INVALID_ARG;
564 else if (res == PKGMGR_R_ERROR)
566 SysLog(NID_APP, "pkgmgr_client_move() returns Unknown error");
570 SysLog(NID_APP, "pkgmgr_client_move() returns Unknown error, res = %d", res);
581 _PackageManagerImpl::MoveToInternalStorage(const PackageId& packageId)
583 SysTryReturnResult(NID_APP, packageId.IsEmpty() == false, E_INVALID_ARG, "packageId is empty");
584 SysTryReturnResult(NID_APP, IsPackageInstalled(packageId) == true, E_PKG_NOT_INSTALLED, "package is not installed.");
586 #if defined(_OSP_EMUL_)
587 SysLog(NID_APP, "MoveToInternalStorage() is unavailable on the emulator.");
592 pkgmgrinfo_installed_storage storage = PMINFO_INTERNAL_STORAGE;
593 pkgmgrinfo_pkginfo_h packageInfoHandle = null;
595 std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
596 SysTryReturnResult(NID_APP, pPackageId != null, E_OUT_OF_MEMORY, "pPackageId is null");
598 res = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &packageInfoHandle);
599 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_pkginfo() failed. result=[%d], packageId=[%s]", res, pPackageId.get());
601 res = pkgmgrinfo_pkginfo_get_type(packageInfoHandle, &pType);
602 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_type() failed. result=[%d], packageId=[%s]", res, pPackageId.get());
604 res = pkgmgrinfo_pkginfo_get_installed_storage(packageInfoHandle, &storage);
605 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_installed_storage() failed. result=[%d], packageId=[%s]", res, pPackageId.get());
607 if (storage == PMINFO_INTERNAL_STORAGE)
609 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_installed_storage(): storage = [%d][E_INVALID_OPERATION]", storage);
610 return E_INVALID_OPERATION;
613 if (__pRequestClient == null)
615 __pRequestClient = pkgmgr_client_new(PC_REQUEST);
616 SysTryReturnResult(NID_APP, __pRequestClient != null, E_SYSTEM, "pkgmgr_client_new(PC_REQUEST) failed");
619 res = pkgmgr_client_move(__pRequestClient, pType, pPackageId.get(), PM_MOVE_TO_INTERNAL, PM_QUIET);
621 if(packageInfoHandle)
623 pkgmgrinfo_pkginfo_destroy_pkginfo(packageInfoHandle);
626 if (res < PKGMGR_R_OK)
628 pkgmgr_client_free(__pRequestClient);
629 __pRequestClient = null;
631 if (res == PKGMGR_R_EINVAL)
633 SysLog(NID_APP, "pkgmgr_client_move() returns ARGV error");
634 return E_INVALID_ARG;
636 else if (res == PKGMGR_R_ERROR)
638 SysLog(NID_APP, "pkgmgr_client_move() returns Unknown error");
642 SysLog(NID_APP, "pkgmgr_client_move() returns Unknown error, res = %d", res);
653 _PackageManagerImpl::InstallationEventHandler(int reqId, const char* pType, const char* pPackageId, const char* pKey, const char* pVal, const void* pMsg, void* pData)
655 SysLog(NID_APP, "reqId[%d], Type[%s], PackageId[%s], Key[%s], Val[%s]", reqId, pType, pPackageId, pKey, pVal);
659 if (strcmp(pKey, "end") == 0)
661 IPackageInstallationResponseListener* pListener = (IPackageInstallationResponseListener*) pData;
663 if (strcmp(pVal, "ok") == 0)
665 pListener->OnPackageInstallationResponseReceived(pPackageId, PACKAGE_INSTALLATION_RESULT_SUCCESS);
666 SysLog(NID_APP, "OnPackageInstallationResponseReceived(PACKAGE_INSTALLATION_RESULT_SUCCESS)");
670 pListener->OnPackageInstallationResponseReceived(pPackageId, PACKAGE_INSTALLATION_RESULT_INVALID_PACKAGE);
671 SysLog(NID_APP, "OnPackageInstallationResponseReceived(PACKAGE_INSTALLATION_RESULT_INVALID_PACKAGE)");
682 _PackageManagerImpl::UninstallationEventHandler(int reqId, const char* pType, const char* pPackageId, const char* pKey, const char* pVal, const void* pMsg, void* pData)
684 SysLog(NID_APP, "reqId[%d], Type[%s], PackageId[%s], Key[%s], Val[%s]", reqId, pType, pPackageId, pKey, pVal);
688 if (strcmp(pKey, "end") == 0)
690 IPackageUninstallationResponseListener* pListener = (IPackageUninstallationResponseListener*) pData;
692 if (strcmp(pVal, "ok") == 0)
694 SysLog(NID_APP, "OnPackageUninstallationResponseReceived(true)");
695 pListener->OnPackageUninstallationResponseReceived(pPackageId, true);
699 SysLog(NID_APP, "OnPackageUninstallationResponseReceived(false)");
700 pListener->OnPackageUninstallationResponseReceived(pPackageId, false);
711 _PackageManagerImpl::GetInstance(void)
713 return PackageManager::GetInstance()->__pPackageManagerImpl;
717 _PackageManagerImpl::Construct(void)
721 result r = __installationList.Construct();
722 SysTryReturnResult(NID_APP, r == E_SUCCESS, r, "The memory is insufficient.");
727 _PackageManagerImpl::_PackageManagerImpl(void)
728 :__pRequestClient(null),
729 __pListeningClient(null),
732 CreatePackageTables();
735 _PackageManagerImpl::~_PackageManagerImpl(void)
740 _PackageManagerImpl::SendPackageEvent(PackageType type, const PackageId& packageId, const char* pEventKey, const char* pEventValue)
742 result r = E_SUCCESS;
745 if (strcmp(pEventKey, "start") == 0)
747 if ((strcmp(pEventValue, "install") == 0) || (strcmp(pEventValue, "uninstall") == 0))
749 String* pAppId = new (std::nothrow) String(packageId);
750 SysTryReturnVoidResult(NID_APP, pAppId != null, E_OUT_OF_MEMORY, "pAppId instance must not be null.");
752 String* pOperation = new (std::nothrow) String(pEventValue);
753 SysTryReturnVoidResult(NID_APP, pOperation != null, E_OUT_OF_MEMORY, "pOperation instance must not be null.");
755 r = __installationList.Add(*pAppId, *pOperation);
760 SysLog(NID_APP, "Failed to add installation condition.");
761 SetLastResult(E_SYSTEM);
766 else if (strcmp(pEventKey, "end") == 0)
768 String* pOperation = static_cast <String*>(__installationList.GetValue(packageId));
771 if (pOperation->Equals("uninstall", true) == true)
776 r = __installationList.Remove(packageId, true);
779 SysLogException(NID_APP, r, "[%s] Remove Element [%ls] is failed from installing list.", GetErrorMessage(r), packageId.GetPointer());
784 std::unique_ptr< IEnumeratorT<_PackageManagerEvent*> > pEnum(__packageEventListenerList.GetEnumeratorN());
785 SysTryReturnVoidResult(NID_APP, pEnum, E_OUT_OF_MEMORY, "The memory is insufficient.");
787 while (pEnum->MoveNext() == E_SUCCESS)
789 _PackageManagerEvent* pEvent = null;
790 pEnum->GetCurrent(pEvent);
793 _PackageManagerEventArg* pEventArg= new (std::nothrow) _PackageManagerEventArg();
794 SysTryReturnVoidResult(NID_APP, pEventArg, E_OUT_OF_MEMORY, "The memory is insufficient.");
796 String eventKey(pEventKey);
797 String eventValue(pEventValue);
799 pEventArg->__packageId = packageId;
800 pEventArg->__eventKey = eventKey;
801 pEventArg->__eventValue = eventValue;
802 pEventArg->__install = install;
804 r = pEvent->Fire(*pEventArg);
807 SysLog(NID_APP, "pEvent->Fire(*pEventArg) failed. [%s]", GetErrorMessage(r));
810 SysLog(NID_APP, "PackageId = [%ls], Key = [%ls], Value = [%ls], install = [%d]", pEventArg->__packageId.GetPointer(), pEventArg->__eventKey.GetPointer(), pEventArg->__eventValue.GetPointer(), pEventArg->__install);
814 SysLog(NID_APP, "pEvent is null.");
820 _PackageManagerImpl::GetPackageInfoN(PackageType packageType, const String& packageName) const
822 SysTryReturn(NID_APP, packageName.IsEmpty() == false, null, E_INVALID_ARG, "[E_INVALID_ARG] packageName is empty.");
824 result r = E_SUCCESS;
826 DbStatement* pStmt = null;
827 DbEnumerator* pEnum = null;
829 PackageInfo *pPackageInfo = null;
831 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());
833 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, false);
834 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
836 pStmt = CreateStatementN(db, query);
838 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
840 pEnum = ExecuteStatementN(db, pStmt);
843 if (pEnum->MoveNext() == E_SUCCESS)
845 pPackageInfo = new (std::nothrow) PackageInfo;
846 SysTryReturn(NID_APP, pPackageInfo != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pPackageInfo instance must not be null.");
848 _PackageInfoImpl* pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPackageInfo);
854 String appApiVersion;
857 String appDescription;
861 int appStorageType = 0;
862 DateTime appInstallationTime;
865 pEnum->GetStringAt(1, id);
866 pEnum->GetStringAt(3, appVersion);
867 pEnum->GetStringAt(4, appType);
868 pEnum->GetStringAt(5, appMimeType);
869 pEnum->GetStringAt(6, appApiVersion);
870 pEnum->GetStringAt(7, appName);
871 pEnum->GetStringAt(8, appVendor);
872 pEnum->GetStringAt(9, appDescription);
873 pEnum->GetStringAt(10, appUrl);
874 pEnum->GetStringAt(11, appCid);
875 pEnum->GetStringAt(16, appRootPath);
876 pEnum->GetIntAt(17, appStorageType);
877 pEnum->GetDateTimeAt(18, appInstallationTime);
878 pEnum->GetStringAt(21, appIconPath);
880 pPackageInfoImpl->SetAppId(id);
881 pPackageInfoImpl->SetAppVersion(appVersion);
882 pPackageInfoImpl->SetAppMimeType(appMimeType);
883 pPackageInfoImpl->SetAppApiVersion(appApiVersion);
884 pPackageInfoImpl->SetAppName(appName);
885 pPackageInfoImpl->SetAppVendor(appVendor);
886 pPackageInfoImpl->SetAppDescription(appDescription);
887 pPackageInfoImpl->SetAppUrl(appUrl);
888 pPackageInfoImpl->SetAppCid(appCid);
889 pPackageInfoImpl->SetAppRootPath(appRootPath);
890 pPackageInfoImpl->SetAppStorageType(appStorageType);
891 pPackageInfoImpl->SetAppInstallationTime(appInstallationTime);
892 pPackageInfoImpl->SetAppIconPath(appIconPath);
908 _PackageManagerImpl::PackageInfoEventHandler(const pkgmgrinfo_pkginfo_h handle, void* pUserData)
910 SysTryReturn(NID_APP, handle != null, 0, E_SYSTEM, "[E_SYSTEM] handle must not be null.");
913 char* pPackage = null;
914 ArrayList* pList = (ArrayList*)pUserData;
916 PackageInfo *pPackageInfo = new (std::nothrow) PackageInfo;
917 SysTryReturn(NID_APP, pPackageInfo != null, 0, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pPackageInfo instance must not be null.");
919 _PackageInfoImpl* pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPackageInfo);
921 result = pkgmgrinfo_pkginfo_get_pkgname(handle, &pPackage);
924 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_pkgname(): package = [%s]", pPackage);
928 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_pkgname() is failed. result = [%d]", result);
931 pPackageInfoImpl->Construct(pPackage);
932 pList->Add(*pPackageInfo);
938 _PackageManagerImpl::GetFilteredAppIdListN(const String& feature, const String& value) const
940 result r = E_SUCCESS;
942 DbStatement* pStmt = null;
943 DbEnumerator* pEnum = null;
945 ArrayList* pList = null;
947 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());
949 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, false);
950 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
952 pStmt = CreateStatementN(db, query);
953 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
955 pEnum = ExecuteStatementN(db, pStmt);
959 pList = new (std::nothrow) ArrayList();
960 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "ArrayList creation failure.");
963 while (pEnum->MoveNext() == E_SUCCESS)
965 String* pPackageName = new (std::nothrow) String;
966 SysTryReturn(NID_APP, pPackageName != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pPackageName instance must not be null.");
968 pEnum->GetStringAt(0, *pPackageName);
970 pList->Add(*pPackageName);
987 _PackageManagerImpl::GetDataControlInfoN(const String& providerId, const String& type) const
989 result r = E_SUCCESS;
991 DbStatement* pStmt = null;
992 DbEnumerator* pEnum = null;
994 ArrayList* pList = null;
996 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());
998 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, false);
999 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1001 pStmt = CreateStatementN(db, query);
1002 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1004 pEnum = ExecuteStatementN(db, pStmt);
1008 pList = new (std::nothrow) ArrayList();
1009 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "ArrayList creation failure.");
1012 while (pEnum->MoveNext() == E_SUCCESS)
1014 String* pPackageName = new (std::nothrow) String;
1015 SysTryReturn(NID_APP, pPackageName != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pPackageName instance must not be null.");
1017 String* pAccess = new (std::nothrow) String;
1018 SysTryReturn(NID_APP, pAccess != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pAccess instance must not be null.");
1020 pEnum->GetStringAt(0, *pPackageName);
1021 pList->Add(*pPackageName);
1023 pEnum->GetStringAt(1, *pAccess);
1024 pList->Add(*pAccess);
1032 r = E_OBJ_NOT_FOUND;
1041 _PackageManagerImpl::GetUiThemeListN(const PackageId& packageId) const
1043 result r = E_SUCCESS;
1045 DbStatement* pStmt = null;
1046 DbEnumerator* pEnum = null;
1048 HashMap* pList = null;
1050 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')"
1051 , packageId.GetPointer());
1053 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, false);
1054 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1056 pStmt = CreateStatementN(db, query);
1057 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1059 pEnum = ExecuteStatementN(db, pStmt);
1063 pList = new (std::nothrow) HashMap();
1064 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "HashMap creation failure.");
1067 while (pEnum->MoveNext() == E_SUCCESS)
1069 String* pName = new (std::nothrow) String;
1070 SysTryCatch(NID_APP, pName != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pName instance must not be null.");
1072 String* pValue = new (std::nothrow) String;
1073 SysTryCatch(NID_APP, pValue != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pValue instance must not be null.");
1075 pEnum->GetStringAt(0, *pName);
1076 pEnum->GetStringAt(1, *pValue);
1078 pList->Add(*pName, *pValue);
1086 r = E_OBJ_NOT_FOUND;
1095 _PackageManagerImpl::IsAppInstalled(const AppId& appId)
1097 if (appId == _AppInfo::GetPackageId())
1103 pkgmgrinfo_pkginfo_h pPackageInfoHandle = null;
1105 std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(appId));
1106 SysTryReturn(NID_APP, pPackageId, false, E_OUT_OF_MEMORY, "pPackageId is null");
1108 result = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &pPackageInfoHandle);
1109 SysTryReturn(NID_APP, result == 0, false, E_APP_NOT_INSTALLED, "pkgmgrinfo_pkginfo_get_pkginfo() failed. result=[%d], packageId=[%s]", result, pPackageId.get());
1111 if(pPackageInfoHandle)
1113 pkgmgrinfo_pkginfo_destroy_pkginfo(pPackageInfoHandle);
1120 _PackageManagerImpl::PackageEventHandler(int req_id, const char* pkg_type, const char* pkg_name,
1121 const char* key, const char* val, const void* pmsg, void* data)
1123 SysLog(NID_APP, "PackageEventHandler - req_id: %d, pkg_type: %s, pkg_name: %s, key: %s, val: %s", req_id, pkg_type,
1124 pkg_name, key, val);
1126 PackageType type = PACKAGE_TYPE_TPK;
1127 PackageId packageId(pkg_name);
1129 if (strcmp(pkg_type, "tpk") == 0)
1131 type = PACKAGE_TYPE_TPK;
1133 else if (strcmp(pkg_type, "wgt") == 0)
1135 type = PACKAGE_TYPE_WGT;
1139 SysLog(NID_APP, "Invalid type - pkg_type: %s", pkg_type);
1143 _PackageManagerImpl* pThis = _PackageManagerImpl::GetInstance();
1144 pThis->SendPackageEvent(type, packageId, key, val);
1150 _PackageManagerImpl::GetAppIdOfDataControlN(const String& providerId)
1152 result r = E_SUCCESS;
1154 DbStatement* pStmt = null;
1155 DbEnumerator* pEnum = null;
1157 String* pAppId = null;
1159 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",
1160 providerId.GetPointer());
1162 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, false);
1163 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1165 pStmt = CreateStatementN(db, query);
1166 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1168 pEnum = ExecuteStatementN(db, pStmt);
1172 if (pEnum->MoveNext() == E_SUCCESS)
1174 pAppId = new (std::nothrow) String;
1175 SysTryReturn(NID_APP, pAppId != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
1177 pEnum->GetStringAt(0, *pAppId);
1189 _PackageManagerImpl::CreatePackageTables(void)
1191 result r = E_SUCCESS;
1195 if (File::IsFileExist(PACKAGE_DATABASE_FILE_NAME) == true)
1197 SysLog(NID_APP, ".app-package.db is already existed!");
1201 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, true);
1202 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.Construct is failed. [%s]", GetErrorMessage(r));
1205 createQuery.Format(1024, L"CREATE TABLE IF NOT EXISTS PkgInfo"
1206 "( UNIQUE_ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
1211 "PKG_MIMETYPE TEXT,"
1212 "PKG_APIVERSION TEXT,"
1215 "PKG_DESCRIPTION TEXT,"
1218 "PKG_READONLY_SIZE INTEGER,"
1219 "PKG_DATA_SIZE INTEGER,"
1220 "PKG_PARENT_ID TEXT,"
1221 "PKG_ATTRIBUTE INTEGER,"
1222 "PKG_ROOTPATH TEXT,"
1223 "PKG_STORAGE_TYPE INTEGER,"
1224 "PKG_INSTALLATION_DATE TEXT,"
1225 "PKG_STATE INTEGER,"
1226 "PKG_INITIATOR INTEGER )");
1227 r = db.ExecuteSql(createQuery, true);
1228 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1229 createQuery.Clear();
1232 createQuery.Format(1024, L"CREATE TABLE IF NOT EXISTS PkgPrivileges"
1235 "HMAC_PPRIVILEGES TEXT,"
1236 "CERTIFICATE_TYPE INTEGER )");
1237 r = db.ExecuteSql(createQuery, true);
1238 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1239 createQuery.Clear();
1242 createQuery.Format(1024, L"CREATE TABLE IF NOT EXISTS PkgIntegrity"
1245 "HMAC_APPSECRET TEXT,"
1247 "SLOT_NUM INTEGER )");
1248 r = db.ExecuteSql(createQuery, true);
1249 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1250 createQuery.Clear();
1253 createQuery.Format(1024, L"CREATE TABLE IF NOT EXISTS AppInfo"
1254 "( UNIQUE_ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
1259 "APP_MAINMENU_ICON TEXT,"
1260 "APP_SETTING_ICON TEXT,"
1261 "APP_TICKER_ICON TEXT,"
1262 "APP_QUICKPANEL_ICON TEXT,"
1263 "APP_LAUNCHIMAGE_ICON TEXT,"
1264 "APP_FEATURE INTEGER,"
1265 "PACKAGE_NAME TEXT )");
1266 r = db.ExecuteSql(createQuery, true);
1267 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1268 createQuery.Clear();
1271 createQuery.Format(1024, L"CREATE TABLE IF NOT EXISTS Notification"
1275 r = db.ExecuteSql(createQuery, true);
1276 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1277 createQuery.Clear();
1280 createQuery.Format(1024, L"CREATE TABLE IF NOT EXISTS AppFeature"
1284 r = db.ExecuteSql(createQuery, true);
1285 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1286 createQuery.Clear();
1289 createQuery.Format(1024, L"CREATE TABLE IF NOT EXISTS LaunchCondition"
1293 r = db.ExecuteSql(createQuery, true);
1294 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1295 createQuery.Clear();
1298 createQuery.Format(1024, L"CREATE TABLE IF NOT EXISTS DataControl"
1303 r = db.ExecuteSql(createQuery, true);
1304 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1305 createQuery.Clear();
1308 createQuery.Format(1024, L"CREATE TABLE IF NOT EXISTS Capability"
1309 "( ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
1310 "OPERATION_ID TEXT )");
1311 r = db.ExecuteSql(createQuery, true);
1312 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1313 createQuery.Clear();
1315 // ResolutionUriScheme
1316 createQuery.Format(1024, L"CREATE TABLE IF NOT EXISTS ResolutionUriScheme"
1317 "( ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
1318 "URI_SCHEME TEXT )");
1319 r = db.ExecuteSql(createQuery, true);
1320 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1321 createQuery.Clear();
1323 // ResolutionMimeType
1324 createQuery.Format(1024, L"CREATE TABLE IF NOT EXISTS ResolutionMimeType"
1325 "( ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
1326 "MIME_TYPE TEXT )");
1327 r = db.ExecuteSql(createQuery, true);
1328 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1329 createQuery.Clear();
1332 createQuery.Format(1024, L"CREATE TABLE IF NOT EXISTS AppControl"
1333 "( ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
1336 r = db.ExecuteSql(createQuery, true);
1337 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1338 createQuery.Clear();
1341 createQuery.Format(1024, L"CREATE TABLE IF NOT EXISTS AppInfoLookup"
1342 "( AppInfoID INTEGER,"
1343 "CapabilityID INTEGER,"
1344 "ResolutionUriSchemeID INTEGER,"
1345 "ResolutionMimeTypeID INTEGER,"
1346 "AppControlID INTEGER )");
1347 r = db.ExecuteSql(createQuery, true);
1348 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "MakePackageDb: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1349 createQuery.Clear();
1355 _PackageManagerImpl::RegisterPackageInfo(_PackageInfoImpl& pkgInfoImpl)
1357 result r = E_SUCCESS;
1359 DbStatement* pStmt = null;
1360 DbEnumerator* pEnum = null;
1363 String hmacPrivileges;
1364 PackageInfo packageInfo;
1367 SysLog(NID_APP, "_PackageManagerImpl::RegisterPackageInfo()");
1370 1024, L"INSERT INTO PkgInfo "
1371 "(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,"
1372 " PKG_ATTRIBUTE, PKG_ROOTPATH, PKG_STORAGE_TYPE, PKG_INSTALLATION_DATE, PKG_STATE, PKG_INITIATOR) "
1373 "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
1375 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, false);
1376 //SysTryCatch(NID_APP, r == E_SUCCESS, r, r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1378 pStmt = CreateStatementN(db, query);
1379 //SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1381 PackageId packageId = pkgInfoImpl.GetAppId();
1382 String appVersion = pkgInfoImpl.GetAppVersion();
1383 String type = pkgInfoImpl.GetAppType();
1384 String appMimeType = pkgInfoImpl.GetAppMimeType();
1385 String appApiVersion = pkgInfoImpl.GetAppApiVersion();
1386 String appName = pkgInfoImpl.GetAppName();
1387 String appVendor = pkgInfoImpl.GetAppVendor();
1388 String appDescription = pkgInfoImpl.GetAppDescription();
1389 String appUrl = pkgInfoImpl.GetAppUrl();
1390 String appCid = pkgInfoImpl.GetAppCid();
1392 pkgInfoImpl.GetPrivilegesValue(privileges, hmacPrivileges);
1393 String appRootPath = pkgInfoImpl.GetAppRootPath();
1394 int appStorageType = pkgInfoImpl.GetAppStorageType();
1395 int certType = pkgInfoImpl.GetCertType();
1396 ArrayList* pAppInfoImplList = pkgInfoImpl.GetAppInfoList();
1399 r = SystemTime::GetCurrentTime(time);
1400 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "An error occurs while getting a current time.");
1402 if (!packageId.IsEmpty())
1404 r = pStmt->BindString(0, packageId);
1405 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1408 if (!appVersion.IsEmpty())
1410 r = pStmt->BindString(2, appVersion);
1411 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1414 if (!type.IsEmpty())
1416 r = pStmt->BindString(3, type);
1417 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1420 if (!appMimeType.IsEmpty())
1422 r = pStmt->BindString(4, appMimeType);
1423 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1426 if (!appApiVersion.IsEmpty())
1428 r = pStmt->BindString(5, appApiVersion);
1429 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1432 if (!appName.IsEmpty())
1434 r = pStmt->BindString(6, appName);
1435 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1438 if (!appVendor.IsEmpty())
1440 r = pStmt->BindString(7, appVendor);
1441 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1444 if (!appDescription.IsEmpty())
1446 r = pStmt->BindString(8, appDescription);
1447 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1450 if (!appUrl.IsEmpty())
1452 r = pStmt->BindString(9, appUrl);
1453 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1456 if (!appCid.IsEmpty())
1458 r = pStmt->BindString(10, appCid);
1459 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1462 if (!appRootPath.IsEmpty())
1464 r = pStmt->BindString(15, appRootPath);
1465 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1468 if (appStorageType != 0)
1470 r = pStmt->BindInt(16, appStorageType);
1471 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1474 r = pStmt->BindDateTime(17, time);
1475 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1477 pEnum = ExecuteStatementN(db, pStmt);
1479 r = GetLastResult();
1481 uniqueId = pkgInfoImpl.GetUniqueId();
1483 SysLog(NID_APP, "_PackageManagerImpl::RegisterPackageInfo()-GetUniqueId(%d)", uniqueId);
1488 RegisterAppInfoList(uniqueId, pAppInfoImplList);
1491 RegisterPrivileges(uniqueId, privileges, hmacPrivileges, certType);
1501 _PackageManagerImpl::UnregisterPackageInfo(const PackageId& packageId)
1503 SysLog(NID_APP, "packageId = [%ls]", packageId.GetPointer());
1505 result r = E_SUCCESS;
1509 PackageInfo* pPkgInfo;
1510 _PackageInfoImpl* pPackageInfoImpl = null;
1511 ArrayList* pList = null;
1513 pPkgInfo = GetPackageInfoN(packageId);
1514 SysTryReturn(NID_APP, pPkgInfo != null, r, r, "UnregisterPackageInfo: GetUniqueId() is invalid. [%d]", id);
1516 pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPkgInfo);
1517 pPackageInfoImpl->SetAppId(packageId);
1518 id = pPackageInfoImpl->GetUniqueId();
1519 SysTryReturn(NID_APP, id > 0, r, r, "UnregisterPackageInfo: GetUniqueId() is invalid. [%d]", id);
1521 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, false);
1522 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "UnregisterPackageInfo: db.Construct is failed. [%s]", GetErrorMessage(r));
1525 pList = pPackageInfoImpl->GetAppInfoListN();
1528 for (int i = 0; i < pList->GetCount(); i++)
1530 _PackageAppInfoImpl* pAppInfoImpl = dynamic_cast <_PackageAppInfoImpl*>(pList->GetAt(i));
1532 if (pAppInfoImpl != null)
1535 uniqueId = pAppInfoImpl->GetUniqueId();
1537 query.Format(1024, L"DELETE FROM AppInfoLookup WHERE AppInfoID = %d", uniqueId);
1538 r = db.ExecuteSql(query, true);
1539 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "UnregisterPackageInfo: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1547 query.Format(1024, L"DELETE FROM PkgInfo WHERE PKG_ID = '%ls'", packageId.GetPointer());
1548 r = db.ExecuteSql(query, true);
1549 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "UnregisterPackageInfo: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1553 query.Format(1024, L"DELETE FROM AppInfo WHERE ID = %d", id);
1554 r = db.ExecuteSql(query, true);
1555 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "UnregisterPackageInfo: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1559 query.Format(1024, L"DELETE FROM PkgPrivileges WHERE ID = %d", id);
1560 r = db.ExecuteSql(query, true);
1561 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "UnregisterPackageInfo: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1565 query.Format(1024, L"DELETE FROM DataControl WHERE ID = %d", id);
1566 r = db.ExecuteSql(query, true);
1567 SysTryReturn(NID_APP, r == E_SUCCESS, r, r, "UnregisterPackageInfo: db.ExecuteSql is failed. [%s]", GetErrorMessage(r));
1575 _PackageManagerImpl::GetPackageInfoN(const String& providerId, const String& operationId) const
1577 result r = E_SUCCESS;
1578 PackageInfo* pPkgInfo = null;
1580 DbStatement* pStmt = null;
1581 DbEnumerator* pEnum = null;
1584 query.Format(1024, L"SELECT PkgInfo.PKG_ID FROM PkgInfo, AppInfo, AppInfoLookup, AppControl, Capability "
1585 "WHERE AppControl.PROVIDER_ID ='%ls' and Capability.OPERATION_ID ='%ls' and AppControl.ID = AppInfoLookup.AppControlID "
1586 "and Capability.ID = AppInfoLookup.CapabilityID and AppInfoLookup.AppInfoID = AppInfo.UNIQUE_ID and AppInfo.ID = PkgInfo.UNIQUE_ID "
1587 "GROUP BY AppInfoID"
1588 , providerId.GetPointer(), operationId.GetPointer());
1590 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, false);
1591 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1593 pStmt = CreateStatementN(db, query);
1594 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1596 pEnum = ExecuteStatementN(db, pStmt);
1599 if (pEnum->MoveNext() == E_SUCCESS)
1601 PackageId packageId;
1602 pEnum->GetStringAt(0, packageId);
1604 pPkgInfo = GetPackageInfoN(packageId);
1611 r = E_OBJ_NOT_FOUND;
1620 _PackageManagerImpl::GetAppInfo(int uniqueId, _PackageAppInfoImpl& appInfo) const
1622 result r = E_SUCCESS;
1624 DbStatement* pStmt = null;
1625 DbEnumerator* pEnum = null;
1628 query.Format(1024, L"SELECT * FROM AppInfo WHERE UNIQUE_ID = %d", uniqueId);
1630 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, false);
1631 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1633 pStmt = CreateStatementN(db, query);
1634 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1636 pEnum = ExecuteStatementN(db, pStmt);
1639 if (pEnum->MoveNext() == E_SUCCESS)
1645 String mainmenuIcon;
1648 String quickpanelIcon;
1649 String launchImageIcon;
1653 pEnum->GetIntAt(0, uniqueId);
1654 pEnum->GetIntAt(1, pkgId);
1655 pEnum->GetStringAt(2, name);
1656 pEnum->GetStringAt(3, defaultapp);
1657 pEnum->GetStringAt(4, mainmenuIcon);
1658 pEnum->GetStringAt(5, settingIcon);
1659 pEnum->GetStringAt(7, quickpanelIcon);
1660 pEnum->GetIntAt(9, appFeature);
1661 pEnum->GetStringAt(10, packageName);
1663 appInfo.SetUniqueId(uniqueId);
1664 appInfo.SetPkgId(pkgId);
1665 appInfo.SetName(name);
1666 appInfo.SetDefault(defaultapp);
1667 appInfo.SetMainmenuIcon(mainmenuIcon);
1668 appInfo.SetSettingIcon(settingIcon);
1669 appInfo.SetQuickpanelIcon(quickpanelIcon);
1670 appInfo.SetAppFeature(appFeature);
1671 appInfo.SetPackageName(packageName);
1678 r = E_OBJ_NOT_FOUND;
1687 _PackageManagerImpl::GetPackageAppInfoImplListN(const String& packageId) const
1689 result r = E_SUCCESS;
1691 DbStatement* pStmt = null;
1692 DbEnumerator* pEnum = null;
1695 PackageInfo* pPkgInfo = null;
1696 _PackageInfoImpl* pPackageInfoImpl = null;
1697 ArrayList* pList = null;
1699 pPkgInfo = GetPackageInfoN(packageId);
1700 SysTryCatch(NID_APP, pPkgInfo != null, , r, "[%s] GetPackageInfoN() is failed", GetErrorMessage(r));
1702 pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPkgInfo);
1703 query.Format(1024, L"SELECT * FROM AppInfo WHERE ID = %d", pPackageInfoImpl->GetUniqueId());
1705 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, false);
1706 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1708 pStmt = CreateStatementN(db, query);
1709 SysTryCatch(NID_APP, pStmt != null, GetLastResult(),
1710 GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1712 pEnum = ExecuteStatementN(db, pStmt);
1716 pList = new (std::nothrow) ArrayList;
1717 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Container allocation failure.");
1721 while (pEnum->MoveNext() == E_SUCCESS)
1723 _PackageAppInfoImpl* pPackageAppInfoImpl = new (std::nothrow) _PackageAppInfoImpl;
1724 SysTryReturn(NID_APP, pPackageAppInfoImpl != null, null, E_OUT_OF_MEMORY, "pPackageAppInfoImpl instance must not be null.");
1730 String mainmenuIcon;
1732 String quickpanelIcon;
1736 pEnum->GetIntAt(0, uniqueId);
1737 pEnum->GetIntAt(1, pkgId);
1738 pEnum->GetStringAt(2, name);
1739 pEnum->GetStringAt(3, defaultapp);
1740 pEnum->GetStringAt(4, mainmenuIcon);
1741 pEnum->GetStringAt(5, settingIcon);
1742 pEnum->GetStringAt(7, quickpanelIcon);
1743 pEnum->GetIntAt(9, appFeature);
1744 pEnum->GetStringAt(10, packageName);
1746 pPackageAppInfoImpl->SetUniqueId(uniqueId);
1747 pPackageAppInfoImpl->SetPkgId(pkgId);
1748 pPackageAppInfoImpl->SetName(name);
1749 pPackageAppInfoImpl->SetDefault(defaultapp);
1750 pPackageAppInfoImpl->SetMainmenuIcon(mainmenuIcon);
1751 pPackageAppInfoImpl->SetSettingIcon(settingIcon);
1752 pPackageAppInfoImpl->SetQuickpanelIcon(quickpanelIcon);
1753 pPackageAppInfoImpl->SetAppFeature(appFeature);
1754 pPackageAppInfoImpl->SetPackageName(packageName);
1756 pList->Add(*pPackageAppInfoImpl);
1769 _PackageManagerImpl::GetPackageAppFeatureListN(const PackageId& packageId, const Tizen::Base::String& appExecutableName) const
1771 ArrayList* pAppInfoList = GetPackageAppInfoImplListN(packageId);
1772 SysTryReturn(NID_APP, pAppInfoList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] AppInfo list instance must not be null.");
1774 ArrayList* pResult = null;
1776 for (int i = 0; i < pAppInfoList->GetCount(); i++)
1778 const _PackageAppInfoImpl* pAppInfoImpl = static_cast<const _PackageAppInfoImpl*>(pAppInfoList->GetAt(i));
1779 if (pAppInfoImpl == null)
1784 if (pAppInfoImpl->GetName() == appExecutableName)
1786 pResult = pAppInfoImpl->GetAppFeatureListN();
1792 pAppInfoList->RemoveAll(true);
1793 delete pAppInfoList;
1798 HashMapT<String, _AppFeatureInfoImpl*>*
1799 _PackageManagerImpl::GetPackageAppFeatureMapN(const PackageId& packageId, const Tizen::Base::String& appExecutableName) const
1801 ArrayList* pAppInfoList = GetPackageAppInfoImplListN(packageId);
1802 SysTryReturn(NID_APP, pAppInfoList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] AppInfo list instance must not be null.");
1804 HashMapT<String, _AppFeatureInfoImpl*>* pResult = null;
1806 std::auto_ptr<IEnumerator> pEnum(pAppInfoList->GetEnumeratorN());
1808 while (pEnum->MoveNext() == E_SUCCESS)
1810 const _PackageAppInfoImpl* pAppInfoImpl = static_cast<const _PackageAppInfoImpl*>(pEnum->GetCurrent());
1811 if (pAppInfoImpl == null)
1816 if (pAppInfoImpl->GetName() == appExecutableName)
1818 pResult = pAppInfoImpl->GetAppFeatureMapN();
1824 pAppInfoList->RemoveAll(true);
1825 delete pAppInfoList;
1831 _PackageManagerImpl::GetAppLaunchConditionListN(const String& packageName) const
1833 result r = E_SUCCESS;
1835 DbStatement* pStmt = null;
1836 DbEnumerator* pEnum = null;
1838 ArrayList* pList = null;
1840 query.Format(1024, L"SELECT LaunchCondition.* FROM LaunchCondition, AppInfo WHERE AppInfo.UNIQUE_ID = LaunchCondition.ID and AppInfo.PACKAGE_NAME = '%ls'", packageName.GetPointer());
1842 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, false);
1843 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1845 pStmt = CreateStatementN(db, query);
1846 SysTryCatch(NID_APP, pStmt != null, GetLastResult(),
1847 GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1849 pEnum = ExecuteStatementN(db, pStmt);
1852 pList = new (std::nothrow) ArrayList;
1853 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Container allocation failure.");
1857 while (pEnum->MoveNext() == E_SUCCESS)
1859 _LaunchConditionInfoImpl* pLaunchCondtion = new (std::nothrow) _LaunchConditionInfoImpl;
1860 SysTryReturn(NID_APP, pLaunchCondtion != null, null, E_OUT_OF_MEMORY, "pLaunchCondtion instance must not be null.");
1865 pEnum->GetStringAt(1, name);
1866 pEnum->GetStringAt(2, value);
1868 pLaunchCondtion->SetName(name);
1869 pLaunchCondtion->SetValue(value);
1871 pList->Add(*pLaunchCondtion);
1873 SysLog(NID_APP, "Name[%ls], Value[%ls]", name.GetPointer(), value.GetPointer());
1885 _PackageManagerImpl::RegisterAppInfoList(int id, ArrayList* pList)
1887 SysTryReturnResult(NID_APP, __pDb != null, E_SYSTEM, "__pDb is null");
1889 result r = E_SUCCESS;
1891 DbStatement* pStmt = null;
1895 for (int i = 0; i < pList->GetCount(); i++)
1897 _PackageAppInfoImpl* pAppInfoImpl = dynamic_cast <_PackageAppInfoImpl*>(pList->GetAt(i));
1899 if (pAppInfoImpl != null)
1901 DbEnumerator* pEnum = null;
1904 String name = pAppInfoImpl->GetName();
1905 String defaultapp = pAppInfoImpl->GetDefault();
1906 String mainmenuIcon = pAppInfoImpl->GetMainmenuIcon();
1907 String settingIcon = pAppInfoImpl->GetSettingIcon();
1908 String quickpanelIcon = pAppInfoImpl->GetQuickpanelIcon();
1909 int appFeature = pAppInfoImpl->GetAppFeature();
1910 String packageName = pAppInfoImpl->GetPackageName();
1911 String type = pAppInfoImpl->GetType();
1913 ArrayList* pLaunchConditionImplList = pAppInfoImpl->GetLaunchConditionList();
1914 ArrayList* pNotificationImplList = pAppInfoImpl->GetNotificationList();
1915 ArrayList* pAppFeatureImplList = pAppInfoImpl->GetAppFeatureList();
1916 ArrayList* pDataControlImplList = pAppInfoImpl->GetDataControlList();
1919 1024, L"INSERT INTO AppInfo "
1920 "(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) "
1921 "VALUES (?,?,?,?,?,?,?,?,?,?,?)");
1923 pStmt = CreateStatementN(*__pDb, query);
1924 //SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1928 r = pStmt->BindInt(0, id);
1929 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1932 if (!name.IsEmpty())
1934 r = pStmt->BindString(1, name);
1935 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1938 if (!defaultapp.IsEmpty())
1940 r = pStmt->BindString(2, defaultapp);
1941 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1944 if (!mainmenuIcon.IsEmpty())
1946 r = pStmt->BindString(3, mainmenuIcon);
1947 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1950 if (!settingIcon.IsEmpty())
1952 r = pStmt->BindString(4, settingIcon);
1953 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1956 if (!quickpanelIcon.IsEmpty())
1958 r = pStmt->BindString(6, quickpanelIcon);
1959 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1962 if (appFeature != 0)
1964 r = pStmt->BindInt(8, appFeature);
1965 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1968 if (!packageName.IsEmpty())
1970 r = pStmt->BindString(9, packageName);
1971 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1974 if (!type.IsEmpty())
1976 r = pStmt->BindString(10, type);
1977 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
1980 pEnum = ExecuteStatementN(*__pDb, pStmt);
1987 pAppInfoImpl->SetPkgId(id);
1988 uniqueId = pAppInfoImpl->GetUniqueId();
1989 RegisterLaunchConditionList(uniqueId, pLaunchConditionImplList);
1990 RegisterNotificationList(uniqueId, pNotificationImplList);
1991 RegisterAppFeatureList(uniqueId, pAppFeatureImplList);
1992 RegisterDataControlList(uniqueId, pDataControlImplList);
1993 //RegisterAppControlList(uniqueId, pAppControlImplList);
1998 r = GetLastResult();
2007 _PackageManagerImpl::RegisterLaunchConditionList(int id, ArrayList* pList)
2009 SysTryReturnResult(NID_APP, __pDb != null, E_SYSTEM, "__pDb is null");
2011 result r = E_SUCCESS;
2013 DbStatement* pStmt = null;
2017 for (int i = 0; i < pList->GetCount(); i++)
2019 _LaunchConditionInfoImpl* pLaunchCondition = dynamic_cast<_LaunchConditionInfoImpl*>(pList->GetAt(i));
2021 if (pLaunchCondition != null)
2023 DbEnumerator* pEnum = null;
2025 String name = pLaunchCondition->GetName();
2026 String value = pLaunchCondition->GetValue();
2028 query.Format(1024, L"INSERT INTO LaunchCondition (ID, NAME, VALUE) VALUES (?,?,?)");
2030 pStmt = CreateStatementN(*__pDb, query);
2031 //SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
2035 r = pStmt->BindInt(0, id);
2036 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2039 if (!name.IsEmpty())
2041 r = pStmt->BindString(1, name);
2042 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2045 if (!value.IsEmpty())
2047 r = pStmt->BindString(2, value);
2048 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2051 pEnum = ExecuteStatementN(*__pDb, pStmt);
2061 r = GetLastResult();
2070 _PackageManagerImpl::RegisterNotificationList(int id, ArrayList* pList)
2072 SysTryReturnResult(NID_APP, __pDb != null, E_SYSTEM, "__pDb is null");
2074 result r = E_SUCCESS;
2076 DbStatement* pStmt = null;
2080 for (int i = 0; i < pList->GetCount(); i++)
2082 _NotificationInfoImpl* pNotification = dynamic_cast<_NotificationInfoImpl*>(pList->GetAt(i));
2084 if (pNotification != null)
2086 DbEnumerator* pEnum = null;
2088 String name = pNotification->GetName();
2089 String value = pNotification->GetValue();
2091 query.Format(1024, L"INSERT INTO Notification (ID, NAME, VALUE) VALUES (?,?,?)");
2093 pStmt = CreateStatementN(*__pDb, query);
2094 //SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
2098 r = pStmt->BindInt(0, id);
2099 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2102 if (!name.IsEmpty())
2104 r = pStmt->BindString(1, name);
2105 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2108 if (!value.IsEmpty())
2110 r = pStmt->BindString(2, value);
2111 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2114 pEnum = ExecuteStatementN(*__pDb, pStmt);
2124 r = GetLastResult();
2133 _PackageManagerImpl::RegisterAppFeatureList(int id, ArrayList* pList)
2135 SysTryReturnResult(NID_APP, __pDb != null, E_SYSTEM, "__pDb is null");
2137 result r = E_SUCCESS;
2139 DbStatement* pStmt = null;
2143 for (int i = 0; i < pList->GetCount(); i++)
2145 _AppFeatureInfoImpl* pAppFeature = dynamic_cast<_AppFeatureInfoImpl*>(pList->GetAt(i));
2147 if (pAppFeature != null)
2149 DbEnumerator* pEnum = null;
2151 String name = pAppFeature->GetName();
2152 String value = pAppFeature->GetValue();
2154 query.Format(1024, L"INSERT INTO AppFeature (ID, NAME, VALUE) VALUES (?,?,?)");
2156 pStmt = CreateStatementN(*__pDb, query);
2157 //SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
2161 r = pStmt->BindInt(0, id);
2162 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2165 if (!name.IsEmpty())
2167 r = pStmt->BindString(1, name);
2168 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2171 if (!value.IsEmpty())
2173 r = pStmt->BindString(2, value);
2174 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2177 pEnum = ExecuteStatementN(*__pDb, pStmt);
2187 r = GetLastResult();
2196 _PackageManagerImpl::RegisterDataControlList(int id, ArrayList* pList)
2198 SysTryReturnResult(NID_APP, __pDb != null, E_SYSTEM, "__pDb is null");
2200 result r = E_SUCCESS;
2202 DbStatement* pStmt = null;
2206 for (int i = 0; i < pList->GetCount(); i++)
2208 _DataControlInfoImpl* pDataControl = dynamic_cast<_DataControlInfoImpl*>(pList->GetAt(i));
2210 if (pDataControl != null)
2212 DbEnumerator* pEnum = null;
2214 String providerId = pDataControl->GetProviderId();
2215 ArrayList* pTypeList = pDataControl->GetControlTypeList();
2217 if (pTypeList != null)
2219 for (int j = 0; j < pTypeList->GetCount(); j++)
2221 _DataControlTypeImpl* pControlType = dynamic_cast<_DataControlTypeImpl*>(pTypeList->GetAt(j));
2223 if (pControlType != null)
2225 String access = pControlType->GetAccess();
2226 String type = pControlType->GetType();
2228 query.Format(1024, L"INSERT INTO DataControl (ID, PROVIDER_ID, TYPE, ACCESS) VALUES (?,?,?,?)");
2230 pStmt = CreateStatementN(*__pDb, query);
2231 //SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
2235 r = pStmt->BindInt(0, id);
2236 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2239 if (!providerId.IsEmpty())
2241 r = pStmt->BindString(1, providerId);
2242 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2245 if (!type.IsEmpty())
2247 r = pStmt->BindString(2, type);
2248 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2251 if (!access.IsEmpty())
2253 r = pStmt->BindString(3, access);
2254 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2257 pEnum = ExecuteStatementN(*__pDb, pStmt);
2270 r = GetLastResult();
2279 _PackageManagerImpl::FindRecord(const String& tableName, const String& columnName, const String& value) const
2282 result r = E_SUCCESS;
2285 DbStatement* pStmt = null;
2286 DbEnumerator* pEnum = null;
2289 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, false);
2290 //SysTryCatch(NID_APP, r == E_SUCCESS, r, r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
2292 query.Format(1024, L"SELECT * FROM %ls WHERE %ls = '%ls'", tableName.GetPointer(), columnName.GetPointer(), value.GetPointer());
2294 pStmt = CreateStatementN(db, query);
2295 //SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
2297 pEnum = ExecuteStatementN(db, pStmt);
2301 if (pEnum->MoveNext() == E_SUCCESS)
2303 pEnum->GetIntAt(0, uniqueId);
2316 _PackageManagerImpl::GetRecord(const String& tableName, int uniqueId, const String& columnName, String& value) const
2318 result r = E_SUCCESS;
2321 DbStatement* pStmt = null;
2322 DbEnumerator* pEnum = null;
2324 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, false);
2325 //SysTryCatch(NID_APP, r == E_SUCCESS, r, r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
2327 query.Format(1024, L"SELECT %ls FROM %ls WHERE UNIQUE_ID = %d", columnName.GetPointer(), tableName.GetPointer(), uniqueId);
2329 pStmt = CreateStatementN(db, query);
2330 //SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
2332 pEnum = ExecuteStatementN(db, pStmt);
2336 if (pEnum->MoveNext() == E_SUCCESS)
2338 pEnum->GetStringAt(0, value);
2351 _PackageManagerImpl::RegisterPrivileges(int id, const String& privileges, const String& hmacPrivileges, int certType)
2353 SysTryReturnResult(NID_APP, __pDb != null, E_SYSTEM, "__pDb is null");
2355 result r = E_SUCCESS;
2357 DbStatement* pStmt = null;
2358 DbEnumerator* pEnum = null;
2360 query.Format(1024, L"INSERT INTO PkgPrivileges (ID, PRIVILEGES, HMAC_PPRIVILEGES, CERTIFICATE_TYPE) VALUES (?,?,?,?)");
2362 pStmt = CreateStatementN(*__pDb, query);
2363 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
2367 r = pStmt->BindInt(0, id);
2368 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2371 if (!privileges.IsEmpty())
2373 r = pStmt->BindString(1, privileges);
2374 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2377 if (!hmacPrivileges.IsEmpty())
2379 r = pStmt->BindString(2, hmacPrivileges);
2380 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2385 r = pStmt->BindInt(3, certType);
2386 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while constructing a database.", GetErrorMessage(r));
2389 pEnum = ExecuteStatementN(*__pDb, pStmt);
2396 r = GetLastResult();
2404 _PackageManagerImpl::GetPackageName(const PackageId& packageId, const String* pName, char* pPackageName, int bufferSize)
2406 result r = E_SUCCESS;
2408 DbStatement* pStmt = null;
2409 DbEnumerator* pEnum = null;
2411 Tizen::Base::String packageName;
2417 L"SELECT AppInfo.PACKAGE_NAME FROM AppInfo, PkgInfo WHERE AppInfo.ID = PkgInfo.UNIQUE_ID and AppInfo.APP_DEFAULT = '%s' and PkgInfo.PKG_ID = '%ls'",
2418 "True", packageId.GetPointer());
2424 L"SELECT AppInfo.PACKAGE_NAME FROM AppInfo, PkgInfo WHERE AppInfo.ID = PkgInfo.UNIQUE_ID and APP_NAME = '%ls' and PkgInfo.PKG_ID = '%ls'",
2425 pName->GetPointer(), packageId.GetPointer());
2428 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, false);
2429 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
2431 pStmt = CreateStatementN(db, query);
2432 SysTryCatch(NID_APP, pStmt != null, GetLastResult(),
2433 GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
2435 pEnum = ExecuteStatementN(db, pStmt);
2438 if (pEnum->MoveNext() == E_SUCCESS)
2440 pEnum->GetStringAt(0, packageName);
2441 snprintf(pPackageName, bufferSize, "%ls", packageName.GetPointer());
2447 r = E_OBJ_NOT_FOUND;
2457 _PackageManagerImpl::GetDefaultAppExecutableName(const PackageId& packageId)
2459 result r = E_SUCCESS;
2461 DbStatement* pStmt = null;
2462 DbEnumerator* pEnum = null;
2464 String executableName;
2468 L"SELECT AppInfo.APP_NAME FROM AppInfo, PkgInfo WHERE AppInfo.ID = PkgInfo.UNIQUE_ID and AppInfo.APP_DEFAULT = '%s' and PkgInfo.PKG_ID = '%ls'",
2469 "True", packageId.GetPointer());
2471 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, false);
2472 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
2474 pStmt = CreateStatementN(db, query);
2475 SysTryCatch(NID_APP, pStmt != null, GetLastResult(),
2476 GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
2478 pEnum = ExecuteStatementN(db, pStmt);
2481 if (pEnum->MoveNext() == E_SUCCESS)
2483 pEnum->GetStringAt(0, executableName);
2489 r = E_OBJ_NOT_FOUND;
2496 return executableName;
2500 _PackageManagerImpl::CreateStatementN(Database& db, const String& query)
2502 result r = E_SUCCESS;
2503 DbStatement* pStmt = null;
2505 for (int i = 0; i < MAX_DATABASE_RETRY_COUNT; i++)
2507 pStmt = db.CreateStatementN(query);
2508 r = GetLastResult();
2510 if (r != E_OBJECT_LOCKED)
2516 SysLog(NID_APP, "RetryCount[%d] CreateStatementN - E_OBJECT_LOCKED", i);
2527 _PackageManagerImpl::ExecuteStatementN(Database& db, const DbStatement* pStmt)
2529 result r = E_SUCCESS;
2530 DbEnumerator* pEnum = null;
2532 for (int i = 0; i < MAX_DATABASE_RETRY_COUNT; i++)
2534 pEnum = db.ExecuteStatementN(*pStmt);
2535 r = GetLastResult();
2537 if (r != E_OBJECT_LOCKED)
2543 SysLog(NID_APP, "RetryCount[%d] ExecuteStatementN - E_OBJECT_LOCKED", i);
2553 } } } // Tizen::App::Package