From 98823430441126b1aa24433001a1f695e7c0e6d1 Mon Sep 17 00:00:00 2001
From: amichelo <andrea.michelotti@lnf.infn.it>
Date: Thu, 13 Jul 2023 16:07:12 +0200
Subject: [PATCH] skip spaces in dataset

---
 CMakeLists.txt                                |  2 +-
 .../control_manager/AbstractControlUnit.cpp   | 46 +++++++++++--------
 2 files changed, 27 insertions(+), 21 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index e20cb5291..9f6b7d349 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -72,7 +72,7 @@ if (NOT WIN32)
 if(CHAOS_MDS)
   SET(CDSLIB ON)
 
-  MESG("Install cxx mongodb driver")
+  MESG("Install cxx mongodb legacy client driver")
   # ExternalProject_Add(
   #  mongo-cxx-driver-legacy
   #  GIT_REPOSITORY https://github.com/amichelotti/mongo-cxx-driver.git
diff --git a/chaos/cu_toolkit/control_manager/AbstractControlUnit.cpp b/chaos/cu_toolkit/control_manager/AbstractControlUnit.cpp
index 8e73739a0..86fc51221 100644
--- a/chaos/cu_toolkit/control_manager/AbstractControlUnit.cpp
+++ b/chaos/cu_toolkit/control_manager/AbstractControlUnit.cpp
@@ -3720,16 +3720,20 @@ void AbstractControlUnit::updateDataSet(chaos::common::data::CDataWrapper& cd, c
   std::vector<std::string> props;
   cd.getAllKey(props);
   for (std::vector<std::string>::iterator i = props.begin(); i != props.end(); i++) {
+     std::string name;
+     std::copy_if((*i).begin(),(*i).end(),std::back_inserter(name),[](unsigned char c){return !std::isspace(c);});
+    if(!getAttributeCache()->exist(DOMAIN_OUTPUT,name))
+      continue;
     if (cd.isInt32Value(*i)) {
-      getAttributeCache()->setOutputAttributeValue(*i, cd.getInt32Value(*i));
+      getAttributeCache()->setOutputAttributeValue(name, cd.getInt32Value(*i));
     } else if (cd.isDoubleValue(*i)) {
-      getAttributeCache()->setOutputAttributeValue(*i, cd.getDoubleValue(*i));
+      getAttributeCache()->setOutputAttributeValue(name, cd.getDoubleValue(*i));
     } else if (cd.isInt64Value(*i)) {
-      getAttributeCache()->setOutputAttributeValue(*i, cd.getInt64Value(*i));
+      getAttributeCache()->setOutputAttributeValue(name, cd.getInt64Value(*i));
     } else if (cd.isBoolValue(*i)) {
-      getAttributeCache()->setOutputAttributeValue(*i, cd.getBoolValue(*i));
+      getAttributeCache()->setOutputAttributeValue(name, cd.getBoolValue(*i));
     } else if (cd.isStringValue(*i)) {
-      getAttributeCache()->setOutputAttributeValue(*i, cd.getStringValue(*i));
+      getAttributeCache()->setOutputAttributeValue(name, cd.getStringValue(*i));
     } else if (cd.isVectorValue(*i)) {
       ///
       chaos::common::data::CMultiTypeDataArrayWrapperSPtr v   = cd.getVectorValue(*i);
@@ -3740,31 +3744,31 @@ void AbstractControlUnit::updateDataSet(chaos::common::data::CDataWrapper& cd, c
           for (int cnt = 0; cnt < siz; cnt++) {
             arr[cnt] = v->getInt32ElementAtIndex(cnt);
           }
-          getAttributeCache()->setOutputAttributeValue(*i, (void*)arr, siz * sizeof(int32_t));
+          getAttributeCache()->setOutputAttributeValue(name, (void*)arr, siz * sizeof(int32_t));
         } else if (v->isBoolElementAtIndex(0)) {
           bool arr[siz];
           for (int cnt = 0; cnt < siz; cnt++) {
             arr[cnt] = v->getBoolElementAtIndex(cnt);
           }
-          getAttributeCache()->setOutputAttributeValue(*i, (void*)arr, siz * sizeof(bool));
+          getAttributeCache()->setOutputAttributeValue(name, (void*)arr, siz * sizeof(bool));
         } else if (v->isInt64ElementAtIndex(0)) {
           int64_t arr[siz];
           for (int cnt = 0; cnt < siz; cnt++) {
             arr[cnt] = v->getInt64ElementAtIndex(cnt);
           }
-          getAttributeCache()->setOutputAttributeValue(*i, (void*)arr, siz * sizeof(int64_t));
+          getAttributeCache()->setOutputAttributeValue(name, (void*)arr, siz * sizeof(int64_t));
         } else if (v->isDoubleElementAtIndex(0)) {
           double arr[siz];
           for (int cnt = 0; cnt < siz; cnt++) {
             arr[cnt] = v->getDoubleElementAtIndex(cnt);
           }
-          getAttributeCache()->setOutputAttributeValue(*i, (void*)arr, siz * sizeof(double));
+          getAttributeCache()->setOutputAttributeValue(name, (void*)arr, siz * sizeof(double));
         }
       }
     } else if (cd.isBinaryValue(*i)) {
       uint32_t    size;
       const char* ptr = cd.getBinaryValue(*i, size);
-      getAttributeCache()->setOutputAttributeValue(*i, (void*)ptr, size);
+      getAttributeCache()->setOutputAttributeValue(name, (void*)ptr, size);
     }
   }
 }
