replace : iotivity -> iotivity-sec
[platform/upstream/iotivity.git] / service / simulator / ramlparser / raml / RamlParser.cpp
index e9e4d0e..07a57c9 100755 (executable)
@@ -8,7 +8,7 @@
  * you may not use this file except in compliance with the License.\r
  * You may obtain a copy of the License at\r
  *\r
- *             http://www.apache.org/licenses/LICENSE-2.0\r
+ *      http://www.apache.org/licenses/LICENSE-2.0\r
  *\r
  * Unless required by applicable law or agreed to in writing, software\r
  * distributed under the License is distributed on an "AS IS" BASIS,\r
 \r
 namespace RAML\r
 {\r
-    RamlPtr RamlParser::build()\r
+    RamlPtr RamlParser::getRamlPtr(RamlParserResult &result)\r
     {\r
-        YAML::Node yamlRootNode = YAML::LoadFile(m_fileLocation + m_ramlName);\r
-        m_ramlPtr->readRamlFromYaml(yamlRootNode);\r
-        setDataFromRoot();\r
-        return (m_ramlPtr);\r
-\r
+        result = m_ramlParserResult;\r
+        return m_ramlPtr;\r
     }\r
     RamlPtr RamlParser::getRamlPtr()\r
     {\r
@@ -42,70 +39,66 @@ namespace RAML
         setBodyDefaultMediaType(getRamlPtr()->getResources());\r
         setBodySchema(getRamlPtr()->getResources());\r
     }\r
-    void RamlParser::setBodyDefaultMediaType(std::map<std::string, RamlResource> resource)\r
+    void RamlParser::setBodyDefaultMediaType(const std::map<std::string, RamlResourcePtr> &resource)\r
     {\r
         if (getRamlPtr()->getMediaType().empty())\r
         {\r
             return;\r
         }\r
-        for (auto it : resource)\r
+        for (auto const &it : resource)\r
         {\r
             std::string type = getRamlPtr()->getMediaType();\r
 \r
-            for (auto  action :  it.second.getActions())\r
+            for (auto const &action :  it.second->getActions())\r
             {\r
-                if (action.second.getRequestBody().empty())\r
+                if (action.second->getRequestBody().empty())\r
                 {\r
-                    std::string resName = it.first;\r
-                    getRamlPtr()->getResource(resName).getAction(action.first).setRequestBody(type);\r
+                    action.second->setRequestBody(type);\r
                 }\r
-                for (auto  response : action.second.getResponses())\r
+                for (auto const &response : action.second->getResponses())\r
                 {\r
-                    if (response.second.getResponseBody().empty())\r
+                    if (response.second->getResponseBody().empty())\r
                     {\r
-                        std::string resName = it.first;\r
-                        std::string responseCode = response.first;\r
-                        getRamlPtr()->getResource(resName).getAction(action.first).getResponse(\r
-                            responseCode).setResponseBody(\r
-                                type);\r
+                        response.second->setResponseBody(type);\r
                     }\r
                 }\r
             }\r
+            setBodyDefaultMediaType(it.second->getResources());\r
         }\r
     }\r
-    void RamlParser::setBodySchema(std::map<std::string, RamlResource> resource)\r
+    void RamlParser::setBodySchema(const std::map<std::string, RamlResourcePtr> &resource)\r
     {\r
         if (getRamlPtr()->getSchemas().empty())\r
         {\r
             return;\r
         }\r
-        for (auto  it : resource)\r
+        for (auto const &it : resource)\r
         {\r
-            for (auto  action :  it.second.getActions())\r
+            for (auto const &action :  it.second->getActions())\r
             {\r
-                for (auto  body :  action.second.getRequestBody())\r
+                for (auto const &body :  action.second->getRequestBody())\r
                 {\r
-                    Schema *schema = body.second.getSchema();\r
+                    SchemaPtr schema = body.second->getSchema();\r
 \r
                     if (schema != NULL)\r
                     {\r
                         std::string schemaValue = schema->getSchema();\r
                         auto pos = std::find_if(getRamlPtr()->getSchemas().begin(), getRamlPtr()->getSchemas().end(),\r
-                                                [schemaValue](std::pair<std::string, Schema> const & pair)\r
+                                                [schemaValue](std::pair<std::string, SchemaPtr> const & pair)\r
                         {\r
                             return (pair.first == schemaValue);\r
                         });\r
                         if (pos != getRamlPtr()->getSchemas().end())\r
                         {\r
-                            schema->setSchema((pos->second.getSchema()));\r
+                            schema->setSchema((pos->second->getSchema()));\r
                         }\r
                     }\r
                 }\r
-                for (auto  response : action.second.getResponses())\r
+                for (auto const &response : action.second->getResponses())\r
                 {\r
-                    for (auto  body :  response.second.getResponseBody())\r
+                    for (auto const &body :  response.second->getResponseBody())\r
                     {\r
-                        Schema *schema = body.second.getSchema();\r
+                        SchemaPtr schema = body.second->getSchema();\r
                         if (schema != NULL)\r
                         {\r
                             std::string schemaValue = schema->getSchema();\r
@@ -119,24 +112,25 @@ namespace RAML
                             }\r
                             if (iter != schemas.end())\r
                             {\r
-                                schema->setSchema((*iter).second.getSchema());\r
+                                schema->setSchema((*iter).second->getSchema());\r
                             }\r
                         }\r
                     }\r
                 }\r
             }\r
+            setBodySchema(it.second->getResources());\r
         }\r
     }\r
