Controller Blueprints MS
[ccsdk/cds.git] / ms / controllerblueprints / modules / service / src / main / java / org / onap / ccsdk / apps / controllerblueprints / service / common / SwaggerGenerator.java
1 /*\r
2  * Copyright © 2017-2018 AT&T Intellectual Property.\r
3  *\r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  *     http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 \r
17 package org.onap.ccsdk.apps.controllerblueprints.service.common;\r
18 \r
19 import io.swagger.models.*;\r
20 import io.swagger.models.parameters.BodyParameter;\r
21 import io.swagger.models.parameters.Parameter;\r
22 import io.swagger.models.properties.*;\r
23 import io.swagger.util.Json;\r
24 import org.apache.commons.collections.MapUtils;\r
25 import org.apache.commons.lang3.BooleanUtils;\r
26 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants;\r
27 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintTypes;\r
28 import org.onap.ccsdk.apps.controllerblueprints.core.data.PropertyDefinition;\r
29 import org.onap.ccsdk.apps.controllerblueprints.core.data.ServiceTemplate;\r
30 \r
31 import java.util.*;\r
32 \r
33 /**\r
34  * SwaggerGenerator.java Purpose: Provide Service to generate service template input schema definition and Sample Json\r
35  * generation.\r
36  *\r
37  * @author Brinda Santh\r
38  * @version 1.0\r
39  */\r
40 @Deprecated\r
41 public class SwaggerGenerator {\r
42 \r
43     private ServiceTemplate serviceTemplate;\r
44 \r
45     /**\r
46      * This is a SwaggerGenerator constructor\r
47      */\r
48     public SwaggerGenerator(ServiceTemplate serviceTemplate) {\r
49         this.serviceTemplate = serviceTemplate;\r
50     }\r
51 \r
52     /**\r
53      * This is a generateSwagger\r
54      *\r
55      * @return String\r
56      */\r
57     public String generateSwagger() {\r
58         String swaggerContent = null;\r
59 \r
60         Swagger swagger = new Swagger().info(getInfo());\r
61 \r
62         swagger.setPaths(getPaths());\r
63         swagger.setDefinitions(getDefinition());\r
64 \r
65 \r
66         swaggerContent = Json.pretty(swagger);\r
67         return swaggerContent;\r
68     }\r
69 \r
70     private Info getInfo() {\r
71         Info info = new Info();\r
72         Contact contact = new Contact();\r
73         contact.setName(serviceTemplate.getMetadata().get(BluePrintConstants.METADATA_TEMPLATE_AUTHOR));\r
74         info.setContact(contact);\r
75         info.setTitle(serviceTemplate.getMetadata().get(BluePrintConstants.METADATA_TEMPLATE_NAME));\r
76         info.setDescription(serviceTemplate.getDescription());\r
77         info.setVersion(serviceTemplate.getMetadata().get(BluePrintConstants.METADATA_TEMPLATE_VERSION));\r
78         return info;\r
79     }\r
80 \r
81     private Map<String, Path> getPaths() {\r
82         Map<String, Path> paths = new HashMap<>();\r
83         Path path = new Path();\r
84         Operation post = new Operation();\r
85         post.setOperationId("configure");\r
86         post.setConsumes(Arrays.asList("application/json", "application/xml"));\r
87         post.setProduces(Arrays.asList("application/json", "application/xml"));\r
88         List<Parameter> parameters = new ArrayList<>();\r
89         Parameter in = new BodyParameter().schema(new RefModel("#/definitions/inputs"));\r
90         in.setRequired(true);\r
91         in.setName("inputs");\r
92         parameters.add(in);\r
93         post.setParameters(parameters);\r
94 \r
95         Map<String, Response> responses = new HashMap<>();\r
96         Response response = new Response().description("Success");\r
97         responses.put("200", response);\r
98 \r
99         Response failureResponse = new Response().description("Failure");\r
100         responses.put("400", failureResponse);\r
101         post.setResponses(responses);\r
102 \r
103         path.setPost(post);\r
104         paths.put("/operations/config-selfservice-api:configure", path);\r
105         return paths;\r
106     }\r
107 \r
108     private Map<String, Model> getDefinition() {\r
109         Map<String, Model> models = new HashMap<>();\r
110 \r
111         ModelImpl inputmodel = new ModelImpl();\r
112         inputmodel.setTitle("inputs");\r
113         serviceTemplate.getTopologyTemplate().getInputs().forEach((propertyName, property) -> {\r
114             Property defProperty = getPropery(propertyName, property);\r
115             inputmodel.property(propertyName, defProperty);\r
116         });\r
117         models.put("inputs", inputmodel);\r
118 \r
119         if (MapUtils.isNotEmpty(serviceTemplate.getDataTypes())) {\r
120             serviceTemplate.getDataTypes().forEach((name, dataType) -> {\r
121                 ModelImpl model = new ModelImpl();\r
122                 model.setDescription(dataType.getDescription());\r
123                 // model.setType("object");\r
124                 if (dataType != null && MapUtils.isNotEmpty(dataType.getProperties())) {\r
125 \r
126                     dataType.getProperties().forEach((propertyName, property) -> {\r
127                         Property defProperty = getPropery(propertyName, property);\r
128                         model.addProperty(propertyName, defProperty);\r
129                     });\r
130                 }\r
131                 models.put(name, model);\r
132             });\r
133         }\r
134         return models;\r
135 \r
136     }\r
137 \r
138     private Property getPropery(String name, PropertyDefinition propertyDefinition) {\r
139         Property defProperty = null;\r
140 \r
141         if (BluePrintTypes.validPrimitiveTypes().contains(propertyDefinition.getType())) {\r
142             if (BluePrintConstants.DATA_TYPE_BOOLEAN.equals(propertyDefinition.getType())) {\r
143                 defProperty = new BooleanProperty();\r
144             } else if (BluePrintConstants.DATA_TYPE_INTEGER.equals(propertyDefinition.getType())) {\r
145                 StringProperty stringProperty = new StringProperty();\r
146                 stringProperty.setType("integer");\r
147                 defProperty = stringProperty;\r
148             } else if (BluePrintConstants.DATA_TYPE_FLOAT.equals(propertyDefinition.getType())) {\r
149                 StringProperty stringProperty = new StringProperty();\r
150                 stringProperty.setFormat("float");\r
151                 defProperty = stringProperty;\r
152             } else if (BluePrintConstants.DATA_TYPE_TIMESTAMP.equals(propertyDefinition.getType())) {\r
153                 DateTimeProperty dateTimeProperty = new DateTimeProperty();\r
154                 dateTimeProperty.setFormat("date-time");\r
155                 defProperty = dateTimeProperty;\r
156             } else {\r
157                 defProperty = new StringProperty();\r
158             }\r
159         } else if (BluePrintTypes.validCollectionTypes().contains(propertyDefinition.getType())) {\r
160             ArrayProperty arrayProperty = new ArrayProperty();\r
161             if (propertyDefinition.getEntrySchema() != null) {\r
162                 String entrySchema = propertyDefinition.getEntrySchema().getType();\r
163                 if (!BluePrintTypes.validPrimitiveTypes().contains(entrySchema)) {\r
164                     Property innerType = new RefProperty("#/definitions/" + entrySchema);\r
165                     arrayProperty.setItems(innerType);\r
166                 } else {\r
167                     Property innerType = new StringProperty();\r
168                     arrayProperty.setItems(innerType);\r
169                 }\r
170                 defProperty = arrayProperty;\r
171             }\r
172 \r
173         } else {\r
174             defProperty = new RefProperty("#/definitions/" + propertyDefinition.getType());\r
175         }\r
176         defProperty.setName(name);\r
177         if (propertyDefinition.getDefaultValue() != null) {\r
178             defProperty.setDefault(String.valueOf(propertyDefinition.getDefaultValue()));\r
179         }\r
180 \r
181         defProperty.setRequired(BooleanUtils.isTrue(propertyDefinition.getRequired()));\r
182         defProperty.setDescription(propertyDefinition.getDescription());\r
183         return defProperty;\r
184     }\r
185 \r
186 \r
187 }\r