* 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
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
}\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
}\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
}\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
}\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