Add _PackageManagerServer class
authorDuyoung Jang <duyoung.jang@samsung.com>
Sat, 11 May 2013 08:59:54 +0000 (17:59 +0900)
committerDuyoung Jang <duyoung.jang@samsung.com>
Sat, 11 May 2013 09:01:59 +0000 (18:01 +0900)
Change-Id: I0a5ecdb9ba27dc90d6194564380c8e111087f03a
Signed-off-by: Duyoung Jang <duyoung.jang@samsung.com>
inc/FAppPkgPackageAppInfo.h
inc/FAppPkgPackageInfo.h
src/app/inc/FAppPkg_PackageParser.h
src/server/CMakeLists.txt
src/server/app/CMakeLists.txt
src/server/app/package/FAppPkg_PackageManagerServer.cpp [new file with mode: 0755]
src/server/inc/FAppPkg_PackageManagerServer.h [new file with mode: 0644]

index a774504..e6ce987 100755 (executable)
@@ -202,6 +202,7 @@ private:
        friend class _PackageInfoImpl;
        friend class _PackageManagerImpl;
        friend class _PackageParser;
+       friend class _PackageManagerServer;
 
 }; // PackageAppInfo
 
index 55fd3b6..65dc94d 100644 (file)
@@ -269,6 +269,7 @@ private:
 
        friend class _PackageInfoImpl;
        friend class _PackageManagerImpl;
+       friend class _PackageManagerServer;
 
 }; // PackageInfo
 
index e3d2c92..bd7d933 100644 (file)
@@ -107,7 +107,7 @@ private:
 }; // _PackageXmlHandler
 
 
