From 3899f19fa3c19d55b9ef3fe5a80bb3fd797a7155 Mon Sep 17 00:00:00 2001
From: Joseph <joseph.larralde@gmail.com>
Date: Wed, 6 Dec 2017 01:12:48 +0100
Subject: [PATCH] serialization / deserialization now working in rapidPiPoHost

---
 .../rapidPiPoTools/rapidPiPoHost.cpp          | 78 +++++++++++++++++--
 1 file changed, 71 insertions(+), 7 deletions(-)

diff --git a/src/signalProcessing/rapidPiPoTools/rapidPiPoHost.cpp b/src/signalProcessing/rapidPiPoTools/rapidPiPoHost.cpp
index 4600fbf..ab951ac 100644
--- a/src/signalProcessing/rapidPiPoTools/rapidPiPoHost.cpp
+++ b/src/signalProcessing/rapidPiPoTools/rapidPiPoHost.cpp
@@ -131,7 +131,7 @@ RapidPiPoHost::toJSON()
 {
   Json::Value root;
 
-  /*
+  //*
   root["docType"] = "rapid-mix:signal-processing";
   root["docVersion"] = RAPIDMIX_JSON_DOC_VERSION;
 
@@ -181,8 +181,40 @@ RapidPiPoHost::toJSON()
     Json::Value param;
     PiPo::Attr *a = this->graph->getAttr(i);
     param["name"] = a->getName();
-    param["type"] = 0; // DO SOMETHING TO GET TYPES FROM PIPO IN A NICE WAY
-    param["value"] = a->getDbl(0);
+    switch (a->getType())
+    {
+      case PiPo::Bool:
+        param["type"] = "Bool";
+        param["value"] = a->getInt(0);
+        break;
+      case PiPo::Enum:
+        param["type"] = "Enum";
+        param["value"] = std::string(a->getStr(0));
+        break;
+      case PiPo::String:
+        param["type"] = "String";
+        param["value"] = std::string(a->getStr(0));
+        break;
+      case PiPo::Int:
+        param["type"] = "Int";
+        param["value"] = Json::Value(Json::arrayValue);
+        for (int i = 0; i < a->getSize(); ++i)
+        {
+          param["value"].append(a->getInt(i));
+        }
+        break;
+      case PiPo::Double:
+        param["type"] = "Double";
+        param["value"] = Json::Value(Json::arrayValue);
+        for (int i = 0; i < a->getSize(); ++i)
+        {
+          param["value"].append(a->getDbl(i));
+        }
+        break;
+      default:
+        std::cout << a->getType() << std::endl;
+        break;
+    }
     params[i] = param;
   }
 
@@ -197,20 +229,52 @@ RapidPiPoHost::toJSON()
 bool
 RapidPiPoHost::fromJSON(Json::Value &jv)
 {
-  /*
+  //*
   if (jv["docType"].asString().compare("rapid-mix:signal-processing") == 0 &&
       //jv["docVersion"].asString().compare(RAPIDMIX_JSON_DOC_VERSION) == 0 &&
       jv["target"]["name"].asString().compare("pipo") == 0 &&
       jv["payload"].size() > 0) {
 
-    this->setGraph(jv["pipodata"]["description"].asString());
+    this->setGraph(jv["payload"]["description"].asString());
 
-    Json::Value params = jv["payload"]["parameters"]
+    Json::Value params = jv["payload"]["parameters"];
     unsigned int nAttrs = params.size();
 
     for (unsigned int i = 0; i < nAttrs; ++i)
     {
-
+      std::string type = params[i]["type"].asString();
+      const char *name = params[i]["name"].asString().c_str();
+
+      if (type.compare("Bool") == 0)
+      {
+        this->setAttr(name, params[i]["value"].asInt());
+      }
+      else if (type.compare("Enum") == 0 || type.compare("String") == 0)
+      {
+        this->setAttr(name, params[i]["value"].asString());
+      }
+      else if (type.compare("Int") == 0)
+      {
+        std::vector<int> values;
+
+        for (int j = 0; j < params[i]["value"].size(); ++j)
+        {
+          values.push_back(params[i]["value"][j].asInt());
+        }
+
+        this->setAttr(name, values);
+      }
+      else if (type.compare("Double") == 0)
+      {
+        std::vector<double> values;
+
+        for (int j = 0; j < params[i]["value"].size(); ++j)
+        {
+          values.push_back(params[i]["value"][j].asDouble());
+        }
+
+        this->setAttr(name, values);
+      }
     }
 
 
-- 
GitLab