81f7d7018b84729e5ff510dca7abb62953a791c7
[ccsdk/cds.git] /
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 org.apache.commons.collections.MapUtils;\r
24 import org.apache.commons.lang3.BooleanUtils;\r
25 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants;\r
26 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintTypes;\r
27 import org.onap.ccsdk.apps.controllerblueprints.core.data.PropertyDefinition;\r
28 import org.onap.ccsdk.apps.controllerblueprints.core.data.ServiceTemplate;\r
29 \r
30 import java.util.*;\r
31 \r
32 /**\r
33  * SwaggerGenerator.java Purpose: Provide Service to generate service template input schema definition and Sample Json\r
34  * generation.\r
35  *\r
36  * @author Brinda Santh\r
37  * @version 1.0\r
38  */\r
39 @Deprecated\r
40 public class SwaggerGenerator {\r
41 \r
42     private ServiceTemplate serviceTemplate;\r
43 \r
44     /**\r
45      * This is a SwaggerGenerator constructor\r
46      */\r
47     public SwaggerGenerator(ServiceTemplate serviceTemplate) {\r
48         this.serviceTemplate = serviceTemplate;\r
49     }\r
50 \r
51     /**\r
52      * This is a generateSwagger\r
53      *\r
54      * @return String\r
55      */\r
56     public String generateSwagger() {\r
57         String swaggerContent = null;\r
58 \r
59         Swagger swagger = new Swagger().info(getInfo());\r
60 \r
61         swagger.setPaths(getPaths());\r
62         swagger.setDefinitions(getDefinition());\r
63 \r
64 \r
65         return swagger.toString();\r
66     }\r
67 \r
68     private Info getInfo() {\r
69         Info info = new Info();\r
70         Contact contact = new Contact();\r
71         contact.setName(serviceTemplate.getMetadata().get(BluePrintConstants.METADATA_TEMPLATE_AUTHOR));\r
72         info.setContact(contact);\r
73         info.setTitle(serviceTemplate.getMetadata().get(BluePrintConstants.METADATA_TEMPLATE_NAME));\r
74         info.setDescription(serviceTemplate.getDescription());\r
75         info.setVersion(serviceTemplate.getMetadata().get(BluePrintConstants.METADATA_TEMPLATE_VERSION));\r
76         return info;\r
77     }\r
78 \r
79     private Map<String, Path> getPaths() {\r
80         Map<String, Path> paths = new HashMap<>();\r
81         Path path = new Path();\r
82         Operation post = new Operation();\r
83         post.setOperationId("configure");\r
84         post.setConsumes(Arrays.asList("application/json", "application/xml"));\r
85         post.setProduces(Arrays.asList("application/json", "application/xml"));\r
86         List<Parameter> parameters = new ArrayList<>();\r
87         Parameter in = new BodyParameter().schema(new RefModel("#/definitions/inputs"));\r
88         in.setRequired(true);\r
89         in.setName("inputs");\r
90         parameters.add(in);\r
91         post.setParameters(parameters);\r
92 \r
93         Map<String, Response> responses = new HashMap<>();\r
94         Response response = new Response().description("Success");\r
95         responses.put("200", response);\r
96 \r
97         Response failureResponse = new Response().description("Failure");\r
98         responses.put("400", failureResponse);\r
99         post.setResponses(responses);\r
100 \r
101         path.setPost(post);\r
102         paths.put("/operations/config-selfservice-api:configure", path);\r
103         return paths;\r
104     }\r
105 \r
106     private Map<String, Model> getDefinition() {\r
107         Map<String, Model> models = new HashMap<>();\r
108 \r
109         ModelImpl inputmodel = new ModelImpl();\r
110         inputmodel.setTitle("inputs");\r
111         serviceTemplate.getTopologyTemplate().getInputs().forEach((propertyName, property) -> {\r
112             Property defProperty = getPropery(propertyName, property);\r
113             inputmodel.property(propertyName, defProperty);\r
114         });\r
115         models.put("inputs", inputmodel);\r
116 \r
117         if (MapUtils.isNotEmpty(serviceTemplate.getDataTypes())) {\r
118             serviceTemplate.getDataTypes().forEach((name, dataType) -> {\r
119                 ModelImpl model = new ModelImpl();\r
120                 model.setDescription(dataType.getDescription());\r
121                 // model.setType("object");\r
122                 if (dataType != null && MapUtils.isNotEmpty(dataType.getProperties())) {\r
123 \r
124                     dataType.getProperties().forEach((propertyName, property) -> {\r
125                         Property defProperty = getPropery(propertyName, property);\r
126                         model.addProperty(propertyName, defProperty);\r
127                     });\r
128                 }\r
129                 models.put(name, model);\r
130             });\r
131         }\r
132         return models;\r
133 \r
134     }\r
135 \r
136     private Property getPropery(String name, PropertyDefinition propertyDefinition) {\r
137         Property defProperty = null;\r
138 \r
139         if (BluePrintTypes.validPrimitiveTypes().contains(propertyDefinition.getType())) {\r
140             if (BluePrintConstants.DATA_TYPE_BOOLEAN.equals(propertyDefinition.getType())) {\r
141                 defProperty = new BooleanProperty();\r
142             } else if (BluePrintConstants.DATA_TYPE_INTEGER.equals(propertyDefinition.getType())) {\r
143                 StringProperty stringProperty = new StringProperty();\r
144                 stringProperty.setType("integer");\r
145                 defProperty = stringProperty;\r
146             } else if (BluePrintConstants.DATA_TYPE_FLOAT.equals(propertyDefinition.getType())) {\r
147                 StringProperty stringProperty = new StringProperty();\r
148                 stringProperty.setFormat("float");\r
149                 defProperty = stringProperty;\r
150             } else if (BluePrintConstants.DATA_TYPE_TIMESTAMP.equals(propertyDefinition.getType())) {\r
151                 DateTimeProperty dateTimeProperty = new DateTimeProperty();\r
152                 dateTimeProperty.setFormat("date-time");\r
153                 defProperty = dateTimeProperty;\r
154             } else {\r
155                 defProperty = new StringProperty();\r
156             }\r
157         } else if (BluePrintTypes.validCollectionTypes().contains(propertyDefinition.getType())) {\r
158             ArrayProperty arrayProperty = new ArrayProperty();\r
159             if (propertyDefinition.getEntrySchema() != null) {\r
160                 String entrySchema = propertyDefinition.getEntrySchema().getType();\r
161                 if (!BluePrintTypes.validPrimitiveTypes().contains(entrySchema)) {\r
162                     Property innerType = new RefProperty("#/definitions/" + entrySchema);\r
163                     arrayProperty.setItems(innerType);\r
164                 } else {\r
165                     Property innerType = new StringProperty();\r
166                     arrayProperty.setItems(innerType);\r
167                 }\r
168                 defProperty = arrayProperty;\r
169             }\r
170 \r
171         } else {\r
172             defProperty = new RefProperty("#/definitions/" + propertyDefinition.getType());\r
173         }\r
174         defProperty.setName(name);\r
175         if (propertyDefinition.getDefaultValue() != null) {\r
176             defProperty.setDefault(String.valueOf(propertyDefinition.getDefaultValue()));\r
177         }\r
178 \r
179         defProperty.setRequired(BooleanUtils.isTrue(propertyDefinition.getRequired()));\r
180         defProperty.setDescription(propertyDefinition.getDescription());\r
181         return defProperty;\r
182     }\r
183 \r
184 \r
185 }\r