From 5a036ff4525f485ee44cbc53e05452508a9cbe15 Mon Sep 17 00:00:00 2001 From: Piotr Ganicz Date: Tue, 21 Jun 2016 10:50:51 +0200 Subject: [PATCH] Refactoring StepParse Change-Id: Ib396f828909c4c114c82876b504c37bdb682a128 --- src/wgt/step/configuration/step_parse.cc | 134 +++++++++++++++---------------- src/wgt/step/configuration/step_parse.h | 11 ++- 2 files changed, 74 insertions(+), 71 deletions(-) diff --git a/src/wgt/step/configuration/step_parse.cc b/src/wgt/step/configuration/step_parse.cc index 24c359b..602df3f 100644 --- a/src/wgt/step/configuration/step_parse.cc +++ b/src/wgt/step/configuration/step_parse.cc @@ -82,6 +82,7 @@ void SetApplicationXDefaults(application_x* application) { application->submode = strdup("false"); application->support_disable = strdup("false"); application->ui_gadget = strdup("false"); + application->multiple = strdup("false"); } template @@ -94,7 +95,6 @@ void AppendLabel(T* root, const std::string& label, strdup(locale.c_str()) : strdup(DEFAULT_LOCALE); root->label = g_list_append(root->label, label_item); } - } // namespace namespace wgt { @@ -146,16 +146,16 @@ bool StepParse::FillInstallationInfo(manifest_x* manifest) { } bool StepParse::FillIconPaths(manifest_x* manifest) { - std::shared_ptr app_info = - std::static_pointer_cast( - parser_->GetManifestData(app_keys::kTizenApplicationKey)); + auto app_info = + GetManifestDataForKey( + app_keys::kTizenApplicationKey); if (!app_info) { LOG(ERROR) << "Application info manifest data has not been found."; return false; } - std::shared_ptr icons_info = - std::static_pointer_cast( - parser_->GetManifestData(app_keys::kIconsKey)); + auto icons_info = + GetManifestDataForKey( + app_keys::kIconsKey); if (icons_info.get()) { for (auto& application_icon : icons_info->icons()) { icon_x* icon = reinterpret_cast (calloc(1, sizeof(icon_x))); @@ -170,9 +170,10 @@ bool StepParse::FillIconPaths(manifest_x* manifest) { } bool StepParse::FillWidgetInfo(manifest_x* manifest) { - std::shared_ptr wgt_info = - std::static_pointer_cast( - parser_->GetManifestData(app_keys::kWidgetKey)); + auto wgt_info = + GetManifestDataForKey( + app_keys::kWidgetKey); + if (!wgt_info.get()) { LOG(ERROR) << "Widget info manifest data has not been found."; return false; @@ -203,9 +204,9 @@ bool StepParse::FillWidgetInfo(manifest_x* manifest) { manifest->installed_storage = strdup("installed_internal"); // For wgt package use the long name + application_x* app = + reinterpret_cast(manifest->application->data); for (auto& item : wgt_info->name_set()) { - application_x* app = - reinterpret_cast(manifest->application->data); AppendLabel(app, item.second, item.first); } @@ -219,10 +220,9 @@ bool StepParse::FillWidgetInfo(manifest_x* manifest) { author->lang = strdup(DEFAULT_LOCALE); manifest->author = g_list_append(manifest->author, author); - std::shared_ptr settings_info = - std::static_pointer_cast( - parser_->GetManifestData( - wgt::application_widget_keys::kTizenSettingKey)); + auto settings_info = + GetManifestDataForKey( + wgt::application_widget_keys::kTizenSettingKey); if (settings_info) { switch (settings_info->install_location()) { case wgt::parse::SettingInfo::InstallLocation::AUTO: { @@ -246,18 +246,19 @@ bool StepParse::FillWidgetInfo(manifest_x* manifest) { } bool StepParse::FillMainApplicationInfo(manifest_x* manifest) { - std::shared_ptr app_info = - std::static_pointer_cast( - parser_->GetManifestData(app_keys::kTizenApplicationKey)); + auto app_info = + GetManifestDataForKey( + app_keys::kTizenApplicationKey); if (!app_info) { LOG(ERROR) << "Application info manifest data has not been found."; return false; } bool has_watch_catergory = false; bool has_ime = false; - std::shared_ptr category_info = - std::static_pointer_cast( - parser_->GetManifestData(app_keys::kTizenCategoryKey)); + auto category_info = + GetManifestDataForKey( + app_keys::kTizenCategoryKey); + if (category_info) { has_watch_catergory = std::find_if(category_info->categories.begin(), category_info->categories.end(), @@ -277,7 +278,6 @@ bool StepParse::FillMainApplicationInfo(manifest_x* manifest) { application->component_type = has_watch_catergory ? strdup("watchapp") : strdup("uiapp"); application->mainapp = strdup("true"); - application->multiple = strdup("false"); application->appid = strdup(app_info->id().c_str()); application->nodisplay = has_ime ? strdup("true") : strdup("false"); application->taskmanage = has_ime ? strdup("false") : strdup("true"); @@ -304,7 +304,8 @@ bool StepParse::FillMainApplicationInfo(manifest_x* manifest) { app_icon->lang = strdup(icon->lang); application->icon = g_list_append(application->icon, app_icon); } - manifest->application = g_list_append(manifest->application, application); + // guarantees that the main app will be at the begining of the list + manifest->application = g_list_insert(manifest->application, application, 0); manifest->package = strdup(app_info->package().c_str()); manifest->mainapp_id = strdup(app_info->id().c_str()); @@ -312,9 +313,9 @@ bool StepParse::FillMainApplicationInfo(manifest_x* manifest) { } bool StepParse::FillServiceApplicationInfo(manifest_x* manifest) { - std::shared_ptr service_list = - std::static_pointer_cast( - parser_->GetManifestData(app_keys::kTizenServiceKey)); + auto service_list = + GetManifestDataForKey( + app_keys::kTizenServiceKey); if (!service_list) return true; for (auto& service_info : service_list->services) { @@ -322,7 +323,6 @@ bool StepParse::FillServiceApplicationInfo(manifest_x* manifest) { (calloc(1, sizeof(application_x))); application->component_type = strdup("svcapp"); application->mainapp = strdup("false"); - application->multiple = strdup("false"); application->appid = strdup(service_info.id().c_str()); application->exec = strdup((context_->root_application_path.get() / manifest->package @@ -373,10 +373,9 @@ bool StepParse::FillServiceApplicationInfo(manifest_x* manifest) { } bool StepParse::FillWidgetApplicationInfo(manifest_x* manifest) { - std::shared_ptr appwidget_info = - std::static_pointer_cast( - parser_->GetManifestData( - wgt::application_widget_keys::kTizenAppWidgetFullKey)); + auto appwidget_info = + GetManifestDataForKey( + wgt::application_widget_keys::kTizenAppWidgetFullKey); if (!appwidget_info) return true; for (auto& app_widget : appwidget_info->app_widgets()) { @@ -384,7 +383,6 @@ bool StepParse::FillWidgetApplicationInfo(manifest_x* manifest) { (calloc(1, sizeof(application_x))); application->component_type = strdup("widgetapp"); application->mainapp = strdup("false"); - application->multiple = strdup("false"); application->appid = strdup(app_widget.id.c_str()); application->exec = strdup((context_->root_application_path.get() / manifest->package @@ -439,9 +437,9 @@ bool StepParse::FillBackgroundCategoryInfo(manifest_x* manifest) { } bool StepParse::FillAppControl(manifest_x* manifest) { - std::shared_ptr app_info_list = - std::static_pointer_cast( - parser_->GetManifestData(app_keys::kTizenApplicationAppControlsKey)); + auto app_info_list = + GetManifestDataForKey( + app_keys::kTizenApplicationAppControlsKey); application_x* app = reinterpret_cast(manifest->application->data); @@ -459,9 +457,9 @@ bool StepParse::FillAppControl(manifest_x* manifest) { } bool StepParse::FillPrivileges(manifest_x* manifest) { - std::shared_ptr perm_info = - std::static_pointer_cast( - parser_->GetManifestData(app_keys::kTizenPermissionsKey)); + auto perm_info = + GetManifestDataForKey( + app_keys::kTizenPermissionsKey); std::set privileges; if (perm_info) privileges = ExtractPrivileges(perm_info); @@ -474,9 +472,9 @@ bool StepParse::FillPrivileges(manifest_x* manifest) { } bool StepParse::FillCategories(manifest_x* manifest) { - std::shared_ptr category_info = - std::static_pointer_cast( - parser_->GetManifestData(app_keys::kTizenCategoryKey)); + auto category_info = + GetManifestDataForKey( + app_keys::kTizenCategoryKey); if (!category_info) return true; @@ -490,9 +488,9 @@ bool StepParse::FillCategories(manifest_x* manifest) { } bool StepParse::FillMetadata(manifest_x* manifest) { - std::shared_ptr meta_info = - std::static_pointer_cast( - parser_->GetManifestData(app_keys::kTizenMetaDataKey)); + auto meta_info = + GetManifestDataForKey( + app_keys::kTizenMetaDataKey); if (!meta_info) return true; @@ -507,19 +505,18 @@ bool StepParse::FillAppWidget() { WgtBackendData* backend_data = static_cast(context_->backend_data.get()); - std::shared_ptr appwidget_info = - std::static_pointer_cast( - parser_->GetManifestData( - wgt::application_widget_keys::kTizenAppWidgetFullKey)); + auto appwidget_info = + GetManifestDataForKey( + wgt::application_widget_keys::kTizenAppWidgetFullKey); if (appwidget_info) backend_data->appwidgets.set(*appwidget_info); return true; } bool StepParse::FillAccounts(manifest_x* manifest) { - std::shared_ptr account_info = - std::static_pointer_cast( - parser_->GetManifestData(app_keys::kAccountKey)); + auto account_info = + GetManifestDataForKey( + app_keys::kAccountKey); if (!account_info) return true; common_installer::AccountInfo info; @@ -538,8 +535,9 @@ bool StepParse::FillAccounts(manifest_x* manifest) { } bool StepParse::FillImeInfo() { - const auto ime_info = std::static_pointer_cast( - parser_->GetManifestData(app_keys::kTizenImeKey)); + auto ime_info = + GetManifestDataForKey( + app_keys::kAccountKey); if (!ime_info) return true; @@ -645,14 +643,12 @@ common_installer::Step::Status StepParse::process() { } // Copy data from ManifestData to InstallerContext - std::shared_ptr info = - std::static_pointer_cast( - parser_->GetManifestData( - wgt::application_widget_keys::kTizenApplicationKey)); - std::shared_ptr wgt_info = - std::static_pointer_cast( - parser_->GetManifestData( - wgt::application_widget_keys::kTizenWidgetKey)); + auto info = + GetManifestDataForKey( + wgt::application_widget_keys::kTizenApplicationKey); + auto wgt_info = + GetManifestDataForKey( + wgt::application_widget_keys::kTizenWidgetKey); std::string name; const auto& name_set = wgt_info->name_set(); @@ -681,10 +677,9 @@ common_installer::Step::Status StepParse::process() { context_->recovery_info.get().recovery_file->WriteAndCommitFileContent(); } - std::shared_ptr perm_info = - std::static_pointer_cast( - parser_->GetManifestData( - wgt::application_widget_keys::kTizenPermissionsKey)); + auto perm_info = + GetManifestDataForKey( + wgt::application_widget_keys::kTizenPermissionsKey); parser::PermissionSet permissions; if (perm_info) permissions = perm_info->GetAPIPermissions(); @@ -692,10 +687,9 @@ common_installer::Step::Status StepParse::process() { WgtBackendData* backend_data = static_cast(context_->backend_data.get()); - std::shared_ptr settings_info = - std::static_pointer_cast( - parser_->GetManifestData( - wgt::application_widget_keys::kTizenSettingKey)); + auto settings_info = + GetManifestDataForKey( + wgt::application_widget_keys::kTizenSettingKey); if (settings_info) backend_data->settings.set(*settings_info); diff --git a/src/wgt/step/configuration/step_parse.h b/src/wgt/step/configuration/step_parse.h index e7b9357..69015fc 100644 --- a/src/wgt/step/configuration/step_parse.h +++ b/src/wgt/step/configuration/step_parse.h @@ -1,7 +1,6 @@ // Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved // Use of this source code is governed by a apache 2.0 license that can be // found in the LICENSE file. - #ifndef WGT_STEP_CONFIGURATION_STEP_PARSE_H_ #define WGT_STEP_CONFIGURATION_STEP_PARSE_H_ @@ -15,6 +14,8 @@ #include #include +#include +#include #include #include #include @@ -75,6 +76,14 @@ class StepParse : public common_installer::Step { ConfigLocation config_location_; bool check_start_file_; + template + std::shared_ptr GetManifestDataForKey(const std::string& key) { + assert(!key.empty()); + static_assert(std::is_base_of::value, + "Type is not base of parser::ManifestData"); + return std::static_pointer_cast(parser_->GetManifestData(key)); + } + STEP_NAME(Parse) }; -- 2.7.4