-class _PackageParser
+class _OSP_EXPORT_ _PackageParser
        : public _PackageXmlHandler
 {
 public:
index a80df75..065bfdf 100644 (file)
@@ -14,6 +14,7 @@ INCLUDE_DIRECTORIES (
 
 SET (${this_target}_SOURCE_FILES
        app/FApp_AulServer.cpp
+       app/package/FAppPkg_PackageManagerServer.cpp
        io/FIo_IpcServer.cpp
        security/FSec_PrivilegeManagerServer.cpp
        )
index a4b51a4..ff461de 100755 (executable)
@@ -13,6 +13,7 @@ INCLUDE_DIRECTORIES (
 
 SET (${this_target}_SOURCE_FILES
        app/FApp_AulServer.cpp
+       package/FAppPkg_PackageManagerServer.cpp
        )
        
 ## SET EXTRA COMPILER FLAGS
diff --git a/src/server/app/package/FAppPkg_PackageManagerServer.cpp b/src/server/app/package/FAppPkg_PackageManagerServer.cpp
new file mode 100755 (executable)
index 0000000..fce03f9
--- /dev/null
@@ -0,0 +1,274 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+/**
+ * @file       FAppPkg_PackageManagerServer.cpp
+ * @brief      This is the implementation for the _PackageManagerServer class.
+ */
+
+#include <unique_ptr.h>
+
+#include <package-manager.h>
+#include <pkgmgr-info.h>
+#include <package-manager-types.h>
+
+#include <FAppPkgPackageAppInfo.h>
+#include <FAppPkgPackageInfo.h>
+#include <FBaseString.h>
+#include <FBaseSysLog.h>
+#include <FIoFile.h>
+#include <FAppPkg_PackageManagerServer.h>
+#include <FAppPkg_PackageAppInfoImpl.h>
+#include <FAppPkg_PackageInfoImpl.h>
+#include <FAppPkg_PackageParser.h>
+#include <FBase_StringConverter.h>
+
+using namespace Tizen::Base;
+using namespace Tizen::Io;
+
+namespace Tizen { namespace App { namespace Package
+{
+
+_PackageManagerServer::_PackageManagerServer(void)
+{
+}
+
+_PackageManagerServer::~_PackageManagerServer(void)
+{
+}
+
+_PackageManagerServer*
+_PackageManagerServer::GetInstance(void)
+{
+       static _PackageManagerServer* pPackageManagerServer = null;
+
+       if (pPackageManagerServer == null)
+       {
+               pPackageManagerServer = new (std::nothrow) _PackageManagerServer();
+               SysTryReturn(NID_APP, pPackageManagerServer != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pPackageManagerServer is null.");
+       }
+
+       return pPackageManagerServer;
+}
+
+PackageInfo*
+_PackageManagerServer::GetPackageInfoFromFileN(const String& filePath) const
+{
+       SysTryReturn(NID_APP, filePath.IsEmpty() == false, null, E_INVALID_ARG, "filePath is empty.");
+       SysTryReturn(NID_APP, File::IsFileExist(filePath) == true, null, E_FILE_NOT_FOUND, "package is not existed.");
+
+       String extension = File::GetFileExtension(filePath);
+       SysTryReturn(NID_APP, extension.IsEmpty() == false, null, E_INVALID_ARG, "extension is empty.");
+
+       std::unique_ptr<char[]> pPackagePath(_StringConverter::CopyToCharArrayN(filePath));
+       SysTryReturn(NID_APP, pPackagePath, null, E_OUT_OF_MEMORY, "pPackagePath is null.");
+
+       std::unique_ptr<char[]> pExtension(_StringConverter::CopyToCharArrayN(extension));
+       SysTryReturn(NID_APP, pExtension, null, E_OUT_OF_MEMORY, "pExtension is null.");
+
+       std::unique_ptr< PackageInfo > pPackageInfo(new (std::nothrow) PackageInfo);
+       SysTryReturn(NID_APP, pPackageInfo, null, E_OUT_OF_MEMORY, "pPackageInfo instance must not be null.");
+
+       SysLog(NID_APP, "packagePath = [%s], extension = [%s]", pPackagePath.get(), pExtension.get());
+
+       bool res = true;
+       result r = E_SUCCESS;
+
+       if (strcasecmp(pExtension.get(), "tpk") == 0)
+       {
+               _PackageParser packageParser;
+
+               res = packageParser.Construct(pPackageInfo.get());
+               SysTryReturn(NID_APP, res, null, E_PARSING_FAILED, "Construct() is failed. [%s]", pPackagePath.get());
+
+               res = packageParser.Parse(filePath);
+               SysTryReturn(NID_APP, res, null, E_PARSING_FAILED, "Parse() is failed. [%s]", pPackagePath.get());
+       }
+       else if (strcasecmp(pExtension.get(), "wgt") == 0)
+       {
+               pkgmgr_info* pPkgmgrInfo = null;
+
+               pPkgmgrInfo = pkgmgr_client_check_pkginfo_from_file(pPackagePath.get());
+               SysTryReturn(NID_APP, pPkgmgrInfo, null, E_PARSING_FAILED, "pkgmgr_client_check_pkginfo_from_file(%s) is failed.", pPackagePath.get());
+
+               _package_manager_pkg_detail_info_t* pPkgInfo = (_package_manager_pkg_detail_info_t*) pPkgmgrInfo;
+               _PackageInfoImpl* pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPackageInfo.get());
+
+               SysLog(NID_APP, "package(%s), version(%s), label(%s), description(%s), author(%s), icon_size(%d), pkgname(%s)", pPkgInfo->pkgid, pPkgInfo->version, pPkgInfo->label,
+                               pPkgInfo->pkg_description, pPkgInfo->author, pPkgInfo->icon_size, pPkgInfo->pkg_name);
+
+               pPackageInfoImpl->SetType(PACKAGE_TYPE_WGT);
+               pPackageInfoImpl->SetId(pPkgInfo->pkgid);
+               pPackageInfoImpl->SetVersion(pPkgInfo->version);
+               pPackageInfoImpl->SetDisplayName(pPkgInfo->label);
+               pPackageInfoImpl->SetDescription(pPkgInfo->pkg_description);
+               pPackageInfoImpl->SetAuthor(pPkgInfo->author);
+               pPackageInfoImpl->SetMainAppId(pPkgInfo->pkg_name);
+
+               if (pPkgInfo->privilege_list)
+               {
+                       GList* pList = null;
+                       pList = g_list_first(pPkgInfo->privilege_list);
+                       while (pList)
+                       {
+                               char* pPrivilege = (char*)pList->data;
+                               if (pPrivilege)
+                               {
+                                       pPackageInfoImpl->AddPrivilege(*new (std::nothrow) String(pPrivilege));
+                                       free(pPrivilege);
+                               }
+                               pList = g_list_next(pList);
+                       }
+                       g_list_free(pPkgInfo->privilege_list);
+               }
+
+               std::unique_ptr< PackageAppInfo > pPackageAppInfo(new (std::nothrow) PackageAppInfo);
+               if (pPackageAppInfo)
+               {
+                       _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo.get());
+
+                       pPackageAppInfoImpl->SetAppId(pPkgInfo->pkg_name);
+                       pPackageAppInfoImpl->SetAppName(pPkgInfo->label);
+                       pPackageAppInfoImpl->SetAppDisplayName(pPkgInfo->label);
+                       pPackageAppInfoImpl->SetMainApp(true);
+                       if ((pPkgInfo->icon_buf) && (pPkgInfo->icon_size > 0))
+                       {
+                               String iconPath("/tmp/icon.png");
+                               File file;
+                               r = file.Construct(iconPath, "w+");
+                               r = file.Write(pPkgInfo->icon_buf, pPkgInfo->icon_size);
+
+                               pPackageAppInfoImpl->SetAppTempIconPath(iconPath);
+                       }
+
+                       pPackageInfoImpl->AddPackageAppInfo(*pPackageAppInfo.release());
+               }
+               else
+               {
+                       SysLog(NID_APP, "pPackageAppInfo instance must not be null.");
+                       pkgmgr_client_free_pkginfo(pPkgmgrInfo);
+                       return null;
+               }
+
+               pkgmgr_client_free_pkginfo(pPkgmgrInfo);
+       }
+       else
+       {
+               SysTryReturn(NID_APP, false, null, E_UNSUPPORTED_FORMAT, "invalid extension! - packagePath = [%s], extension = [%s]", pPackagePath.get(), pExtension.get());
+       }
+
+       return pPackageInfo.release();
+}
+
+long long
+_PackageManagerServer::GetSize(const PackageId& packageId) const
+{
+       int res = PMINFO_R_OK;
+       pkgmgrinfo_pkginfo_h handle = null;
+       int size = 0;
+
+       std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
+       SysTryReturn(NID_APP, pPackageId, 0, E_OUT_OF_MEMORY, "pPackageId is null.");
+
+       res = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &handle);
+       SysTryReturn(NID_APP, res == PMINFO_R_OK, 0, E_PKG_NOT_INSTALLED, "pkgmgrinfo_pkginfo_get_pkginfo() is failed. result=[%d], package=[%s]", res, pPackageId.get());
+       SysTryReturn(NID_APP, handle, 0, E_SYSTEM, "[E_SYSTEM] handle is null.");
+
+       res = pkgmgrinfo_pkginfo_get_total_size(handle, &size);
+       if (res == PMINFO_R_OK)
+       {
+               SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_total_size(): size = [%d]", size);
+       }
+       else
+       {
+               SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_total_size() is failed. result = [%d]", res);
+       }
+
+       pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+
+       return (long long) size;
+}
+
+long long
+_PackageManagerServer::GetDataSize(const PackageId& packageId) const
+{
+       int res = PMINFO_R_OK;
+       pkgmgrinfo_pkginfo_h handle = null;
+       int dataSize = 0;
+
+       std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
+       SysTryReturn(NID_APP, pPackageId, 0, E_OUT_OF_MEMORY, "pPackageId is null.");
+
+       res = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &handle);
+       SysTryReturn(NID_APP, res == PMINFO_R_OK, 0, E_PKG_NOT_INSTALLED, "pkgmgrinfo_pkginfo_get_pkginfo() is failed. result=[%d], package=[%s]", res, pPackageId.get());
+       SysTryReturn(NID_APP, handle, 0, E_SYSTEM, "[E_SYSTEM] handle is null.");
+
+       res = pkgmgrinfo_pkginfo_get_data_size(handle, &dataSize);
+       if (res == PMINFO_R_OK)
+       {
+               SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_total_size(): dataSize = [%d]", dataSize);
+       }
+       else
+       {
+               SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_total_size() is failed. result = [%d]", res);
+       }
+
+       pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+
+       return (long long) dataSize;
+}
+
+PackageType
+_PackageManagerServer::GetType(const PackageId& packageId) const
+{
+       int res = PMINFO_R_OK;
+       pkgmgrinfo_pkginfo_h handle = null;
+       PackageType packageType = PACKAGE_TYPE_TPK;
+       char* pType = null;
+       String type;
+
+       std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
+       SysTryReturn(NID_APP, pPackageId, PACKAGE_TYPE_TPK, E_OUT_OF_MEMORY, "pPackageId is null.");
+
+       res = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &handle);
+       SysTryReturn(NID_APP, res == PMINFO_R_OK, PACKAGE_TYPE_TPK, E_PKG_NOT_INSTALLED, "pkgmgrinfo_pkginfo_get_pkginfo() is failed. result=[%d], package=[%s]", res, pPackageId.get());
+       SysTryReturn(NID_APP, handle, PACKAGE_TYPE_TPK, E_SYSTEM, "[E_SYSTEM] handle is null.");
+
+       res = pkgmgrinfo_pkginfo_get_type(handle, &pType);
+       if (res == PMINFO_R_OK)
+       {
+               SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_type(): type = [%s]", pType);
+               type = *pType;
+
+               if (strcmp(pType, "tpk") == 0)
+               {
+                       packageType = PACKAGE_TYPE_TPK;
+               }
+               else if (strcmp(pType, "wgt") == 0)
+               {
+                       packageType = PACKAGE_TYPE_WGT;
+               }
+       }
+       else
+       {
+               SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_type() is failed. result = [%d]", res);
+       }
+
+       pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+
+       return packageType;
+}
+
+} } } // Tizen::App::Package
diff --git a/src/server/inc/FAppPkg_PackageManagerServer.h b/src/server/inc/FAppPkg_PackageManagerServer.h
new file mode 100644 (file)
index 0000000..d01090f
--- /dev/null
@@ -0,0 +1,59 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file       FAppPkg_PackageManagerServer.h
+ * @brief      This is the header file for the _PackageManagerServer class.
+ */
+
+#ifndef _FAPP_PKG_INTERNAL_PACKAGE_MANAGER_SERVER_H_
+#define _FAPP_PKG_INTERNAL_PACKAGE_MANAGER_SERVER_H_
+
+#include <FAppPkgPackageManager.h>
+#include <FApp_Types.h>
+
+namespace Tizen { namespace Base
+{
+class String;
+}}
+
+namespace Tizen { namespace App { namespace Package
+{
+
+class PackageInfo;
+
+class _OSP_EXPORT_ _PackageManagerServer
+       : public Tizen::Base::Object
+{
+public:
+       static _PackageManagerServer* GetInstance(void);
+
+       PackageInfo* GetPackageInfoFromFileN(const Tizen::Base::String& filePath) const;
+       long long GetSize(const Tizen::App::PackageId& packageId) const;
+       long long GetDataSize(const Tizen::App::PackageId& packageId) const;
+       PackageType GetType(const Tizen::App::PackageId& packageId) const;
+
+
+private:
+       _PackageManagerServer(void);
+       virtual ~_PackageManagerServer(void);
+
+
+}; // _PackageManagerServer
+
+} } } // Tizen::App::Package
+
+#endif // _FAPP_PKG_INTERNAL_PACKAGE_MANAGER_SERVER_H_