2 * Copyright 2016 [ZTE] and others.
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.
17 package org.openo.commontosca.catalog.resources;
19 import org.openo.commontosca.catalog.common.CommonErrorResponse;
20 import org.openo.commontosca.catalog.common.ToolUtil;
21 import org.openo.commontosca.catalog.db.exception.CatalogResourceException;
22 import org.openo.commontosca.catalog.model.entity.InputParameter;
23 import org.openo.commontosca.catalog.model.entity.NodeTemplate;
24 import org.openo.commontosca.catalog.model.entity.Parameters;
25 import org.openo.commontosca.catalog.model.entity.QueryRawDataCondition;
26 import org.openo.commontosca.catalog.model.entity.ServiceTemplate;
27 import org.openo.commontosca.catalog.model.entity.ServiceTemplateOperation;
28 import org.openo.commontosca.catalog.model.entity.ServiceTemplateRawData;
29 import org.openo.commontosca.catalog.model.parser.AbstractModelParser;
30 import org.openo.commontosca.catalog.model.parser.yaml.aria.AriaModelParser;
31 import org.openo.commontosca.catalog.model.parser.yaml.zte.ToscaYamlModelParser;
32 import org.openo.commontosca.catalog.model.service.ModelService;
33 import org.openo.commontosca.catalog.model.wrapper.ServiceTemplateWrapper;
35 import javax.ws.rs.Consumes;
36 import javax.ws.rs.GET;
37 import javax.ws.rs.POST;
38 import javax.ws.rs.Path;
39 import javax.ws.rs.PathParam;
40 import javax.ws.rs.Produces;
41 import javax.ws.rs.QueryParam;
42 import javax.ws.rs.core.MediaType;
43 import javax.ws.rs.core.Response;
45 import org.eclipse.jetty.http.HttpStatus;
47 import org.slf4j.Logger;
48 import org.slf4j.LoggerFactory;
50 import io.swagger.annotations.Api;
51 import io.swagger.annotations.ApiOperation;
52 import io.swagger.annotations.ApiParam;
53 import io.swagger.annotations.ApiResponse;
54 import io.swagger.annotations.ApiResponses;
56 import com.codahale.metrics.annotation.Timed;
59 * model template service.
62 @Path("/servicetemplates")
63 @Api(tags = {"Model Resource"})
64 public class TemplateResource {
66 private static final Logger logger = LoggerFactory.getLogger(TemplateResource.class);
69 * Query service template by service template id.
70 * @param servicetemplateid service template id
73 @Path("/{servicetemplateid}")
75 @Consumes(MediaType.APPLICATION_JSON)
76 @Produces(MediaType.APPLICATION_JSON)
77 @ApiOperation(value = "Query service template by service template id",
78 response = ServiceTemplate.class)
79 @ApiResponses(value = {
80 @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
81 response = String.class),
82 @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
83 message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
84 @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
85 response = CommonErrorResponse.class)})
87 public Response getServiceTemplateById(@ApiParam(
88 value = "service template id") @PathParam("servicetemplateid") String servicetemplateid) {
91 ServiceTemplateWrapper.getInstance().getServiceTemplateById(servicetemplateid);
92 return Response.status(Response.Status.OK).entity(st).build();
93 } catch (CatalogResourceException e1) {
94 logger.error("getServiceTemplateById failed.", e1);
95 throw RestUtils.newInternalServerErrorException(e1);
101 * Query service template by filter conditions.
102 * @param status template status
103 * @param deletionPending delay to delete
107 @Consumes(MediaType.APPLICATION_JSON)
108 @Produces(MediaType.APPLICATION_JSON)
109 @ApiOperation(value = "Query service template by filter conditions",
110 response = ServiceTemplate.class, responseContainer = "List")
111 @ApiResponses(value = {
112 @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
113 response = String.class),
114 @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
115 message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
116 @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
117 response = CommonErrorResponse.class)})
119 public Response getServiceTemplates(
120 @ApiParam(value = "template status") @QueryParam("status") String status,
121 @ApiParam(value = "delay to delete") @QueryParam("deletionPending") boolean deletionPending) {
123 ServiceTemplate[] sts =
124 ServiceTemplateWrapper.getInstance().getServiceTemplates(status, deletionPending);
125 return Response.status(Response.Status.OK).entity(sts).build();
126 } catch (CatalogResourceException e1) {
127 logger.error("getServiceTemplates failed.", e1);
128 throw RestUtils.newInternalServerErrorException(e1);
134 * Query nesting service template of a node type.
135 * @param nodeTypeIds node type ids
140 @Consumes(MediaType.APPLICATION_JSON)
141 @Produces(MediaType.APPLICATION_JSON)
142 @ApiOperation(value = "Query nesting service template of a node type",
143 response = ServiceTemplate.class, responseContainer = "List")
144 @ApiResponses(value = {
145 @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
146 response = String.class),
147 @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
148 message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
149 @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
150 response = CommonErrorResponse.class)})
152 public Response getNestingServiceTemplate(@ApiParam(value = "Node Type Id",
153 required = true) @QueryParam("nodeTypeIds") String nodeTypeIds) {
155 if (ToolUtil.isTrimedEmptyString(nodeTypeIds)) {
156 throw new CatalogBadRequestException("nodeTypeIds is null.");
158 String[] tmpNodeTypeIds = nodeTypeIds.split(",");
159 ServiceTemplate[] sts = ServiceTemplateWrapper.getInstance()
160 .getNestingServiceTemplate(ToolUtil.trimedStringArray(tmpNodeTypeIds));
161 return Response.status(Response.Status.OK).entity(sts).build();
162 } catch (CatalogResourceException e1) {
163 logger.error("getNestingServiceTemplate failed.", e1);
164 throw RestUtils.newInternalServerErrorException(e1);
165 } catch (CatalogBadRequestException e2) {
166 logger.error("getNestingServiceTemplate failed.", e2);
167 throw RestUtils.newBadRequestException(e2);
172 * Query raw data of a service template by csar id.
173 * @param queryCondition query condition
176 @Path("/queryingrawdata")
178 @Consumes(MediaType.APPLICATION_JSON)
179 @Produces(MediaType.APPLICATION_JSON)
180 @ApiOperation(value = "Query raw data of a service template by csar id",
181 response = ServiceTemplateRawData.class)
182 @ApiResponses(value = {
183 @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
184 response = String.class),
185 @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
186 message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
187 @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
188 response = CommonErrorResponse.class)})
190 public Response getServiceTemplateRawData(
191 @ApiParam(value = "Query Service Template Raw Data Condition",
192 required = true) QueryRawDataCondition queryCondition) {
194 ServiceTemplateRawData stRowData =
195 ServiceTemplateWrapper.getInstance().getServiceTemplateRawData(queryCondition);
196 return Response.status(Response.Status.OK).entity(stRowData).build();
197 } catch (CatalogResourceException e1) {
198 logger.error("getServiceTemplateRawData failed.", e1);
199 throw RestUtils.newInternalServerErrorException(e1);
200 } catch (CatalogBadRequestException e2) {
201 logger.error("getServiceTemplateRawData failed.", e2);
202 throw RestUtils.newBadRequestException(e2);
208 * Query operation list of service template.
209 * @param serviceTemplateId service template id
212 @Path("/{serviceTemplateId}/operations")
214 @Consumes(MediaType.APPLICATION_JSON)
215 @Produces(MediaType.APPLICATION_JSON)
216 @ApiOperation(value = "Query operation list of service template",
217 response = ServiceTemplateOperation.class, responseContainer = "List")
218 @ApiResponses(value = {
219 @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
220 response = String.class),
221 @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
222 message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
223 @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
224 response = CommonErrorResponse.class)})
226 public Response getServiceTemplateOperations(@ApiParam(value = "Service Template Id",
227 required = true) @PathParam("serviceTemplateId") String serviceTemplateId) {
229 ServiceTemplateOperation[] operations =
230 ServiceTemplateWrapper.getInstance().getTemplateOperations(serviceTemplateId);
231 return Response.status(Response.Status.OK).entity(operations).build();
232 } catch (CatalogResourceException e1) {
233 logger.error("getServiceTemplateOperations failed.", e1);
234 throw RestUtils.newInternalServerErrorException(e1);
240 * Query input parameters of a specified operation.
241 * @param serviceTemplateId service template id
242 * @param operationName operation name
245 @Path("/{serviceTemplateId}/operations/{operationName}/parameters")
247 @Consumes(MediaType.APPLICATION_JSON)
248 @Produces(MediaType.APPLICATION_JSON)
249 @ApiOperation(value = "Query input parameters of a specified operation",
250 response = InputParameter.class, responseContainer = "List")
251 @ApiResponses(value = {
252 @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
253 response = String.class),
254 @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
255 message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
256 @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
257 response = CommonErrorResponse.class)})
259 public Response getParametersByOperationName(
260 @ApiParam(value = "Service Template Id",
261 required = true) @PathParam("serviceTemplateId") String serviceTemplateId,
262 @ApiParam(value = "Operation Name",
263 required = true) @PathParam("operationName") String operationName) {
265 InputParameter[] inputs = ServiceTemplateWrapper.getInstance()
266 .getParametersByOperationName(serviceTemplateId, operationName);
267 return Response.status(Response.Status.OK).entity(inputs).build();
268 } catch (CatalogResourceException e1) {
269 logger.error("getParametersByOperationId failed.", e1);
270 throw RestUtils.newInternalServerErrorException(e1);
276 * Query input parameters of service template.
277 * @param servicetemplateid service template id
280 @Path("/{servicetemplateid}/parameters")
282 @Consumes(MediaType.APPLICATION_JSON)
283 @Produces(MediaType.APPLICATION_JSON)
284 @ApiOperation(value = "Query input parameters of service template", response = Parameters.class)
285 @ApiResponses(value = {
286 @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
287 response = String.class),
288 @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
289 message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
290 @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
291 response = CommonErrorResponse.class)})
293 public Response getServiceTemplateParameters(@ApiParam(value = "service template id",
294 required = true) @PathParam("servicetemplateid") String servicetemplateid) {
296 Parameters parameters =
297 ServiceTemplateWrapper.getInstance().getServiceTemplateParameters(servicetemplateid);
298 return Response.status(Response.Status.OK).entity(parameters).build();
299 } catch (CatalogResourceException e1) {
300 logger.error("getServiceTemplateParameters failed.", e1);
301 throw RestUtils.newInternalServerErrorException(e1);
307 * Query node template list of a specified service template.
308 * @param serviceTemplateId service template id
309 * @param types node type
312 @Path("/{serviceTemplateId}/nodetemplates")
314 @Consumes(MediaType.APPLICATION_JSON)
315 @Produces(MediaType.APPLICATION_JSON)
316 @ApiOperation(value = "Query node template list of a specified service template",
317 response = NodeTemplate.class, responseContainer = "List")
318 @ApiResponses(value = {
319 @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
320 response = String.class),
321 @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
322 message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
323 @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
324 response = CommonErrorResponse.class)})
326 public Response getNodeTemplatesByType(
327 @ApiParam(value = "Service Template Id",
328 required = true) @PathParam("serviceTemplateId") String serviceTemplateId,
329 @ApiParam(value = "The type of node template") @QueryParam("types") String types) {
331 String[] tmpTypes = getSplitedTypes(types);
332 NodeTemplate[] nts = ServiceTemplateWrapper.getInstance().getNodeTemplates(serviceTemplateId,
333 ToolUtil.trimedStringArray(tmpTypes));
334 return Response.status(Response.Status.OK).entity(nts).build();
335 } catch (CatalogResourceException e1) {
336 logger.error("getNodeTemplateList failed.", e1);
337 throw RestUtils.newInternalServerErrorException(e1);
343 private String[] getSplitedTypes(String types) {
344 if (ToolUtil.isTrimedEmptyString(types)) {
345 return new String[0];
348 return types.split(",");
352 * Query node template by node template id.
353 * @param serviceTemplateId service template id
354 * @param nodeTemplateId node template id
357 @Path("/{serviceTemplateId}/nodetemplates/{nodeTemplateId}")
359 @Consumes(MediaType.APPLICATION_JSON)
360 @Produces(MediaType.APPLICATION_JSON)
361 @ApiOperation(value = "Query node template by node template id", response = NodeTemplate.class)
362 @ApiResponses(value = {
363 @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
364 response = String.class),
365 @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
366 message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
367 @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
368 response = CommonErrorResponse.class)})
370 public Response getNodeTemplateById(
371 @ApiParam(value = "Service Template Id",
372 required = true) @PathParam("serviceTemplateId") String serviceTemplateId,
373 @ApiParam(value = "Node Template Id",
374 required = true) @PathParam("nodeTemplateId") String nodeTemplateId) {
376 NodeTemplate nt = ServiceTemplateWrapper.getInstance().getNodeTemplateById(serviceTemplateId,
378 return Response.status(Response.Status.OK).entity(nt).build();
379 } catch (CatalogResourceException e1) {
380 logger.error("getNodeTemplateById failed.", e1);
381 throw RestUtils.newInternalServerErrorException(e1);
387 // * @param servicetemplateid
390 // @Path("/{servicetemplateid}/nfvtemplate")
392 // @Consumes(MediaType.APPLICATION_JSON)
393 // @Produces(MediaType.APPLICATION_JSON)
394 // @ApiOperation(value =
395 // "Query node template detail of a specified service template", response =
396 // NfvTemplate.class)
397 // @ApiResponses(value = {
398 // @ApiResponse(code = HttpStatus.NOT_FOUND_404, message =
399 // "microservice not found", response = String.class),
400 // @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415, message =
401 // "Unprocessable MicroServiceInfo Entity ", response = String.class),
402 // @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message =
403 // "server internal error", response = CommonErrorResponse.class) })
405 // public Response getNfvTemplate(
406 // @ApiParam(value = "service template id", required = true)
407 // @PathParam("servicetemplateid") String servicetemplateid) {
409 // NfvTemplate nfvTemplate = ServiceTemplateWrapper.getInstance()
410 // .getNfvTemplate(servicetemplateid);
411 // return Response.status(Response.Status.OK).entity(nfvTemplate)
413 // } catch (CatalogResourceException e) {
414 // logger.error("getNfvTemplate failed.", e);
415 // throw RestUtils.newInternalServerErrorException(e);
426 @Consumes(MediaType.APPLICATION_JSON)
427 @Produces(MediaType.APPLICATION_JSON)
428 @ApiOperation(value = "test", response = String.class, responseContainer = "List")
429 @ApiResponses(value = {
430 @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
431 response = String.class),
432 @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
433 message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
434 @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
435 response = CommonErrorResponse.class)})
437 public Response test() {
439 AbstractModelParser parser1 = new ToscaYamlModelParser();
440 // parser1.parse("pk11111", "C:\\Users\\10090474\\Desktop\\1\\bm\\bm.zip");
442 AbstractModelParser parser = new AriaModelParser();
443 parser.parse("pk11111", "/home/b/common-tosca-aria/blueprints/tosca/node-cellar.yaml");
445 ModelService.getInstance().delete("pk11111");
447 String[] strs = {"111", "222", null, null, "555"};
448 return Response.status(Response.Status.OK).entity(strs).build();
449 } catch (CatalogResourceException e1) {
450 logger.error("test failed.", e1);
451 throw RestUtils.newInternalServerErrorException(e1);
452 } catch (CatalogBadRequestException e2) {
453 logger.error("test failed.", e2);
454 throw RestUtils.newBadRequestException(e2);