Added changes to read as Model from JSON schema parser
authorabitha.s <abitha.s@samsung.com>
Fri, 5 Feb 2016 13:18:49 +0000 (18:48 +0530)
committerMadan Lanka <lanka.madan@samsung.com>
Thu, 11 Feb 2016 01:26:32 +0000 (01:26 +0000)
Change-Id: I5ccb5e0649a5f54fcc9f89903ba991216f2ba452
Signed-off-by: abitha.s <abitha.s@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/4949
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Radha Bhavani <radha.p@samsung.com>
Reviewed-by: Harish Marappa <h.marappa@samsung.com>
Reviewed-by: Madan Lanka <lanka.madan@samsung.com>
service/simulator/ramlparser/raml/jsonSchemaParser/JsonSchema.cpp
service/simulator/ramlparser/raml/jsonSchemaParser/JsonSchema.h
service/simulator/ramlparser/raml/jsonSchemaParser/Properties.h

index b62dcb5..bc69828 100755 (executable)
@@ -364,6 +364,10 @@ namespace RAML
         {\r
             readArray(childProperties, property);\r
         }\r
+        else if (attType == "object")\r
+        {\r
+            readObject(childProperties, property);\r
+        }\r
     }\r
 \r
     void JsonSchema::readString(cJSON *childProperties, PropertiesPtr &property)\r
@@ -650,6 +654,68 @@ namespace RAML
         }\r
     }\r
 \r
+    void JsonSchema::readObject(cJSON *childProperties,  PropertiesPtr &property)\r
+    {\r
+        property->setTypeString("object");\r
+\r
+        cJSON *subProperties = cJSON_GetObjectItem(childProperties, "properties");\r
+        cJSON *itemRequiredValues = cJSON_GetObjectItem(childProperties, "required");\r
+        if (subProperties)\r
+        {\r
+            cJSON *childProperties = subProperties->child;\r
+            std::vector<Properties> propertyVector;\r
+            while (childProperties)\r
+            {\r
+                std::string attName = childProperties->string;\r
+                PropertiesPtr prop = std::make_shared<Properties>(attName);\r
+                readProp(childProperties, attName);\r
+                propertyVector.push_back(*prop);\r
+                childProperties = childProperties->next;\r
+            }\r
+            property->setValue(propertyVector);\r
+            if (itemRequiredValues)\r
+            {\r
+                int size = cJSON_GetArraySize(itemRequiredValues);\r
+                int index = 0;\r
+                do\r
+                {\r
+                    property->setRequiredValue(cJSON_GetArrayItem(itemRequiredValues, index)->valuestring);\r
+                }\r
+                while ( ++index < size);\r
+            }\r
+        }\r
+        else\r
+        {\r
+            JsonParameters param;\r
+\r
+            cJSON *itemAllOf = cJSON_GetObjectItem(childProperties, "allOf");\r
+            if (itemAllOf)\r
+            {\r
+                readAllOf(itemAllOf , param);\r
+            }\r
+            cJSON *itemReference = cJSON_GetObjectItem(childProperties, "$ref");\r
+            if (itemReference)\r
+            {\r
+                readJsonRef(itemReference , param);\r
+            }\r
+\r
+            if (param.getType() == "object")\r
+            {\r
+                std::vector<Properties> propertyVector;\r
+                for (auto prop : param.getProperties())\r
+                {\r
+                    propertyVector.push_back(*(prop.second));\r
+                }\r
+                property->setValue(propertyVector);\r
+\r
+                for (auto req : param.getRequired())\r
+                {\r
+                    property->setRequiredValue(req);\r
+                }\r
+            }\r
+        }\r
+    }\r
+\r
     void JsonSchema::readFile(std::string &fileName ,  JsonParameters &param)\r
     {\r
         cJSON *json = m_includeResolver->readToJson(fileName);\r
index a9fe422..333e571 100755 (executable)
@@ -294,6 +294,7 @@ namespace RAML
             void readDouble( cJSON *childProperties,  PropertiesPtr &property);\r
             void readArray( cJSON *childProperties,  PropertiesPtr &property);\r
             void readItems(cJSON *item, PropertiesPtr &property);\r
+            void readObject(cJSON *childProperties,  PropertiesPtr &property);\r
 \r
             void readFile(std::string &fileName , JsonParameters &param);\r
             void readFile(std::string &fileName , std::string &defName , JsonParameters &param);\r
index af2ae55..04e9dc8 100755 (executable)
@@ -60,7 +60,8 @@ namespace RAML
         BOOLEAN,\r
         STRING,\r
         PROPERTY,\r
-        ARRAY\r
+        ARRAY,\r
+        OBJECT\r
     };\r
     /**\r
         * @class   ValueProperty\r
@@ -426,7 +427,7 @@ namespace RAML
             template <typename T>\r
             T getValue() const\r
             {\r
-                return boost::get<T>(m_value);\r
+                return boost::get<T>(*(m_value.get()));\r
             }\r
 \r
             /**\r