const parser::DictionaryValue* item_dict,
std::shared_ptr<AccountInfo> info,
std::string* error) {
-
- const parser::Value* val = nullptr;
- const parser::DictionaryValue* dict = nullptr;
- const parser::ListValue* list = nullptr;
- if (item_dict->Get(kAccountProviderKey, &val)) {
- if (val->GetAsDictionary(&dict)) {
- if (!ParseAccountProvider(dict, info, error))
- return false;
- } else if (val->GetAsList(&list)) {
- for (auto& item : *list)
- if (item->GetAsDictionary(&dict))
- if (!ParseAccountProvider(dict, info, error))
- return false;
- }
+ for (auto& item : parser::GetOneOrMany(item_dict, kAccountProviderKey, "")) {
+ if (!ParseAccountProvider(item, info, error))
+ return false;
}
return true;
}
bool AccountHandler::ParseAccountIcons(
const parser::DictionaryValue* item_dict,
SingleAccountInfo* info) {
- const parser::Value* val = nullptr;
- const parser::DictionaryValue* dict = nullptr;
- const parser::ListValue* list = nullptr;
- if (item_dict->Get(kAccountIconKey, &val)) {
- if (val->GetAsDictionary(&dict)) {
- if (!ParseSingleAccountIcon(dict, info))
- return false;
- } else if (val->GetAsList(&list)) {
- for (auto& item : *list)
- if (item->GetAsDictionary(&dict) &&
- !ParseSingleAccountIcon(dict, info))
- return false;
- }
- return true;
+ auto& icons = parser::GetOneOrMany(item_dict, kAccountIconKey, "");
+ if (icons.empty())
+ return false;
+ for (auto& item : icons) {
+ if (!ParseSingleAccountIcon(item, info))
+ return false;
}
- return false;
+ return true;
}
bool AccountHandler::ParseSingleAccountIcon(
bool AccountHandler::ParseLabels(
const parser::DictionaryValue* item_dict,
SingleAccountInfo* info) {
- const parser::Value* val = nullptr;
- const parser::DictionaryValue* dict = nullptr;
- const parser::ListValue* list = nullptr;
- if (item_dict->Get(kAccountLabelKey, &val)) {
- std::string label;
+ for (auto& item : parser::GetOneOrMany(item_dict, kAccountLabelKey, "")) {
std::string lang;
- if (val->GetAsDictionary(&dict)) {
- dict->GetString(kAccountLangKey, &lang);
- dict->GetString(kAccountTextKey, &label);
- info->labels.push_back(std::make_pair(label, lang));
- } else if (val->GetAsList(&list)) {
- for (auto& item : *list)
- if (item->GetAsDictionary(&dict)) {
- dict->GetString(kAccountLangKey, &lang);
- dict->GetString(kAccountTextKey, &label);
- info->labels.push_back(std::make_pair(label, lang));
- }
- }
+ std::string label;
+ item->GetString(kAccountLangKey, &lang);
+ item->GetString(kAccountTextKey, &label);
+ info->labels.push_back(std::make_pair(label, lang));
}
return true;
}
bool AccountHandler::ParseCapabilities(
const parser::DictionaryValue* item_dict,
SingleAccountInfo* info) {
- const parser::Value* val = nullptr;
- const parser::DictionaryValue* dict = nullptr;
- const parser::ListValue* list = nullptr;
- std::string string_value;
- if (item_dict->Get(kAccountCapabilityKey, &val)) {
+ for (auto& item : parser::GetOneOrMany(item_dict, kAccountCapabilityKey,
+ "")) {
std::string capability;
- if (val->GetAsDictionary(&dict)) {
- dict->GetString(kAccountTextKey, &capability);
- info->capabilities.push_back(capability);
- } else if (val->GetAsList(&list)) {
- for (auto& item : *list)
- if (item->GetAsDictionary(&dict)) {
- dict->GetString(kAccountTextKey, &capability);
- info->capabilities.push_back(capability);
- }
- }
+ item->GetString(kAccountTextKey, &capability);
+ info->capabilities.push_back(capability);
}
return true;
}
*error = "Failed to parse <privileges> tag";
return false;
}
-
- parser::Value* value = nullptr;
- if (!privileges_dict->Get(kPrivilegeKey, &value))
- return true;
-
- std::unique_ptr<parser::ListValue> privileges_list;
- if (value->IsType(parser::Value::TYPE_DICTIONARY)) {
- privileges_list.reset(new parser::ListValue);
- privileges_list->Append(value->DeepCopy());
- } else {
- parser::ListValue* list = nullptr;
- value->GetAsList(&list);
- if (list)
- privileges_list.reset(list->DeepCopy());
- }
-
- if (!privileges_list) {
- *error = "Invalid value of privileges.";
- return false;
- }
- for (parser::ListValue::const_iterator it = privileges_list->begin();
- it != privileges_list->end(); ++it) {
- parser::DictionaryValue* dictionary_value = nullptr;
- (*it)->GetAsDictionary(&dictionary_value);
-
+ for (auto& item : parser::GetOneOrMany(privileges_dict, kPrivilegeKey, "")) {
std::string privilege;
- if (!dictionary_value ||
- !dictionary_value->GetString(
- kPrivilegeTextKey, &privilege) ||
+ if (!item->GetString(kPrivilegeTextKey, &privilege) ||
privilege.empty())
continue;
-
privileges_info->AddPrivilege(privilege);
}
-
*output = std::static_pointer_cast<parser::ManifestData>(privileges_info);
return true;
}
const parser::DictionaryValue& app_dict,
ServiceApplicationSingleEntry* serviceapplicationinfo,
std::string* error) {
- const parser::Value* val = nullptr;
- const parser::DictionaryValue* dict = nullptr;
- const parser::ListValue* list = nullptr;
-
- if (app_dict.Get(kAppControlKey, &val)) {
- if (val->GetAsDictionary(&dict)) {
- if (!ParseAppControl(dict, serviceapplicationinfo)) {
- *error = "Parsing AppControl failed";
- return false;
- }
- } else if (val->GetAsList(&list)) {
- for (auto& item : *list) {
- if (item->GetAsDictionary(&dict)) {
- if (!ParseAppControl(dict, serviceapplicationinfo)) {
- *error = "Parsing AppControl failed";
- return false;
- }
- }
- }
+ for (auto& item : parser::GetOneOrMany(&app_dict, kAppControlKey, "")) {
+ if (!ParseAppControl(item, serviceapplicationinfo)) {
+ *error = "Parsing AppControl failed";
+ return false;
}
}
return true;
const parser::DictionaryValue& app_dict,
ServiceApplicationSingleEntry* serviceapplicationinfo,
std::string* error) {
- const parser::Value* val = nullptr;
- const parser::DictionaryValue* dict = nullptr;
- const parser::ListValue* list = nullptr;
-
- if (app_dict.Get(kDataControlKey, &val)) {
- if (val->GetAsDictionary(&dict)) {
- if (!ParseDataControl(dict, serviceapplicationinfo)) {
- *error = "Parsing DataControl failed";
- return false;
- }
- } else if (val->GetAsList(&list)) {
- for (auto& item : *list) {
- if (item->GetAsDictionary(&dict)) {
- if (!ParseDataControl(dict, serviceapplicationinfo)) {
- *error = "Parsing DataControl failed";
- return false;
- }
- }
- }
+ for (auto& item : parser::GetOneOrMany(&app_dict, kDataControlKey, "")) {
+ if (!ParseDataControl(item, serviceapplicationinfo)) {
+ *error = "Parsing DataControl failed";
+ return false;
}
}
return true;
const parser::DictionaryValue& app_dict,
ServiceApplicationSingleEntry* serviceapplicationinfo,
std::string* error) {
- const parser::Value* val = nullptr;
- const parser::DictionaryValue* dict = nullptr;
- const parser::ListValue* list = nullptr;
-
- if (app_dict.Get(kMetaDataKey, &val)) {
- if (val->GetAsDictionary(&dict)) {
- if (!ParseMetaData(dict, serviceapplicationinfo)) {
- *error = "Parsing Metadata failed";
- return false;
- }
- } else if (val->GetAsList(&list)) {
- for (auto& item : *list) {
- if (item->GetAsDictionary(&dict)) {
- if (!ParseMetaData(dict, serviceapplicationinfo)) {
- *error = "Parsing Metadata failed";
- return false;
- }
- }
- }
+ for (auto& item : parser::GetOneOrMany(&app_dict, kMetaDataKey, "")) {
+ if (!ParseMetaData(item, serviceapplicationinfo)) {
+ *error = "Parsing Metadata failed";
+ return false;
}
}
return true;
const parser::DictionaryValue& app_dict,
ServiceApplicationSingleEntry* serviceapplicationinfo,
std::string* error) {
- const parser::Value* val = nullptr;
- const parser::DictionaryValue* dict = nullptr;
- const parser::ListValue* list = nullptr;
-
- if (app_dict.Get(kIconKey, &val)) {
- if (val->GetAsDictionary(&dict)) {
- if (!ParseAppIcon(dict, serviceapplicationinfo)) {
- *error = "Parsing Icon failed";
- return false;
- }
- } else if (val->GetAsList(&list)) {
- for (auto& item : *list) {
- if (item->GetAsDictionary(&dict)) {
- if (!ParseAppIcon(dict, serviceapplicationinfo)) {
- *error = "Parsing Icon failed";
- return false;
- }
- }
- }
+ for (auto& item : parser::GetOneOrMany(&app_dict, kIconKey, "")) {
+ if (!ParseAppIcon(item, serviceapplicationinfo)) {
+ *error = "Parsing Icon failed";
+ return false;
}
}
return true;
const parser::DictionaryValue& app_dict,
ServiceApplicationSingleEntry* serviceapplicationinfo,
std::string* error) {
- const parser::Value* val = nullptr;
- const parser::DictionaryValue* dict = nullptr;
- const parser::ListValue* list = nullptr;
-
- if (app_dict.Get(kLabelKey, &val)) {
- if (val->GetAsDictionary(&dict)) {
- if (!ParseLabel(dict, serviceapplicationinfo)) {
- *error = "Parsing Label failed";
- return false;
- }
- } else if (val->GetAsList(&list)) {
- for (auto& item : *list) {
- if (item->GetAsDictionary(&dict)) {
- if (!ParseLabel(dict, serviceapplicationinfo)) {
- *error = "Parsing Label failed";
- return false;
- }
- }
- }
+ for (auto& item : parser::GetOneOrMany(&app_dict, kLabelKey, "")) {
+ if (!ParseLabel(item, serviceapplicationinfo)) {
+ *error = "Parsing Label failed";
+ return false;
}
}
return true;
const parser::Manifest& manifest,
std::shared_ptr<parser::ManifestData>* output,
std::string* error) {
+ if (!manifest.HasPath(keys::kServiceApplicationKey))
+ return true;
std::shared_ptr<ServiceApplicationInfoList>
serviceapplicationinfo(new ServiceApplicationInfoList());
- parser::Value* value = nullptr;
- if (!manifest.Get(keys::kServiceApplicationKey, &value))
- return true;
-
- if (value->GetType() == parser::Value::TYPE_LIST) {
- // multiple entries
- const parser::ListValue* list;
- value->GetAsList(&list);
- for (const auto& item : *list) {
- const parser::DictionaryValue* control_dict;
- if (!item->GetAsDictionary(&control_dict)) {
- *error = "Parsing service application element failed";
- return false;
- }
-
- ServiceApplicationSingleEntry serviceappentry;
- if (!ParseServiceApplicationAndStore(*control_dict,
- &serviceappentry,
- error))
- return false;
- serviceapplicationinfo->items.push_back(serviceappentry);
- }
- } else if (value->GetType() == parser::Value::TYPE_DICTIONARY) {
- // single entry
- const parser::DictionaryValue* dict;
- value->GetAsDictionary(&dict);
-
+ for (auto& item : parser::GetOneOrMany(manifest.value(),
+ keys::kServiceApplicationKey, "")) {
ServiceApplicationSingleEntry serviceappentry;
- if (!ParseServiceApplicationAndStore(*dict,
+ if (!ParseServiceApplicationAndStore(*item,
&serviceappentry,
error))
return false;
serviceapplicationinfo->items.push_back(serviceappentry);
- } else {
- *error = "Cannot parse service application element";
- return false;
}
-
*output = std::static_pointer_cast
<parser::ManifestData>(serviceapplicationinfo);
return true;
dict->GetString(keys::kShortcutExtraDataKey, &shortcut.extra_data);
dict->GetString(keys::kShortcutExtraKeyKey, &shortcut.extra_key);
- const parser::Value* labels_value = nullptr;
- if (dict->Get(keys::kShortcutLabelKey, &labels_value)) {
- if (labels_value->GetType() == parser::Value::TYPE_DICTIONARY) {
- const parser::DictionaryValue* ldict = nullptr;
- labels_value->GetAsDictionary(&ldict);
- std::pair<std::string, std::string> label;
- if (!ParseShortcutLabel(ldict, error, &label))
- return false;
- shortcut.labels.push_back(label);
- } else if (labels_value->GetType() == parser::Value::TYPE_LIST) {
- const parser::ListValue* list = nullptr;
- labels_value->GetAsList(&list);
- for (auto& item : *list) {
- const parser::DictionaryValue* ldict = nullptr;
- if (!item->GetAsDictionary(&ldict))
- continue;
- std::pair<std::string, std::string> label;
- if (!ParseShortcutLabel(ldict, error, &label))
- return false;
- shortcut.labels.push_back(label);
- }
- } else {
- *error = "Invalid value of shortcut's label element";
+ for (auto& item : parser::GetOneOrMany(dict, keys::kShortcutLabelKey, "")) {
+ std::pair<std::string, std::string> label;
+ if (!ParseShortcutLabel(item, error, &label))
return false;
- }
+ shortcut.labels.push_back(label);
}
+
const parser::Value* icon_value = nullptr;
if (dict->Get(keys::kShortcutIconKey, &icon_value)) {
const parser::DictionaryValue* icon_dict = nullptr;
*error = "Cannot parse shortcut-list element. Single element is expected";
return false;
}
- const parser::Value* value = nullptr;
- if (!listdict->Get(keys::kShortcutKey, &value))
- return false;
-
std::shared_ptr<ShortcutListInfo> shortcuts(new ShortcutListInfo());
- if (value->GetType() == parser::Value::TYPE_DICTIONARY) {
- const parser::DictionaryValue* dict = nullptr;
- value->GetAsDictionary(&dict);
- if (!ParseShortcut(dict, error, shortcuts.get()))
+ for (auto& item : parser::GetOneOrMany(listdict, keys::kShortcutKey, "")) {
+ if (!ParseShortcut(item, error, shortcuts.get()))
return false;
- } else if (value->GetType() == parser::Value::TYPE_LIST) {
- const parser::ListValue* list = nullptr;
- value->GetAsList(&list);
- for (auto& item : *list) {
- const parser::DictionaryValue* dict = nullptr;
- item->GetAsDictionary(&dict);
- if (!ParseShortcut(dict, error, shortcuts.get()))
- return false;
- }
- } else {
- *error = "Invalid value of shortcut-list element";
- return false;
}
-
*output = std::static_pointer_cast<parser::ManifestData>(shortcuts);
return true;
}
const parser::DictionaryValue& control_dict,
UIApplicationSingleEntry* uiapplicationinfo,
std::string* error) {
- const parser::Value* val = nullptr;
- const parser::DictionaryValue* dict = nullptr;
- const parser::ListValue* list = nullptr;
-
- if (control_dict.Get(kAppControlKey, &val)) {
- if (val->GetAsDictionary(&dict)) {
- if (!ParseAppControl(dict, uiapplicationinfo)) {
- *error = "Parsing AppControl failed";
- return false;
- }
- } else if (val->GetAsList(&list)) {
- for (auto& item : *list) {
- if (item->GetAsDictionary(&dict)) {
- if (!ParseAppControl(dict, uiapplicationinfo)) {
- *error = "Parsing AppControl failed";
- return false;
- }
- }
- }
+ for (auto& item : parser::GetOneOrMany(&control_dict, kAppControlKey, "")) {
+ if (!ParseAppControl(item, uiapplicationinfo)) {
+ *error = "Parsing AppControl failed";
+ return false;
}
}
return true;
const parser::DictionaryValue& control_dict,
UIApplicationSingleEntry* uiapplicationinfo,
std::string* error) {
- const parser::Value* val = nullptr;
- const parser::DictionaryValue* dict = nullptr;
- const parser::ListValue* list = nullptr;
-
- if (control_dict.Get(kDataControlKey, &val)) {
- if (val->GetAsDictionary(&dict)) {
- if (!ParseDataControl(dict, uiapplicationinfo)) {
- *error = "Parsing DataControl failed";
- return false;
- }
- } else if (val->GetAsList(&list)) {
- for (auto& item : *list) {
- if (item->GetAsDictionary(&dict)) {
- if (!ParseDataControl(dict, uiapplicationinfo)) {
- *error = "Parsing DataControl failed";
- return false;
- }
- }
- }
+ for (auto& item : parser::GetOneOrMany(&control_dict, kDataControlKey, "")) {
+ if (!ParseDataControl(item, uiapplicationinfo)) {
+ *error = "Parsing DataControl failed";
+ return false;
}
}
return true;
const parser::DictionaryValue& app_dict,
UIApplicationSingleEntry* uiapplicationinfo,
std::string* error) {
- const parser::Value* val = nullptr;
- const parser::DictionaryValue* dict = nullptr;
- const parser::ListValue* list = nullptr;
-
- if (app_dict.Get(kMetaDataKey, &val)) {
- if (val->GetAsDictionary(&dict)) {
- if (!ParseMetaData(dict, uiapplicationinfo)) {
- *error = "Parsing Metadata failed";
- return false;
- }
- } else if (val->GetAsList(&list)) {
- for (auto& item : *list) {
- if (item->GetAsDictionary(&dict)) {
- if (!ParseMetaData(dict, uiapplicationinfo)) {
- *error = "Parsing Metadata failed";
- return false;
- }
- }
- }
+ for (auto& item : parser::GetOneOrMany(&app_dict, kMetaDataKey, "")) {
+ if (!ParseMetaData(item, uiapplicationinfo)) {
+ *error = "Parsing Metadata failed";
+ return false;
}
}
return true;
const parser::DictionaryValue& app_dict,
UIApplicationSingleEntry* uiapplicationinfo,
std::string* error) {
- const parser::Value* val = nullptr;
- const parser::DictionaryValue* dict = nullptr;
- const parser::ListValue* list = nullptr;
-
- if (app_dict.Get(kIconKey, &val)) {
- if (val->GetAsDictionary(&dict)) {
- if (!ParseAppIcon(dict, uiapplicationinfo)) {
- *error = "Parsing Icon failed";
- return false;
- }
- } else if (val->GetAsList(&list)) {
- for (auto& item : *list) {
- if (item->GetAsDictionary(&dict)) {
- if (!ParseAppIcon(dict, uiapplicationinfo)) {
- *error = "Parsing Icon failed";
- return false;
- }
- }
- }
+ for (auto& item : parser::GetOneOrMany(&app_dict, kIconKey, "")) {
+ if (!ParseAppIcon(item, uiapplicationinfo)) {
+ *error = "Parsing Icon failed";
+ return false;
}
}
return true;
const parser::DictionaryValue& control_dict,
UIApplicationSingleEntry* uiapplicationinfo,
std::string* error) {
- const parser::Value* val = nullptr;
- const parser::DictionaryValue* dict = nullptr;
- const parser::ListValue* list = nullptr;
-
- if (control_dict.Get(kLabelKey, &val)) {
- if (val->GetAsDictionary(&dict)) {
- if (!ParseLabel(dict, uiapplicationinfo)) {
- *error = "Parsing Label failed";
- return false;
- }
- } else if (val->GetAsList(&list)) {
- for (auto& item : *list) {
- if (item->GetAsDictionary(&dict)) {
- if (!ParseLabel(dict, uiapplicationinfo)) {
- *error = "Parsing Label failed";
- return false;
- }
- }
- }
+ for (auto& item : parser::GetOneOrMany(&control_dict, kLabelKey, "")) {
+ if (!ParseLabel(item, uiapplicationinfo)) {
+ *error = "Parsing Label failed";
+ return false;
}
}
return true;