Refactoring with GetOneOrMany in tpk handlers 57/50757/3
authorTomasz Iwanek <t.iwanek@samsung.com>
Fri, 30 Oct 2015 14:14:41 +0000 (15:14 +0100)
committerPawel Sikorski <p.sikorski@samsung.com>
Wed, 4 Nov 2015 12:04:00 +0000 (04:04 -0800)
Change-Id: Idc8c874a11ea434a6313918b900d6096809f620b

src/tpk_manifest_handlers/account_handler.cc
src/tpk_manifest_handlers/privileges_handler.cc
src/tpk_manifest_handlers/service_application_handler.cc
src/tpk_manifest_handlers/shortcut_handler.cc
src/tpk_manifest_handlers/ui_application_handler.cc

index b7bda52eb9bdb32e477aba6643a8edec77df8da2..2846dab56a6e716fa13e8c8d64dfca9c1ec67aa0 100644 (file)
@@ -62,20 +62,9 @@ bool AccountHandler::ParseSingleAccountElement(
     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;
 }
@@ -137,22 +126,14 @@ bool AccountHandler::ParseAccountProvider(
 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(
@@ -172,24 +153,12 @@ 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;
 }
@@ -197,22 +166,11 @@ bool AccountHandler::ParseLabels(
 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;
 }
index 90aec26c8b59e2f4f1524b133cc1e8641166b560..dc273fe4f27476d23a04724b45887853d2334977 100644 (file)
@@ -38,41 +38,13 @@ bool PrivilegesHandler::Parse(
     *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;
 }
index d20f6d07a2227523738301b1d46c080d7ca35985..a54bde5ec1234bb0cb1146fb1e522dbaf0e467fd 100644 (file)
@@ -144,25 +144,10 @@ bool InitializeAppControlParsing(
     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;
@@ -172,25 +157,10 @@ bool InitializeDataControlParsing(
     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;
@@ -200,25 +170,10 @@ bool InitializeMetaDataParsing(
     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;
@@ -228,25 +183,10 @@ bool InitializeIconParsing(
     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;
@@ -256,25 +196,10 @@ bool InitializeLabelParsing(
     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;
@@ -435,46 +360,19 @@ bool ServiceApplicationHandler::Parse(
     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;
index db0d4238afcbc2f572b2ab6adfb524d05dd1d35f..cbdeac73761c40288b088839aa025ce7a3172a06 100644 (file)
@@ -34,32 +34,13 @@ bool ParseShortcut(const parser::DictionaryValue* dict, std::string* error,
   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;
@@ -91,30 +72,11 @@ bool ShortcutHandler::Parse(
     *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;
 }
index 2a718e8714b8a839148567fd4ff960b7f3726240..4577c5e4d27407e5fe3cfbc66588cf889d631473 100644 (file)
@@ -143,25 +143,10 @@ bool InitializeAppControlParsing(
     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;
@@ -171,25 +156,10 @@ bool InitializeDataControlParsing(
     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;
@@ -199,25 +169,10 @@ bool InitializeMetaDataParsing(
     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;
@@ -227,25 +182,10 @@ bool InitializeIconParsing(
     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;
@@ -255,25 +195,10 @@ bool InitializeLabelParsing(
     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;