Adding JsonSchema parser implementation for simulator and Updating Raml Parser.
[platform/upstream/iotivity.git] / service / simulator / ramlparser / raml / model / Raml.h
1 /******************************************************************\r
2  *\r
3  * Copyright 2015 Samsung Electronics All Rights Reserved.\r
4  *\r
5  *\r
6  *\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
10  *\r
11  *      http://www.apache.org/licenses/LICENSE-2.0\r
12  *\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
18  *\r
19  ******************************************************************/\r
20 \r
21 #ifndef RAML_H\r
22 #define RAML_H\r
23 \r
24 #include <map>\r
25 #include <list>\r
26 #include <string>\r
27 #include "AbstractParam.h"\r
28 #include "UriParameter.h"\r
29 #include "QueryParameter.h"\r
30 #include "FormParameter.h"\r
31 #include "Header.h"\r
32 \r
33 #include "RequestResponseBody.h"\r
34 #include "RamlResource.h"\r
35 #include "ActionType.h"\r
36 #include "Action.h"\r
37 #include "Response.h"\r
38 #include "Schema.h"\r
39 #include "IncludeResolver.h"\r
40 \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
45 #include "Utils.h"\r
46 #include "cJSON.h"\r
47 \r
48 \r
49 namespace RAML\r
50 {\r
51     class Raml\r
52     {\r
53         public:\r
54             virtual std::string getTitle() const;\r
55             virtual void setTitle(const std::string &title);\r
56 \r
57             virtual std::string getVersion() const;\r
58             virtual void setVersion(const std::string &version);\r
59 \r
60             virtual std::string getBaseUri() const;\r
61             virtual void setBaseUri(const std::string &baseUri);\r
62 \r
63             virtual std::list<std::string> const &getProtocols() const;\r
64             virtual void setProtocol(const std::string &protocol);\r
65 \r
66 \r
67             virtual std::map<std::string, UriParameterPtr> const &getBaseUriParameters() const;\r
68             virtual void setBaseUriParameter(const std::string &paramName, const UriParameterPtr &uriParameter);\r
69 \r
70             virtual std::string getMediaType() const;\r
71             virtual void setMediaType(const std::string &mediaType);\r
72 \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
75 \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
78 \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
81 \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
85 \r
86             virtual void setDocumentationItem(const std::shared_ptr<DocumentationItem> &documentationItem);\r
87             virtual std::list<std::shared_ptr<DocumentationItem> > const &getDocumentation() const;\r
88 \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
93             {\r
94                 try\r
95                 {\r
96                     YAML::Node yamlRootNode = YAML::LoadFile(fileLocation + ramlName);\r
97                     readRamlFromYaml(yamlRootNode);\r
98                 }\r
99                 catch (YAML::ParserException &e)\r
100                 {\r
101                     throw RamlParserException(e.mark, e.msg);\r
102                 }\r
103                 catch (YAML::RepresentationException &e)\r
104                 {\r
105                     throw RamlRepresentationException(e.mark, e.msg);\r
106                 }\r
107                 catch (YAML::BadFile &e)\r
108                 {\r
109                     throw RamlBadFile(e.mark, e.msg);\r
110                 }\r
111                 catch (JsonException &e)\r
112                 {\r
113                     throw;\r
114                 }\r
115             }\r
116         private:\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
129     };\r
130 \r
131     typedef std::shared_ptr<Raml> RamlPtr;\r
132 \r
133 }\r
134 #endif\r