73ae9d7fc3b21a0a06f13f1ce52080e800340335
[vfc/nfvo/catalog.git] /
1 /**
2  * Copyright 2016 ZTE Corporation.
3  *
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
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16 package org.openo.commontosca.catalog.resources;
17
18 import org.openo.commontosca.catalog.common.CommonErrorResponse;
19 import org.openo.commontosca.catalog.common.ToolUtil;
20 import org.openo.commontosca.catalog.db.exception.CatalogResourceException;
21 import org.openo.commontosca.catalog.model.entity.InputParameter;
22 import org.openo.commontosca.catalog.model.entity.NodeTemplate;
23 import org.openo.commontosca.catalog.model.entity.Parameters;
24 import org.openo.commontosca.catalog.model.entity.QueryRawDataCondition;
25 import org.openo.commontosca.catalog.model.entity.ServiceTemplate;
26 import org.openo.commontosca.catalog.model.entity.ServiceTemplateOperation;
27 import org.openo.commontosca.catalog.model.entity.ServiceTemplateRawData;
28 import org.openo.commontosca.catalog.model.parser.AbstractModelParser;
29 import org.openo.commontosca.catalog.model.parser.yaml.aria.AriaModelParser;
30 import org.openo.commontosca.catalog.model.parser.yaml.zte.ToscaYamlModelParser;
31 import org.openo.commontosca.catalog.model.service.ModelService;
32 import org.openo.commontosca.catalog.model.wrapper.ServiceTemplateWrapper;
33
34 import javax.ws.rs.Consumes;
35 import javax.ws.rs.GET;
36 import javax.ws.rs.POST;
37 import javax.ws.rs.Path;
38 import javax.ws.rs.PathParam;
39 import javax.ws.rs.Produces;
40 import javax.ws.rs.QueryParam;
41 import javax.ws.rs.core.MediaType;
42 import javax.ws.rs.core.Response;
43
44 import org.eclipse.jetty.http.HttpStatus;
45
46 import org.slf4j.Logger;
47 import org.slf4j.LoggerFactory;
48
49 import io.swagger.annotations.Api;
50 import io.swagger.annotations.ApiOperation;
51 import io.swagger.annotations.ApiParam;
52 import io.swagger.annotations.ApiResponse;
53 import io.swagger.annotations.ApiResponses;
54
55 import com.codahale.metrics.annotation.Timed;
56
57 /**
58  * model template service.
59  * 
60  */
61 @Path("/servicetemplates")
62 @Api(tags = {"Model Resource"})
63 public class TemplateResource {
64
65   private static final Logger logger = LoggerFactory.getLogger(TemplateResource.class);
66
67   /**
68    * Query service template by service template id.
69    * @param servicetemplateid service template id
70    * @return Response
71    */
72   @Path("/{servicetemplateid}")
73   @GET
74   @Consumes(MediaType.APPLICATION_JSON)
75   @Produces(MediaType.APPLICATION_JSON)
76   @ApiOperation(value = "Query service template by service template id",
77       response = ServiceTemplate.class)
78   @ApiResponses(value = {
79       @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
80           response = String.class),
81       @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
82           message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
83       @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
84           response = CommonErrorResponse.class)})
85   @Timed
86   public Response getServiceTemplateById(@ApiParam(
87       value = "service template id") @PathParam("servicetemplateid") String servicetemplateid) {
88     try {
89       ServiceTemplate st =
90           ServiceTemplateWrapper.getInstance().getServiceTemplateById(servicetemplateid);
91       return Response.status(Response.Status.OK).entity(st).build();
92     } catch (CatalogResourceException e1) {
93       logger.error("getServiceTemplateById failed.", e1);
94       throw RestUtils.newInternalServerErrorException(e1);
95     }
96   }
97
98
99   /**
100    * Query service template by filter conditions.
101    * @param status template status
102    * @param deletionPending delay to delete
103    * @return Response
104    */
105   @GET
106   @Consumes(MediaType.APPLICATION_JSON)
107   @Produces(MediaType.APPLICATION_JSON)
108   @ApiOperation(value = "Query service template by filter conditions",
109       response = ServiceTemplate.class, responseContainer = "List")
110   @ApiResponses(value = {
111       @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
112           response = String.class),
113       @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
114           message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
115       @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
116           response = CommonErrorResponse.class)})
117   @Timed
118   public Response getServiceTemplates(
119       @ApiParam(value = "template status") @QueryParam("status") String status,
120       @ApiParam(value = "delay to delete") @QueryParam("deletionPending") boolean deletionPending) {
121     try {
122       ServiceTemplate[] sts =
123           ServiceTemplateWrapper.getInstance().getServiceTemplates(status, deletionPending);
124       return Response.status(Response.Status.OK).entity(sts).build();
125     } catch (CatalogResourceException e1) {
126       logger.error("getServiceTemplates failed.", e1);
127       throw RestUtils.newInternalServerErrorException(e1);
128     }
129
130   }
131
132   /**
133    * Query nesting service template of a node type.
134    * @param nodeTypeIds node type ids
135    * @return Response
136    */
137   @Path("/nesting")
138   @GET
139   @Consumes(MediaType.APPLICATION_JSON)
140   @Produces(MediaType.APPLICATION_JSON)
141   @ApiOperation(value = "Query nesting service template of a node type",
142       response = ServiceTemplate.class, responseContainer = "List")
143   @ApiResponses(value = {
144       @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
145           response = String.class),
146       @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
147           message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
148       @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
149           response = CommonErrorResponse.class)})
150   @Timed
151   public Response getNestingServiceTemplate(@ApiParam(value = "Node Type Id",
152       required = true) @QueryParam("nodeTypeIds") String nodeTypeIds) {
153     try {
154       if (ToolUtil.isTrimedEmptyString(nodeTypeIds)) {
155         throw new CatalogBadRequestException("nodeTypeIds is null.");
156       }
157       String[] tmpNodeTypeIds = nodeTypeIds.split(",");
158       ServiceTemplate[] sts = ServiceTemplateWrapper.getInstance()
159           .getNestingServiceTemplate(ToolUtil.trimedStringArray(tmpNodeTypeIds));
160       return Response.status(Response.Status.OK).entity(sts).build();
161     } catch (CatalogResourceException e1) {
162       logger.error("getNestingServiceTemplate failed.", e1);
163       throw RestUtils.newInternalServerErrorException(e1);
164     } catch (CatalogBadRequestException e2) {
165       logger.error("getNestingServiceTemplate failed.", e2);
166       throw RestUtils.newBadRequestException(e2);
167     }
168   }
169
170   /**
171    * Query raw data of a service template by csar id.
172    * @param queryCondition query condition
173    * @return Response
174    */
175   @Path("/queryingrawdata")
176   @POST
177   @Consumes(MediaType.APPLICATION_JSON)
178   @Produces(MediaType.APPLICATION_JSON)
179   @ApiOperation(value = "Query raw data of a service template by csar id",
180       response = ServiceTemplateRawData.class)
181   @ApiResponses(value = {
182       @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
183           response = String.class),
184       @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
185           message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
186       @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
187           response = CommonErrorResponse.class)})
188   @Timed
189   public Response getServiceTemplateRawData(
190       @ApiParam(value = "Query Service Template Raw Data Condition",
191           required = true) QueryRawDataCondition queryCondition) {
192     try {
193       ServiceTemplateRawData stRowData =
194           ServiceTemplateWrapper.getInstance().getServiceTemplateRawData(queryCondition);
195       return Response.status(Response.Status.OK).entity(stRowData).build();
196     } catch (CatalogResourceException e1) {
197       logger.error("getServiceTemplateRawData failed.", e1);
198       throw RestUtils.newInternalServerErrorException(e1);
199     } catch (CatalogBadRequestException e2) {
200       logger.error("getServiceTemplateRawData failed.", e2);
201       throw RestUtils.newBadRequestException(e2);
202     }
203   }
204
205
206   /**
207    * Query operation list of service template.
208    * @param serviceTemplateId service template id
209    * @return Response
210    */
211   @Path("/{serviceTemplateId}/operations")
212   @GET
213   @Consumes(MediaType.APPLICATION_JSON)
214   @Produces(MediaType.APPLICATION_JSON)
215   @ApiOperation(value = "Query operation list of service template",
216       response = ServiceTemplateOperation.class, responseContainer = "List")
217   @ApiResponses(value = {
218       @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
219           response = String.class),
220       @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
221           message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
222       @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
223           response = CommonErrorResponse.class)})
224   @Timed
225   public Response getServiceTemplateOperations(@ApiParam(value = "Service Template Id",
226       required = true) @PathParam("serviceTemplateId") String serviceTemplateId) {
227     try {
228       ServiceTemplateOperation[] operations =
229           ServiceTemplateWrapper.getInstance().getTemplateOperations(serviceTemplateId);
230       return Response.status(Response.Status.OK).entity(operations).build();
231     } catch (CatalogResourceException e1) {
232       logger.error("getServiceTemplateOperations failed.", e1);
233       throw RestUtils.newInternalServerErrorException(e1);
234     }
235
236   }
237
238   /**
239    * Query input parameters of a specified operation.
240    * @param serviceTemplateId service template id
241    * @param operationName operation name
242    * @return Response
243    */
244   @Path("/{serviceTemplateId}/operations/{operationName}/parameters")
245   @GET
246   @Consumes(MediaType.APPLICATION_JSON)
247   @Produces(MediaType.APPLICATION_JSON)
248   @ApiOperation(value = "Query input parameters of a specified operation",
249       response = InputParameter.class, responseContainer = "List")
250   @ApiResponses(value = {
251       @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
252           response = String.class),
253       @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
254           message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
255       @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
256           response = CommonErrorResponse.class)})
257   @Timed
258   public Response getParametersByOperationName(
259       @ApiParam(value = "Service Template Id",
260           required = true) @PathParam("serviceTemplateId") String serviceTemplateId,
261       @ApiParam(value = "Operation Name",
262           required = true) @PathParam("operationName") String operationName) {
263     try {
264       InputParameter[] inputs = ServiceTemplateWrapper.getInstance()
265           .getParametersByOperationName(serviceTemplateId, operationName);
266       return Response.status(Response.Status.OK).entity(inputs).build();
267     } catch (CatalogResourceException e1) {
268       logger.error("getParametersByOperationId failed.", e1);
269       throw RestUtils.newInternalServerErrorException(e1);
270     }
271
272   }
273
274   /**
275    * Query input parameters of service template.
276    * @param servicetemplateid service template id
277    * @return Response
278    */
279   @Path("/{servicetemplateid}/parameters")
280   @GET
281   @Consumes(MediaType.APPLICATION_JSON)
282   @Produces(MediaType.APPLICATION_JSON)
283   @ApiOperation(value = "Query input parameters of service template", response = Parameters.class)
284   @ApiResponses(value = {
285       @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
286           response = String.class),
287       @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
288           message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
289       @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
290           response = CommonErrorResponse.class)})
291   @Timed
292   public Response getServiceTemplateParameters(@ApiParam(value = "service template id",
293       required = true) @PathParam("servicetemplateid") String servicetemplateid) {
294     try {
295       Parameters parameters =
296           ServiceTemplateWrapper.getInstance().getServiceTemplateParameters(servicetemplateid);
297       return Response.status(Response.Status.OK).entity(parameters).build();
298     } catch (CatalogResourceException e1) {
299       logger.error("getServiceTemplateParameters failed.", e1);
300       throw RestUtils.newInternalServerErrorException(e1);
301     }
302
303   }
304
305   /**
306    * Query node template list of a specified service template.
307    * @param serviceTemplateId service template id
308    * @param types node type
309    * @return Response
310    */
311   @Path("/{serviceTemplateId}/nodetemplates")
312   @GET
313   @Consumes(MediaType.APPLICATION_JSON)
314   @Produces(MediaType.APPLICATION_JSON)
315   @ApiOperation(value = "Query node template list of a specified service template",
316       response = NodeTemplate.class, responseContainer = "List")
317   @ApiResponses(value = {
318       @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
319           response = String.class),
320       @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
321           message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
322       @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
323           response = CommonErrorResponse.class)})
324   @Timed
325   public Response getNodeTemplatesByType(
326       @ApiParam(value = "Service Template Id",
327           required = true) @PathParam("serviceTemplateId") String serviceTemplateId,
328       @ApiParam(value = "The type of node template") @QueryParam("types") String types) {
329     try {
330       String[] tmpTypes = getSplitedTypes(types);
331       NodeTemplate[] nts = ServiceTemplateWrapper.getInstance().getNodeTemplates(serviceTemplateId,
332           ToolUtil.trimedStringArray(tmpTypes));
333       return Response.status(Response.Status.OK).entity(nts).build();
334     } catch (CatalogResourceException e1) {
335       logger.error("getNodeTemplateList failed.", e1);
336       throw RestUtils.newInternalServerErrorException(e1);
337     }
338
339   }
340
341
342   private String[] getSplitedTypes(String types) {
343     if (ToolUtil.isTrimedEmptyString(types)) {
344       return new String[0];
345     }
346
347     return types.split(",");
348   }
349
350   /**
351    * Query node template by node template id.
352    * @param serviceTemplateId service template id
353    * @param nodeTemplateId node template id
354    * @return Response
355    */
356   @Path("/{serviceTemplateId}/nodetemplates/{nodeTemplateId}")
357   @GET
358   @Consumes(MediaType.APPLICATION_JSON)
359   @Produces(MediaType.APPLICATION_JSON)
360   @ApiOperation(value = "Query node template by node template id", response = NodeTemplate.class)
361   @ApiResponses(value = {
362       @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
363           response = String.class),
364       @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
365           message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
366       @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
367           response = CommonErrorResponse.class)})
368   @Timed
369   public Response getNodeTemplateById(
370       @ApiParam(value = "Service Template Id",
371           required = true) @PathParam("serviceTemplateId") String serviceTemplateId,
372       @ApiParam(value = "Node Template Id",
373           required = true) @PathParam("nodeTemplateId") String nodeTemplateId) {
374     try {
375       NodeTemplate nt = ServiceTemplateWrapper.getInstance().getNodeTemplateById(serviceTemplateId,
376           nodeTemplateId);
377       return Response.status(Response.Status.OK).entity(nt).build();
378     } catch (CatalogResourceException e1) {
379       logger.error("getNodeTemplateById failed.", e1);
380       throw RestUtils.newInternalServerErrorException(e1);
381     }
382
383   }
384
385   // /**
386   // * @param servicetemplateid
387   // * @return
388   // */
389   // @Path("/{servicetemplateid}/nfvtemplate")
390   // @POST
391   // @Consumes(MediaType.APPLICATION_JSON)
392   // @Produces(MediaType.APPLICATION_JSON)
393   // @ApiOperation(value =
394   // "Query node template detail of a specified service template", response =
395   // NfvTemplate.class)
396   // @ApiResponses(value = {
397   // @ApiResponse(code = HttpStatus.NOT_FOUND_404, message =
398   // "microservice not found", response = String.class),
399   // @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415, message =
400   // "Unprocessable MicroServiceInfo Entity ", response = String.class),
401   // @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message =
402   // "server internal error", response = CommonErrorResponse.class) })
403   // @Timed
404   // public Response getNfvTemplate(
405   // @ApiParam(value = "service template id", required = true)
406   // @PathParam("servicetemplateid") String servicetemplateid) {
407   // try {
408   // NfvTemplate nfvTemplate = ServiceTemplateWrapper.getInstance()
409   // .getNfvTemplate(servicetemplateid);
410   // return Response.status(Response.Status.OK).entity(nfvTemplate)
411   // .build();
412   // } catch (CatalogResourceException e) {
413   // logger.error("getNfvTemplate failed.", e);
414   // throw RestUtils.newInternalServerErrorException(e);
415   // }
416   //
417   // }
418
419   /**
420    * test function.
421    * @return Response
422    */
423   @Path("/test")
424   @GET
425   @Consumes(MediaType.APPLICATION_JSON)
426   @Produces(MediaType.APPLICATION_JSON)
427   @ApiOperation(value = "test", response = String.class, responseContainer = "List")
428   @ApiResponses(value = {
429       @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
430           response = String.class),
431       @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
432           message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
433       @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
434           response = CommonErrorResponse.class)})
435   @Timed
436   public Response test() {
437     try {
438       AbstractModelParser parser1 = new ToscaYamlModelParser();
439       parser1.parse("pk11111", "C:\\Users\\10090474\\Downloads\\OpenO.csar");
440       
441 //      AbstractModelParser parser = new AriaModelParser();
442 //      parser.parse("pk11111", "/home/b/common-tosca-aria/blueprints/tosca/node-cellar.yaml");
443
444       ModelService.getInstance().delete("pk11111");
445
446       String[] strs = {"111", "222", null, null, "555"};
447       return Response.status(Response.Status.OK).entity(strs).build();
448     } catch (CatalogResourceException e1) {
449       logger.error("test failed.", e1);
450       throw RestUtils.newInternalServerErrorException(e1);
451     } catch (CatalogBadRequestException e2) {
452       logger.error("test failed.", e2);
453       throw RestUtils.newBadRequestException(e2);
454     }
455   }
456
457
458 }