2 * Copyright 2016 ZTE Corporation.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org.openo.commontosca.catalog.resources;
18 import io.swagger.annotations.Api;
19 import io.swagger.annotations.ApiOperation;
20 import io.swagger.annotations.ApiParam;
21 import io.swagger.annotations.ApiResponse;
22 import io.swagger.annotations.ApiResponses;
24 import javax.ws.rs.Consumes;
25 import javax.ws.rs.GET;
26 import javax.ws.rs.POST;
27 import javax.ws.rs.Path;
28 import javax.ws.rs.PathParam;
29 import javax.ws.rs.Produces;
30 import javax.ws.rs.QueryParam;
31 import javax.ws.rs.core.MediaType;
32 import javax.ws.rs.core.Response;
34 import org.eclipse.jetty.http.HttpStatus;
35 import org.openo.commontosca.catalog.common.CommonErrorResponse;
36 import org.openo.commontosca.catalog.common.ToolUtil;
37 import org.openo.commontosca.catalog.db.exception.CatalogResourceException;
38 import org.openo.commontosca.catalog.entity.EnumOperationalState;
39 import org.openo.commontosca.catalog.model.entity.InputParameter;
40 import org.openo.commontosca.catalog.model.entity.NodeTemplate;
41 import org.openo.commontosca.catalog.model.entity.Parameters;
42 import org.openo.commontosca.catalog.model.entity.QueryRawDataCondition;
43 import org.openo.commontosca.catalog.model.entity.ServiceTemplate;
44 import org.openo.commontosca.catalog.model.entity.ServiceTemplateOperation;
45 import org.openo.commontosca.catalog.model.entity.ServiceTemplateRawData;
46 import org.openo.commontosca.catalog.model.parser.AbstractModelParser;
47 import org.openo.commontosca.catalog.model.parser.yaml.zte.ToscaYamlModelParser;
48 import org.openo.commontosca.catalog.model.service.ModelService;
49 import org.openo.commontosca.catalog.model.wrapper.ServiceTemplateWrapper;
50 import org.slf4j.Logger;
51 import org.slf4j.LoggerFactory;
53 import com.codahale.metrics.annotation.Timed;
56 * model template service.
59 @Path("/servicetemplates")
60 @Api(tags = {"Model Resource"})
61 public class TemplateResource {
63 private static final Logger logger = LoggerFactory.getLogger(TemplateResource.class);
66 * Query service template by service template id.
67 * @param servicetemplateid service template id
70 @Path("/{servicetemplateid}")
72 @Consumes(MediaType.APPLICATION_JSON)
73 @Produces(MediaType.APPLICATION_JSON)
74 @ApiOperation(value = "Query service template by service template id",
75 response = ServiceTemplate.class)
76 @ApiResponses(value = {
77 @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
78 response = String.class),
79 @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
80 message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
81 @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
82 response = CommonErrorResponse.class)})
84 public Response getServiceTemplateById(@ApiParam(
85 value = "service template id") @PathParam("servicetemplateid") String servicetemplateid) {
88 ServiceTemplateWrapper.getInstance().getServiceTemplateById(servicetemplateid);
89 return Response.status(Response.Status.OK).entity(st).build();
90 } catch (CatalogResourceException e1) {
91 logger.error("getServiceTemplateById failed.", e1);
92 throw RestUtils.newInternalServerErrorException(e1);
98 * Query service template by filter conditions.
99 * @param status template status
100 * @param deletionPending delay to delete
104 @Consumes(MediaType.APPLICATION_JSON)
105 @Produces(MediaType.APPLICATION_JSON)
106 @ApiOperation(value = "Query service template by filter conditions",
107 response = ServiceTemplate.class, responseContainer = "List")
108 @ApiResponses(value = {
109 @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
110 response = String.class),
111 @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
112 message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
113 @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
114 response = CommonErrorResponse.class)})
116 public Response getServiceTemplates(
117 @ApiParam(value = "template status") @QueryParam("status") EnumOperationalState status,
118 @ApiParam(value = "delay to delete") @QueryParam("deletionPending") boolean deletionPending) {
120 ServiceTemplate[] sts =
121 ServiceTemplateWrapper.getInstance().getServiceTemplates(status, deletionPending);
122 return Response.status(Response.Status.OK).entity(sts).build();
123 } catch (CatalogResourceException e1) {
124 logger.error("getServiceTemplates failed.", e1);
125 throw RestUtils.newInternalServerErrorException(e1);
131 * Query nesting service template of a node type.
132 * @param nodeTypeIds node type ids
137 @Consumes(MediaType.APPLICATION_JSON)
138 @Produces(MediaType.APPLICATION_JSON)
139 @ApiOperation(value = "Query nesting service template of a node type",
140 response = ServiceTemplate.class, responseContainer = "List")
141 @ApiResponses(value = {
142 @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
143 response = String.class),
144 @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
145 message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
146 @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
147 response = CommonErrorResponse.class)})
149 public Response getNestingServiceTemplate(@ApiParam(value = "Node Type Id",
150 required = true) @QueryParam("nodeTypeIds") String nodeTypeIds) {
152 if (ToolUtil.isTrimedEmptyString(nodeTypeIds)) {
153 throw new CatalogBadRequestException("nodeTypeIds is null.");
155 String[] tmpNodeTypeIds = nodeTypeIds.split(",");
156 ServiceTemplate[] sts = ServiceTemplateWrapper.getInstance()
157 .getNestingServiceTemplate(ToolUtil.trimedStringArray(tmpNodeTypeIds));
158 return Response.status(Response.Status.OK).entity(sts).build();
159 } catch (CatalogResourceException e1) {
160 logger.error("getNestingServiceTemplate failed.", e1);
161 throw RestUtils.newInternalServerErrorException(e1);
162 } catch (CatalogBadRequestException e2) {
163 logger.error("getNestingServiceTemplate failed.", e2);
164 throw RestUtils.newBadRequestException(e2);
169 * Query raw data of a service template by csar id.
170 * @param queryCondition query condition
173 @Path("/queryingrawdata")
175 @Consumes(MediaType.APPLICATION_JSON)
176 @Produces(MediaType.APPLICATION_JSON)
177 @ApiOperation(value = "Query raw data of a service template by csar id",
178 response = ServiceTemplateRawData.class)
179 @ApiResponses(value = {
180 @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
181 response = String.class),
182 @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
183 message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
184 @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
185 response = CommonErrorResponse.class)})
187 public Response getServiceTemplateRawData(
188 @ApiParam(value = "Query Service Template Raw Data Condition",
189 required = true) QueryRawDataCondition queryCondition) {
191 ServiceTemplateRawData stRowData =
192 ServiceTemplateWrapper.getInstance().getServiceTemplateRawData(queryCondition);
193 return Response.status(Response.Status.OK).entity(stRowData).build();
194 } catch (CatalogResourceException e1) {
195 logger.error("getServiceTemplateRawData failed.", e1);
196 throw RestUtils.newInternalServerErrorException(e1);
197 } catch (CatalogBadRequestException e2) {
198 logger.error("getServiceTemplateRawData failed.", e2);
199 throw RestUtils.newBadRequestException(e2);
205 * Query operation list of service template.
206 * @param serviceTemplateId service template id
209 @Path("/{serviceTemplateId}/operations")
211 @Consumes(MediaType.APPLICATION_JSON)
212 @Produces(MediaType.APPLICATION_JSON)
213 @ApiOperation(value = "Query operation list of service template",
214 response = ServiceTemplateOperation.class, responseContainer = "List")
215 @ApiResponses(value = {
216 @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
217 response = String.class),
218 @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
219 message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
220 @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
221 response = CommonErrorResponse.class)})
223 public Response getServiceTemplateOperations(@ApiParam(value = "Service Template Id",
224 required = true) @PathParam("serviceTemplateId") String serviceTemplateId) {
226 ServiceTemplateOperation[] operations =
227 ServiceTemplateWrapper.getInstance().getTemplateOperations(serviceTemplateId);
228 return Response.status(Response.Status.OK).entity(operations).build();
229 } catch (CatalogResourceException e1) {
230 logger.error("getServiceTemplateOperations failed.", e1);
231 throw RestUtils.newInternalServerErrorException(e1);
237 * Query input parameters of a specified operation.
238 * @param serviceTemplateId service template id
239 * @param operationName operation name
242 @Path("/{serviceTemplateId}/operations/{operationName}/parameters")
244 @Consumes(MediaType.APPLICATION_JSON)
245 @Produces(MediaType.APPLICATION_JSON)
246 @ApiOperation(value = "Query input parameters of a specified operation",
247 response = InputParameter.class, responseContainer = "List")
248 @ApiResponses(value = {
249 @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
250 response = String.class),
251 @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
252 message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
253 @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
254 response = CommonErrorResponse.class)})
256 public Response getParametersByOperationName(
257 @ApiParam(value = "Service Template Id",
258 required = true) @PathParam("serviceTemplateId") String serviceTemplateId,
259 @ApiParam(value = "Operation Name",
260 required = true) @PathParam("operationName") String operationName) {
262 InputParameter[] inputs = ServiceTemplateWrapper.getInstance()
263 .getParametersByOperationName(serviceTemplateId, operationName);
264 return Response.status(Response.Status.OK).entity(inputs).build();
265 } catch (CatalogResourceException e1) {
266 logger.error("getParametersByOperationId failed.", e1);
267 throw RestUtils.newInternalServerErrorException(e1);
273 * Query input parameters of service template.
274 * @param servicetemplateid service template id
277 @Path("/{servicetemplateid}/parameters")
279 @Consumes(MediaType.APPLICATION_JSON)
280 @Produces(MediaType.APPLICATION_JSON)
281 @ApiOperation(value = "Query input parameters of service template", response = Parameters.class)
282 @ApiResponses(value = {
283 @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
284 response = String.class),
285 @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
286 message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
287 @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
288 response = CommonErrorResponse.class)})
290 public Response getServiceTemplateParameters(@ApiParam(value = "service template id",
291 required = true) @PathParam("servicetemplateid") String servicetemplateid) {
293 Parameters parameters =
294 ServiceTemplateWrapper.getInstance().getServiceTemplateParameters(servicetemplateid);
295 return Response.status(Response.Status.OK).entity(parameters).build();
296 } catch (CatalogResourceException e1) {
297 logger.error("getServiceTemplateParameters failed.", e1);
298 throw RestUtils.newInternalServerErrorException(e1);
304 * Query node template list of a specified service template.
305 * @param serviceTemplateId service template id
306 * @param types node type
309 @Path("/{serviceTemplateId}/nodetemplates")
311 @Consumes(MediaType.APPLICATION_JSON)
312 @Produces(MediaType.APPLICATION_JSON)
313 @ApiOperation(value = "Query node template list of a specified service template",
314 response = NodeTemplate.class, responseContainer = "List")
315 @ApiResponses(value = {
316 @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
317 response = String.class),
318 @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
319 message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
320 @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
321 response = CommonErrorResponse.class)})
323 public Response getNodeTemplatesByType(
324 @ApiParam(value = "Service Template Id",
325 required = true) @PathParam("serviceTemplateId") String serviceTemplateId,
326 @ApiParam(value = "The type of node template") @QueryParam("types") String types) {
328 String[] tmpTypes = getSplitedTypes(types);
329 NodeTemplate[] nts = ServiceTemplateWrapper.getInstance().getNodeTemplates(serviceTemplateId,
330 ToolUtil.trimedStringArray(tmpTypes));
331 return Response.status(Response.Status.OK).entity(nts).build();
332 } catch (CatalogResourceException e1) {
333 logger.error("getNodeTemplateList failed.", e1);
334 throw RestUtils.newInternalServerErrorException(e1);
340 private String[] getSplitedTypes(String types) {
341 if (ToolUtil.isTrimedEmptyString(types)) {
342 return new String[0];
345 return types.split(",");
349 * Query node template by node template id.
350 * @param serviceTemplateId service template id
351 * @param nodeTemplateId node template id
354 @Path("/{serviceTemplateId}/nodetemplates/{nodeTemplateId}")
356 @Consumes(MediaType.APPLICATION_JSON)
357 @Produces(MediaType.APPLICATION_JSON)
358 @ApiOperation(value = "Query node template by node template id", response = NodeTemplate.class)
359 @ApiResponses(value = {
360 @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
361 response = String.class),
362 @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
363 message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
364 @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
365 response = CommonErrorResponse.class)})
367 public Response getNodeTemplateById(
368 @ApiParam(value = "Service Template Id",
369 required = true) @PathParam("serviceTemplateId") String serviceTemplateId,
370 @ApiParam(value = "Node Template Id",
371 required = true) @PathParam("nodeTemplateId") String nodeTemplateId) {
373 NodeTemplate nt = ServiceTemplateWrapper.getInstance().getNodeTemplateById(serviceTemplateId,
375 return Response.status(Response.Status.OK).entity(nt).build();
376 } catch (CatalogResourceException e1) {
377 logger.error("getNodeTemplateById failed.", e1);
378 throw RestUtils.newInternalServerErrorException(e1);
384 // * @param servicetemplateid
387 // @Path("/{servicetemplateid}/nfvtemplate")
389 // @Consumes(MediaType.APPLICATION_JSON)
390 // @Produces(MediaType.APPLICATION_JSON)
391 // @ApiOperation(value =
392 // "Query node template detail of a specified service template", response =
393 // NfvTemplate.class)
394 // @ApiResponses(value = {
395 // @ApiResponse(code = HttpStatus.NOT_FOUND_404, message =
396 // "microservice not found", response = String.class),
397 // @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415, message =
398 // "Unprocessable MicroServiceInfo Entity ", response = String.class),
399 // @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message =
400 // "server internal error", response = CommonErrorResponse.class) })
402 // public Response getNfvTemplate(
403 // @ApiParam(value = "service template id", required = true)
404 // @PathParam("servicetemplateid") String servicetemplateid) {
406 // NfvTemplate nfvTemplate = ServiceTemplateWrapper.getInstance()
407 // .getNfvTemplate(servicetemplateid);
408 // return Response.status(Response.Status.OK).entity(nfvTemplate)
410 // } catch (CatalogResourceException e) {
411 // logger.error("getNfvTemplate failed.", e);
412 // throw RestUtils.newInternalServerErrorException(e);
423 @Consumes(MediaType.APPLICATION_JSON)
424 @Produces(MediaType.APPLICATION_JSON)
425 @ApiOperation(value = "test", response = String.class, responseContainer = "List")
426 @ApiResponses(value = {
427 @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
428 response = String.class),
429 @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
430 message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
431 @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
432 response = CommonErrorResponse.class)})
434 public Response test() {
436 AbstractModelParser parser1 = new ToscaYamlModelParser();
437 parser1.parse("pk11111", "C:\\Users\\10090474\\Downloads\\OpenO.csar");
439 // AbstractModelParser parser = new AriaModelParser();
440 // parser.parse("pk11111", "/home/b/common-tosca-aria/blueprints/tosca/node-cellar.yaml");
442 ModelService.getInstance().delete("pk11111");
444 String[] strs = {"111", "222", null, null, "555"};
445 return Response.status(Response.Status.OK).entity(strs).build();
446 } catch (CatalogResourceException e1) {
447 logger.error("test failed.", e1);
448 throw RestUtils.newInternalServerErrorException(e1);
449 } catch (CatalogBadRequestException e2) {
450 logger.error("test failed.", e2);
451 throw RestUtils.newBadRequestException(e2);