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