Add methods for serialize/deserialize entire capabilities
authorSangyoon Jang <jeremy.jang@samsung.com>
Thu, 29 Mar 2018 11:03:08 +0000 (20:03 +0900)
committerSangyoon Jang <jeremy.jang@samsung.com>
Thu, 29 Mar 2018 11:03:08 +0000 (20:03 +0900)
Change-Id: I5cd4b6a7801321dd4ffa4c4c915bd54f65204a5a
Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
src/capability_manager.cc
src/capability_manager.h

index b5b2647ad48c0f29ba06666faeb77bb33a6b9c93..26bfc5d939739d313b7ec8255abb23b916047e4e 100644 (file)
@@ -5,6 +5,7 @@
 #include "src/capability_manager.h"
 
 #include <glib.h>
+#include <json/json.h>
 #include <pkgmgr-info.h>
 
 #include <iostream>
@@ -109,6 +110,40 @@ bool CapabilityManager::LoadCapabilities() {
   return true;
 }
 
+std::string CapabilityManager::PackCapabilities() {
+  Json::Value root;
+  Json::Value caps;
+  for (const auto& cap : list_)
+    caps.append(cap.Serialize());
+  root["capabilities"] = caps;
+  Json::FastWriter writer;
+  return writer.write(root);
+}
+
+std::vector<Capability> CapabilityManager::UnpackCapabilities(
+    const std::string& caps_str) {
+  Json::Reader reader;
+  Json::Value root;
+
+  if (!reader.parse(caps_str, root)) {
+    LOG(ERROR) << "Failed to parse JSON string of capabilities";
+    return {};
+  }
+
+  std::vector<Capability> list;
+  const Json::Value caps = root["capabilities"];
+  for (unsigned int i = 0; i < caps.size(); ++i) {
+    Capability cap(caps[i].asString());
+    if (!cap.IsValid()) {
+      LOG(ERROR) << "Invalid capability! Ignore it";
+      continue;
+    }
+    list.emplace_back(caps[i].asString());
+  }
+
+  return list;
+}
+
 void CapabilityManager::HandlePackageEvent(const std::string& pkgid,
     PackageEventListener::EventType event_type) {
   LOG(DEBUG) << "Event received: " << pkgid << " "
index 29568c333403dc7f0c110878bdf2f6894a131060..cfaf674b51910fa9bd9f227489d16ec3b76d6ced 100644 (file)
@@ -23,6 +23,8 @@ class CapabilityManager {
   bool AddCapability(const Capability& capability);
   bool ListCapabilities();
   bool LoadCapabilities();
+  std::string PackCapabilities();
+  std::vector<Capability> UnpackCapabilities(const std::string& caps_str);
 
  private:
   void HandlePackageEvent(const std::string& pkgid,