@@ -3854,6 +3858,8 @@ void AbstractControlUnit::addAttributesToDataSet(chaos::common::data::CDataWrapp
   std::vector<std::string> props;
   cd.getAllKey(props);
   for (std::vector<std::string>::iterator i = props.begin(); i != props.end(); i++) {
+    std::string name;
+    std::copy_if((*i).begin(),(*i).end(),std::back_inserter(name),[](unsigned char c){return !std::isspace(c);});
     if (cd.isVector(*i)) {
       chaos::common::data::CMultiTypeDataArrayWrapperSPtr v   = cd.getVectorValue(*i);
       int                                                 siz = v->size();
@@ -3861,36 +3867,36 @@ void AbstractControlUnit::addAttributesToDataSet(chaos::common::data::CDataWrapp
         std::stringstream ss;
         ss << siz;
         if (v->isInt32ElementAtIndex(0)) {
-          addBinaryAttributeAsSubtypeToDataSet(*i, "int32 vect:" + ss.str(), chaos::DataType::SUB_TYPE_INT32, siz * sizeof(int32_t), io);
+          addBinaryAttributeAsSubtypeToDataSet(name, "int32 vect:" + ss.str(), chaos::DataType::SUB_TYPE_INT32, siz * sizeof(int32_t), io);
         } else if (v->isBoolElementAtIndex(0)) {
-          addBinaryAttributeAsSubtypeToDataSet(*i, "bool vect:" + ss.str(), chaos::DataType::SUB_TYPE_BOOLEAN, siz, io);
+          addBinaryAttributeAsSubtypeToDataSet(name, "bool vect:" + ss.str(), chaos::DataType::SUB_TYPE_BOOLEAN, siz, io);
         } else if (v->isInt64ElementAtIndex(0)) {
-          addBinaryAttributeAsSubtypeToDataSet(*i, "int64 vect:" + ss.str(), chaos::DataType::SUB_TYPE_INT64, siz * sizeof(int64_t), io);
+          addBinaryAttributeAsSubtypeToDataSet(name, "int64 vect:" + ss.str(), chaos::DataType::SUB_TYPE_INT64, siz * sizeof(int64_t), io);
         } else if (v->isDoubleElementAtIndex(0)) {
-          addBinaryAttributeAsSubtypeToDataSet(*i, "double vect:" + ss.str(), chaos::DataType::SUB_TYPE_DOUBLE, siz * sizeof(double), io);
+          addBinaryAttributeAsSubtypeToDataSet(name, "double vect:" + ss.str(), chaos::DataType::SUB_TYPE_DOUBLE, siz * sizeof(double), io);
         }
       }
     } else if (cd.isInt32Value(*i)) {
-      addAttributeToDataSet(*i, "int32", chaos::DataType::TYPE_INT32, io);
+      addAttributeToDataSet(name, "int32", chaos::DataType::TYPE_INT32, io);
 
     } else if (cd.isInt64Value(*i)) {
-      addAttributeToDataSet(*i, "int64", chaos::DataType::TYPE_INT64, io);
+      addAttributeToDataSet(name, "int64", chaos::DataType::TYPE_INT64, io);
 
     } else if (cd.isDoubleValue(*i)) {
-      addAttributeToDataSet(*i, "double", chaos::DataType::TYPE_DOUBLE, io);
+      addAttributeToDataSet(name, "double", chaos::DataType::TYPE_DOUBLE, io);
 
     } else if (cd.isStringValue(*i)) {
-      addAttributeToDataSet(*i, "string", chaos::DataType::TYPE_STRING, io, cd.getStringValue(*i).size() + 1);
+      addAttributeToDataSet(name, "string", chaos::DataType::TYPE_STRING, io, cd.getStringValue(*i).size() + 1);
 
     } else if (cd.isBoolValue(*i)) {
-      addAttributeToDataSet(*i, "bool", chaos::DataType::TYPE_BOOLEAN, io);
+      addAttributeToDataSet(name, "bool", chaos::DataType::TYPE_BOOLEAN, io);
 
     } else if (cd.isBinaryValue(*i)) {
       uint32_t size;
       cd.getBinaryValue(*i, size);
       std::stringstream ss;
       ss << size;
-      addBinaryAttributeAsSubtypeToDataSet(*i, "binary:" + ss.str(), chaos::DataType::SUB_TYPE_CHAR, size, io);
+      addBinaryAttributeAsSubtypeToDataSet(name, "binary:" + ss.str(), chaos::DataType::SUB_TYPE_CHAR, size, io);
     }
   }
 }
-- 
GitLab