-    void RamlParser::setTypes(std::map<std::string, RamlResource> resource)\r
+    void RamlParser::setTypes(const std::map<std::string, RamlResourcePtr> &resource)\r
     {\r
         if (getRamlPtr()->getResourceTypes().empty())\r
         {\r
             return;\r
         }\r
-        for (auto  it : resource)\r
+        for (auto const &it : resource)\r
         {\r
-            auto resourceTypes = getRamlPtr()->getResourceTypes();\r
-            std::string typeValue = it.second.getResourceType();\r
+            auto const &resourceTypes = getRamlPtr()->getResourceTypes();\r
+            std::string typeValue = it.second->getResourceType();\r
 \r
             auto iter = resourceTypes.begin();\r
             for (; iter != resourceTypes.end(); iter++)\r
@@ -146,33 +140,30 @@ namespace RAML
             }\r
             if (iter != resourceTypes.end())\r
             {\r
-                std::string resName = it.first;\r
-                RamlResource &res = getRamlPtr()->getResource(resName);\r
-                RamlResource resType =  (*iter).second;\r
-\r
-                if (resType.getActions().empty())\r
+                if ((*iter).second->getActions().empty())\r
                     return;\r
 \r
-                for (auto resActions : resType.getActions())\r
+                for (auto resActions : (*iter).second->getActions())\r
                 {\r
-                    if (res.getActions().count(resActions.first) == 0)\r
-                        res.setAction(resActions.first, resActions.second);\r
+                    if (it.second->getActions().count(resActions.first) == 0)\r
+                        it.second->setAction(resActions.first, std::make_shared<Action>(*(resActions.second)));\r
                 }\r
             }\r
+            setTypes(it.second->getResources());\r
         }\r
     }\r
