2 * Copyright © 2017-2018 AT&T Intellectual Property.
\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
8 * http://www.apache.org/licenses/LICENSE-2.0
\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
17 package org.onap.ccsdk.apps.controllerblueprints.service.common;
\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
34 * SwaggerGenerator.java Purpose: Provide Service to generate service template input schema definition and Sample Json
\r
37 * @author Brinda Santh
\r
41 public class SwaggerGenerator {
\r
43 private ServiceTemplate serviceTemplate;
\r
46 * This is a SwaggerGenerator constructor
\r
48 public SwaggerGenerator(ServiceTemplate serviceTemplate) {
\r
49 this.serviceTemplate = serviceTemplate;
\r
53 * This is a generateSwagger
\r
57 public String generateSwagger() {
\r
58 String swaggerContent = null;
\r
60 Swagger swagger = new Swagger().info(getInfo());
\r
62 swagger.setPaths(getPaths());
\r
63 swagger.setDefinitions(getDefinition());
\r
66 swaggerContent = Json.pretty(swagger);
\r
67 return swaggerContent;
\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
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
93 post.setParameters(parameters);
\r
95 Map<String, Response> responses = new HashMap<>();
\r
96 Response response = new Response().description("Success");
\r
97 responses.put("200", response);
\r
99 Response failureResponse = new Response().description("Failure");
\r
100 responses.put("400", failureResponse);
\r
101 post.setResponses(responses);
\r
103 path.setPost(post);
\r
104 paths.put("/operations/config-selfservice-api:configure", path);
\r
108 private Map<String, Model> getDefinition() {
\r
109 Map<String, Model> models = new HashMap<>();
\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
117 models.put("inputs", inputmodel);
\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
126 dataType.getProperties().forEach((propertyName, property) -> {
\r
127 Property defProperty = getPropery(propertyName, property);
\r
128 model.addProperty(propertyName, defProperty);
\r
131 models.put(name, model);
\r
138 private Property getPropery(String name, PropertyDefinition propertyDefinition) {
\r
139 Property defProperty = null;
\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
157 defProperty = new StringProperty();
\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
167 Property innerType = new StringProperty();
\r
168 arrayProperty.setItems(innerType);
\r
170 defProperty = arrayProperty;
\r
174 defProperty = new RefProperty("#/definitions/" + propertyDefinition.getType());
\r
176 defProperty.setName(name);
\r
177 if (propertyDefinition.getDefaultValue() != null) {
\r
178 defProperty.setDefault(String.valueOf(propertyDefinition.getDefaultValue()));
\r
181 defProperty.setRequired(BooleanUtils.isTrue(propertyDefinition.getRequired()));
\r
182 defProperty.setDescription(propertyDefinition.getDescription());
\r
183 return defProperty;
\r