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
27 #include "AbstractParam.h"
\r
28 #include "UriParameter.h"
\r
29 #include "QueryParameter.h"
\r
30 #include "FormParameter.h"
\r
33 #include "RequestResponseBody.h"
\r
34 #include "RamlResource.h"
\r
35 #include "ActionType.h"
\r
37 #include "Response.h"
\r
39 #include "IncludeResolver.h"
\r
41 #include "DocumentationItem.h"
\r
42 #include "yaml-cpp/yaml.h"
\r
43 #include "yaml-cpp/exceptions.h"
\r
44 #include "RamlExceptions.h"
\r
54 virtual std::string getTitle() const;
\r
55 virtual void setTitle(const std::string &title);
\r
57 virtual std::string getVersion() const;
\r
58 virtual void setVersion(const std::string &version);
\r
60 virtual std::string getBaseUri() const;
\r
61 virtual void setBaseUri(const std::string &baseUri);
\r
63 virtual std::list<std::string> const &getProtocols() const;
\r
64 virtual void setProtocol(const std::string &protocol);
\r
67 virtual std::map<std::string, UriParameterPtr> const &getBaseUriParameters() const;
\r
68 virtual void setBaseUriParameter(const std::string ¶mName, const UriParameterPtr &uriParameter);
\r
70 virtual std::string getMediaType() const;
\r
71 virtual void setMediaType(const std::string &mediaType);
\r
73 virtual std::list<std::pair<std::string, SchemaPtr> > const &getSchemas() const;
\r
74 virtual void setSchema(const std::string &schemaName, const SchemaPtr &schema);
\r
76 virtual std::list<std::pair<std::string, RamlResourcePtr> > const &getResourceTypes() const;
\r
77 virtual void setResourceType(const std::string &typeName, const RamlResourcePtr &resourceType);
\r
79 virtual std::list<std::pair<std::string, ActionPtr> > const &getTraits() const;
\r
80 virtual void setTrait(const std::string &traitName, const ActionPtr &trait);
\r
82 virtual RamlResourcePtr getResource(const std::string &resourceName);
\r
83 virtual std::map<std::string, RamlResourcePtr> const &getResources() const;
\r
84 virtual void setResource(const std::string &resourceKey, const RamlResourcePtr &resource);
\r
86 virtual void setDocumentationItem(const std::shared_ptr<DocumentationItem> &documentationItem);
\r
87 virtual std::list<std::shared_ptr<DocumentationItem> > const &getDocumentation() const;
\r
89 void readRamlFromYaml(const YAML::Node &yamlNode);
\r
90 Raml() : m_includeResolver(std::make_shared<IncludeResolver>()) {}
\r
91 Raml(const std::string &fileLocation,
\r
92 const std::string &ramlName) : m_includeResolver(std::make_shared<IncludeResolver>(fileLocation))
\r
96 YAML::Node yamlRootNode = YAML::LoadFile(fileLocation + ramlName);
\r
97 readRamlFromYaml(yamlRootNode);
\r
99 catch (YAML::ParserException &e)
\r
101 throw RamlParserException(e.mark, e.msg);
\r
103 catch (YAML::RepresentationException &e)
\r
105 throw RamlRepresentationException(e.mark, e.msg);
\r
107 catch (YAML::BadFile &e)
\r
109 throw RamlBadFile(e.mark, e.msg);
\r
111 catch (JsonException &e)
\r
117 std::string m_title;
\r
118 std::string m_version;
\r
119 std::string m_baseUri;
\r
120 std::list<std::string> m_protocols;
\r
121 std::map<std::string, UriParameterPtr> m_baseUriParameters;
\r
122 std::string m_mediaType;
\r
123 std::list <std::pair<std::string, SchemaPtr> > m_schemas;
\r
124 std::list <std::pair<std::string, RamlResourcePtr> > m_resourceTypes;
\r
125 std::list <std::pair<std::string, ActionPtr> > m_traits;
\r
126 std::map<std::string, RamlResourcePtr> m_resources;
\r
127 std::list<std::shared_ptr<DocumentationItem> > m_documentation;
\r
128 IncludeResolverPtr m_includeResolver;
\r
131 typedef std::shared_ptr<Raml> RamlPtr;
\r