Merge "New APIs : hasAttribute, numberOfAttributes, erase in OCRepresentation."
authorErich Keane <erich.keane@intel.com>
Mon, 29 Sep 2014 17:46:55 +0000 (10:46 -0700)
committerGerrit Code Review <gerrit@oicreview.vlan14.01.org>
Mon, 29 Sep 2014 17:46:55 +0000 (10:46 -0700)
examples/garageclient.cpp
include/OCApi.h

index 08b98f0..813c06b 100644 (file)
@@ -51,8 +51,35 @@ Garage myGarage;
 
 void printRepresentation(const OCRepresentation& rep)
 {
-        rep.getValue("state", myGarage.m_state);
-        rep.getValue("name", myGarage.m_name);
+
+        // Check if attribute "name" exists, and then getValue
+        if(rep.hasAttribute("name"))
+        {
+            myGarage.m_name = rep.getValue<std::string>("name");
+        }
+
+        // You can directly try to get the value. this function
+        // return false if there is no attribute "state"
+        if(!rep.getValue("state", myGarage.m_state))
+        {
+            std::cout << "Attribute state doesn't exist in the representation\n";
+        }
+
+
+        OCRepresentation rep2 = rep;
+
+        std::cout << "Number of attributes in rep2: "
+                  << rep2.numberOfAttributes() << std::endl;
+
+        if(rep2.erase("name"))
+        {
+            std::cout << "attribute: name, was removed successfully from rep2.\n";
+        }
+
+        std::cout << "Number of attributes in rep2: "
+                  << rep2.numberOfAttributes() << std::endl;
+
+
         rep.getValue("light", myGarage.m_lightRep);
 
         myGarage.m_lightRep.getValue("states", myGarage.m_lightStates);
index d603a12..87c13d5 100644 (file)
@@ -142,6 +142,11 @@ namespace OC
         public:
         OCRepresentation() {}
 
+        bool erase(const std::string& str)
+        {
+            return m_attributeMap.erase(str) != 0;
+        }
+
         std::string getUri(void) const
         {
             return m_uri;
@@ -153,6 +158,19 @@ namespace OC
         template <typename T>
         bool getValue(const std::string& str, T& val) const;
 
+        template <typename T>
+        T getValue(const std::string& str) const;
+
+        bool hasAttribute(const std::string& str) const
+        {
+            return m_attributeMap.find(str) != m_attributeMap.end();
+        }
+
+        int numberOfAttributes() const
+        {
+            return m_attributeMap.size();
+        }
+
         void setUri(std::string uri)
         {
             m_uri = uri;
@@ -526,6 +544,22 @@ namespace OC
         m_attributeMap[str] = getJSON(val);
     }
 
+    template <typename T>
+    T OCRepresentation::getValue(const std::string& str) const
+    {
+        T val;
+
+        auto x = m_attributeMap.find(str);
+
+        if(m_attributeMap.end() != x)
+        {
+            AttributeValue v = val;
+            parseJSON(v, x->second);
+            val = boost::get<T>(v);
+        }
+
+        return val;
+    }
 
     template <typename T>
     bool OCRepresentation::getValue(const std::string& str, T& val) const