aabeae635f3102568f2710d3c21b9a808197a6bc
[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 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;
23
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;
33
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;
52
53 import com.codahale.metrics.annotation.Timed;
54
55 /**
56  * model template service.
57  * 
58  */
59 @Path("/servicetemplates")
60 @Api(tags = {"Model Resource"})
61 public class TemplateResource {
62
63   private static final Logger logger = LoggerFactory.getLogger(TemplateResource.class);
64
65   /**
66    * Query service template by service template id.
67    * @param servicetemplateid service template id
68    * @return Response
69    */
70   @Path("/{servicetemplateid}")
71   @GET
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)})
83   @Timed
84   public Response getServiceTemplateById(@ApiParam(
85       value = "service template id") @PathParam("servicetemplateid") String servicetemplateid) {
86     try {
87       ServiceTemplate st =
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);
93     }
94   }
95
96
97   /**
98    * Query service template by filter conditions.
99    * @param status template status
100    * @param deletionPending delay to delete
101    * @return Response
102    */
103   @GET
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)})
115   @Timed
116   public Response getServiceTemplates(
117       @ApiParam(value = "template status") @QueryParam("status") EnumOperationalState status,
118       @ApiParam(value = "delay to delete") @QueryParam("deletionPending") boolean deletionPending) {
119     try {
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);
126     }
127
128   }
129
130   /**
131    * Query nesting service template of a node type.
132    * @param nodeTypeIds node type ids
133    * @return Response
134    */
135   @Path("/nesting")
136   @GET
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)})
148   @Timed
149   public Response getNestingServiceTemplate(@ApiParam(value = "Node Type Id",
150       required = true) @QueryParam("nodeTypeIds") String nodeTypeIds) {
151     try {
152       if (ToolUtil.isTrimedEmptyString(nodeTypeIds)) {
153         throw new CatalogBadRequestException("nodeTypeIds is null.");
154       }
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);
165     }
166   }
167
168   /**
169    * Query raw data of a service template by csar id.
170    * @param queryCondition query condition
171    * @return Response
172    */
173   @Path("/queryingrawdata")
174   @POST
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)})
186   @Timed
187   public Response getServiceTemplateRawData(
188       @ApiParam(value = "Query Service Template Raw Data Condition",
189           required = true) QueryRawDataCondition queryCondition) {
190     try {
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);
200     }
201   }
202
203
204   /**
205    * Query operation list of service template.
206    * @param serviceTemplateId service template id
207    * @return Response
208    */
209   @Path("/{serviceTemplateId}/operations")
210   @GET
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)})
222   @Timed
223   public Response getServiceTemplateOperations(@ApiParam(value = "Service Template Id",
224       required = true) @PathParam("serviceTemplateId") String serviceTemplateId) {
225     try {
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);
232     }
233
234   }
235
236   /**
237    * Query input parameters of a specified operation.
238    * @param serviceTemplateId service template id
239    * @param operationName operation name
240    * @return Response
241    */
242   @Path("/{serviceTemplateId}/operations/{operationName}/parameters")
243   @GET
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)})
255   @Timed
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) {
261     try {
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);
268     }
269
270   }
271
272   /**
273    * Query input parameters of service template.
274    * @param servicetemplateid service template id
275    * @return Response
276    */
277   @Path("/{servicetemplateid}/parameters")
278   @GET
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)})
289   @Timed
290   public Response getServiceTemplateParameters(@ApiParam(value = "service template id",
291       required = true) @PathParam("servicetemplateid") String servicetemplateid) {
292     try {
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);
299     }
300
301   }
302
303   /**
304    * Query node template list of a specified service template.
305    * @param serviceTemplateId service template id
306    * @param types node type
307    * @return Response
308    */
309   @Path("/{serviceTemplateId}/nodetemplates")
310   @GET
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)})
322   @Timed
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) {
327     try {
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);
335     }
336
337   }
338
339
340   private String[] getSplitedTypes(String types) {
341     if (ToolUtil.isTrimedEmptyString(types)) {
342       return new String[0];
343     }
344
345     return types.split(",");
346   }
347
348   /**
349    * Query node template by node template id.
350    * @param serviceTemplateId service template id
351    * @param nodeTemplateId node template id
352    * @return Response
353    */
354   @Path("/{serviceTemplateId}/nodetemplates/{nodeTemplateId}")
355   @GET
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)})
366   @Timed
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) {
372     try {
373       NodeTemplate nt = ServiceTemplateWrapper.getInstance().getNodeTemplateById(serviceTemplateId,
374           nodeTemplateId);
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);
379     }
380
381   }
382
383   // /**
384   // * @param servicetemplateid
385   // * @return
386   // */
387   // @Path("/{servicetemplateid}/nfvtemplate")
388   // @POST
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) })
401   // @Timed
402   // public Response getNfvTemplate(
403   // @ApiParam(value = "service template id", required = true)
404   // @PathParam("servicetemplateid") String servicetemplateid) {
405   // try {
406   // NfvTemplate nfvTemplate = ServiceTemplateWrapper.getInstance()
407   // .getNfvTemplate(servicetemplateid);
408   // return Response.status(Response.Status.OK).entity(nfvTemplate)
409   // .build();
410   // } catch (CatalogResourceException e) {
411   // logger.error("getNfvTemplate failed.", e);
412   // throw RestUtils.newInternalServerErrorException(e);
413   // }
414   //
415   // }
416
417   /**
418    * test function.
419    * @return Response
420    */
421   @Path("/test")
422   @GET
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)})
433   @Timed
434   public Response test() {
435     try {
436       AbstractModelParser parser1 = new ToscaYamlModelParser();
437       parser1.parse("pk11111", "C:\\Users\\10090474\\Downloads\\OpenO.csar");
438       
439 //      AbstractModelParser parser = new AriaModelParser();
440 //      parser.parse("pk11111", "/home/b/common-tosca-aria/blueprints/tosca/node-cellar.yaml");
441
442       ModelService.getInstance().delete("pk11111");
443
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);
452     }
453   }
454
455
456 }