-    void RamlParser::setTraits(std::map<std::string, RamlResource> resource)\r
+    void RamlParser::setTraits(const std::map<std::string, RamlResourcePtr> &resource)\r
     {\r
         if (getRamlPtr()->getTraits().empty())\r
         {\r
             return;\r
         }\r
-        for (auto  it : resource)\r
+        for (auto const &it : resource)\r
         {\r
-            auto trait = getRamlPtr()->getTraits();\r
-            for (auto act : it.second.getActions())\r
+            auto const &trait = getRamlPtr()->getTraits();\r
+            for (auto const &act : it.second->getActions())\r
             {\r
-                for (std::string  traitValue :  act.second.getTraits())\r
+                for (const std::string &traitValue :  act.second->getTraits())\r
                 {\r
                     auto iter = trait.begin();\r
                     for (; iter != trait.end(); iter++)\r
@@ -182,30 +173,25 @@ namespace RAML
                     }\r
                     if (iter != trait.end())\r
                     {\r
-                        std::string resName = it.first;\r
-                        RamlResource &res = getRamlPtr()->getResource(resName);\r
-                        Action resTrait =  (*iter).second;\r
-\r
-                        Action &action = res.getAction(act.first);\r
-                        for (auto head : resTrait.getHeaders())\r
+                        for (auto head : (*iter).second->getHeaders())\r
                         {\r
-                            if (action.getHeaders().count(head.first) == 0)\r
-                                action.setHeader(head.first, head.second);\r
+                            if (act.second->getHeaders().count(head.first) == 0)\r
+                                act.second->setHeader(head.first, head.second);\r
                         }\r
-                        for (auto query : resTrait.getQueryParameters())\r
+                        for (auto query : (*iter).second->getQueryParameters())\r
                         {\r
-                            if (action.getQueryParameters().count(query.first) == 0)\r
-                                action.setQueryParameter(query.first, query.second);\r
+                            if (act.second->getQueryParameters().count(query.first) == 0)\r
+                                act.second->setQueryParameter(query.first, query.second);\r
                         }\r
-                        for (auto resp : resTrait.getResponses())\r
+                        for (auto resp : (*iter).second->getResponses())\r
                         {\r
-                            if (action.getResponses().count(resp.first) == 0)\r
-                                action.setResponse(resp.first, resp.second);\r
+                            if (act.second->getResponses().count(resp.first) == 0)\r
+                                act.second->setResponse(resp.first, resp.second);\r
                         }\r
                     }\r
                 }\r
             }\r
-            for (std::string  traitValue :  it.second.getTraits())\r
+            for (const std::string &traitValue :  it.second->getTraits())\r
             {\r
                 auto iter = trait.begin();\r
                 for (; iter != trait.end(); iter++)\r
@@ -215,31 +201,27 @@ namespace RAML
                 }\r
                 if (iter != trait.end())\r
                 {\r
-                    std::string resName = it.first;\r
-                    RamlResource &res = getRamlPtr()->getResource(resName);\r
-                    Action resTrait =  (*iter).second;\r
-\r
-                    for (auto act : res.getActions())\r
+                    for (auto act : it.second->getActions())\r
                     {\r
-                        Action &action = res.getAction(act.first);\r
-                        for (auto head : resTrait.getHeaders())\r
+                        for (auto head : (*iter).second->getHeaders())\r
                         {\r
-                            if (action.getHeaders().count(head.first) == 0)\r
-                                action.setHeader(head.first, head.second);\r
+                            if (act.second->getHeaders().count(head.first) == 0)\r
+                                act.second->setHeader(head.first, head.second);\r
                         }\r
-                        for (auto query : resTrait.getQueryParameters())\r
+                        for (auto query : (*iter).second->getQueryParameters())\r
                         {\r
-                            if (action.getQueryParameters().count(query.first) == 0)\r
-                                action.setQueryParameter(query.first, query.second);\r
+                            if (act.second->getQueryParameters().count(query.first) == 0)\r
+                                act.second->setQueryParameter(query.first, query.second);\r
                         }\r
-                        for (auto resp : resTrait.getResponses())\r
+                        for (auto resp : (*iter).second->getResponses())\r
                         {\r
-                            if (action.getResponses().count(resp.first) == 0)\r
-                                action.setResponse(resp.first, resp.second);\r
+                            if (act.second->getResponses().count(resp.first) == 0)\r
+                                act.second->setResponse(resp.first, resp.second);\r
                         }\r
                     }\r
                 }\r
             }\r
+            setTraits(it.second->getResources());\r
         }\r
     }\r
 \r