1 /******************************************************************
\r
3 * Copyright 2015 Samsung Electronics All Rights Reserved.
\r
7 * Licensed under the Apache License, Version 2.0 (the "License");
\r
8 * you may not use this file except in compliance with the License.
\r
9 * You may obtain a copy of the License at
\r
11 * http://www.apache.org/licenses/LICENSE-2.0
\r
13 * Unless required by applicable law or agreed to in writing, software
\r
14 * distributed under the License is distributed on an "AS IS" BASIS,
\r
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
16 * See the License for the specific language governing permissions and
\r
17 * limitations under the License.
\r
19 ******************************************************************/
\r
21 #include "RamlParser.h"
\r
26 RamlPtr RamlParser::getRamlPtr(RamlParserResult &result)
\r
28 result = m_ramlParserResult;
\r
31 RamlPtr RamlParser::getRamlPtr()
\r
35 void RamlParser::setDataFromRoot()
\r
37 setTypes(getRamlPtr()->getResources());
\r
38 setTraits(getRamlPtr()->getResources());
\r
39 setBodyDefaultMediaType(getRamlPtr()->getResources());
\r
40 setBodySchema(getRamlPtr()->getResources());
\r
42 void RamlParser::setBodyDefaultMediaType(const std::map<std::string, RamlResourcePtr> &resource)
\r
44 if (getRamlPtr()->getMediaType().empty())
\r
48 for (auto const &it : resource)
\r
50 std::string type = getRamlPtr()->getMediaType();
\r
52 for (auto const &action : it.second->getActions())
\r
54 if (action.second->getRequestBody().empty())
\r
56 action.second->setRequestBody(type);
\r
58 for (auto const &response : action.second->getResponses())
\r
60 if (response.second->getResponseBody().empty())
\r
62 response.second->setResponseBody(type);
\r
66 setBodyDefaultMediaType(it.second->getResources());
\r
69 void RamlParser::setBodySchema(const std::map<std::string, RamlResourcePtr> &resource)
\r
71 if (getRamlPtr()->getSchemas().empty())
\r
75 for (auto const &it : resource)
\r
77 for (auto const &action : it.second->getActions())
\r
79 for (auto const &body : action.second->getRequestBody())
\r
81 SchemaPtr schema = body.second->getSchema();
\r
85 std::string schemaValue = schema->getSchema();
\r
86 auto pos = std::find_if(getRamlPtr()->getSchemas().begin(), getRamlPtr()->getSchemas().end(),
\r
87 [schemaValue](std::pair<std::string, SchemaPtr> const & pair)
\r
89 return (pair.first == schemaValue);
\r
91 if (pos != getRamlPtr()->getSchemas().end())
\r
93 schema->setSchema((pos->second->getSchema()));
\r
97 for (auto const &response : action.second->getResponses())
\r
99 for (auto const &body : response.second->getResponseBody())
\r
101 SchemaPtr schema = body.second->getSchema();
\r
102 if (schema != NULL)
\r
104 std::string schemaValue = schema->getSchema();
\r
105 auto schemas = getRamlPtr()->getSchemas();
\r
107 auto iter = schemas.begin();
\r
108 for (; iter != schemas.end(); iter++)
\r
110 if (((*iter).first) == schemaValue)
\r
113 if (iter != schemas.end())
\r
115 schema->setSchema((*iter).second->getSchema());
\r
121 setBodySchema(it.second->getResources());
\r
124 void RamlParser::setTypes(const std::map<std::string, RamlResourcePtr> &resource)
\r
126 if (getRamlPtr()->getResourceTypes().empty())
\r
130 for (auto const &it : resource)
\r
132 auto const &resourceTypes = getRamlPtr()->getResourceTypes();
\r
133 std::string typeValue = it.second->getResourceType();
\r
135 auto iter = resourceTypes.begin();
\r
136 for (; iter != resourceTypes.end(); iter++)
\r
138 if (((*iter).first) == typeValue)
\r
141 if (iter != resourceTypes.end())
\r
143 if ((*iter).second->getActions().empty())
\r
146 for (auto resActions : (*iter).second->getActions())
\r
148 if (it.second->getActions().count(resActions.first) == 0)
\r
149 it.second->setAction(resActions.first, std::make_shared<Action>(*(resActions.second)));
\r
152 setTypes(it.second->getResources());
\r
155 void RamlParser::setTraits(const std::map<std::string, RamlResourcePtr> &resource)
\r
157 if (getRamlPtr()->getTraits().empty())
\r
161 for (auto const &it : resource)
\r
163 auto const &trait = getRamlPtr()->getTraits();
\r
164 for (auto const &act : it.second->getActions())
\r
166 for (const std::string &traitValue : act.second->getTraits())
\r
168 auto iter = trait.begin();
\r
169 for (; iter != trait.end(); iter++)
\r
171 if (((*iter).first) == traitValue)
\r
174 if (iter != trait.end())
\r
176 for (auto head : (*iter).second->getHeaders())
\r
178 if (act.second->getHeaders().count(head.first) == 0)
\r
179 act.second->setHeader(head.first, head.second);
\r
181 for (auto query : (*iter).second->getQueryParameters())
\r
183 if (act.second->getQueryParameters().count(query.first) == 0)
\r
184 act.second->setQueryParameter(query.first, query.second);
\r
186 for (auto resp : (*iter).second->getResponses())
\r
188 if (act.second->getResponses().count(resp.first) == 0)
\r
189 act.second->setResponse(resp.first, resp.second);
\r
194 for (const std::string &traitValue : it.second->getTraits())
\r
196 auto iter = trait.begin();
\r
197 for (; iter != trait.end(); iter++)
\r
199 if (((*iter).first) == traitValue)
\r
202 if (iter != trait.end())
\r
204 for (auto act : it.second->getActions())
\r
206 for (auto head : (*iter).second->getHeaders())
\r
208 if (act.second->getHeaders().count(head.first) == 0)
\r
209 act.second->setHeader(head.first, head.second);
\r
211 for (auto query : (*iter).second->getQueryParameters())
\r
213 if (act.second->getQueryParameters().count(query.first) == 0)
\r
214 act.second->setQueryParameter(query.first, query.second);
\r
216 for (auto resp : (*iter).second->getResponses())
\r
218 if (act.second->getResponses().count(resp.first) == 0)
\r
219 act.second->setResponse(resp.first, resp.second);
\r
224 setTraits(it.second->getResources());
\r