Divide the MSB source codes into two repos
[msb/apigateway.git] / apiroute / apiroute-service / src / main / java / org / onap / msb / apiroute / resources / ApiRouteResource.java
1 /**
2  * Copyright 2016 ZTE, Inc. and others.
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.onap.msb.apiroute.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 java.net.URI;
25 import java.util.List;
26
27 import javax.ws.rs.DELETE;
28 import javax.ws.rs.DefaultValue;
29 import javax.ws.rs.GET;
30 import javax.ws.rs.POST;
31 import javax.ws.rs.PUT;
32 import javax.ws.rs.Path;
33 import javax.ws.rs.PathParam;
34 import javax.ws.rs.Produces;
35 import javax.ws.rs.QueryParam;
36 import javax.ws.rs.core.Context;
37 import javax.ws.rs.core.MediaType;
38 import javax.ws.rs.core.Response;
39 import javax.ws.rs.core.Response.ResponseBuilder;
40 import javax.ws.rs.core.UriInfo;
41
42 import org.apache.http.HttpStatus;
43 import org.onap.msb.apiroute.api.ApiRouteInfo;
44 import org.onap.msb.apiroute.api.DiscoverInfo;
45 import org.onap.msb.apiroute.wrapper.ApiRouteServiceWrapper;
46 import org.onap.msb.apiroute.wrapper.CustomRouteServiceWrapper;
47 import org.onap.msb.apiroute.wrapper.IuiRouteServiceWrapper;
48 import org.onap.msb.apiroute.wrapper.util.CommonUtil;
49 import org.onap.msb.apiroute.wrapper.util.ConfigUtil;
50 import org.onap.msb.apiroute.wrapper.util.JacksonJsonUtil;
51
52 import com.codahale.metrics.annotation.Timed;
53
54 @Path("/apiRoute")
55 @Api(tags = { "ApiRoute" })
56 @Produces(MediaType.APPLICATION_JSON)
57 public class ApiRouteResource {
58
59     @Context
60     UriInfo uriInfo; // actual uri info
61
62         @GET
63         @Path("/")
64         @ApiOperation(value = "get all ApiRoute ", code = HttpStatus.SC_OK,response = ApiRouteInfo.class, responseContainer = "List")
65     @ApiResponses(value = {@ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = "get ApiRouteInfo List  fail", response = String.class)})
66         @Produces(MediaType.APPLICATION_JSON)
67         @Timed
68         public List<ApiRouteInfo> getApiRoutes(@ApiParam(value = "Route Way", required = false) @QueryParam("routeWay") @DefaultValue("ip")String routeWay) {
69                 return ApiRouteServiceWrapper.getInstance().getAllApiRouteInstances(routeWay);
70         }
71
72         @POST
73         @Path("/")
74         @ApiOperation(value = "add one ApiRoute ", code = HttpStatus.SC_CREATED,response = ApiRouteInfo.class)
75         @ApiResponses(value = {
76                            @ApiResponse(code = HttpStatus.SC_UNPROCESSABLE_ENTITY, message = "Unprocessable ApiRouteInfo Entity ", response = String.class),
77                            @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = "add ApiRouteInfo fail", response = String.class),
78                            @ApiResponse(code = HttpStatus.SC_BAD_REQUEST, message = "Unprocessable ApiRouteInfo JSON REQUEST", response = String.class)})
79     @Produces(MediaType.APPLICATION_JSON)
80         @Timed
81         public Response addApiRoute(
82                         @ApiParam(value = "ApiRoute Instance Info", required = true) ApiRouteInfo apiRouteInfo,
83                         @ApiParam(value = "Route Way", required = false) @QueryParam("routeWay") @DefaultValue("ip")String routeWay) {
84             ApiRouteInfo new_apiRouteInfo = ApiRouteServiceWrapper.getInstance().saveApiRouteInstance4Rest(apiRouteInfo,routeWay);
85             URI returnURI = uriInfo.getAbsolutePathBuilder().path("/" + new_apiRouteInfo.getServiceName()+"/version/"+new_apiRouteInfo.getVersion()).build();
86         return Response.created(returnURI).entity(new_apiRouteInfo).build();
87
88         }
89         
90         @GET
91         @Path("/{serviceName}/version/{version}")
92         @ApiOperation(value = "get one ApiRoute ",code = HttpStatus.SC_OK, response = ApiRouteInfo.class)
93         @ApiResponses(value = {
94                            @ApiResponse(code = HttpStatus.SC_NOT_FOUND, message = "ApiRouteInfo not found", response = String.class),
95                            @ApiResponse(code = HttpStatus.SC_UNPROCESSABLE_ENTITY, message = "Unprocessable ApiRouteInfo Entity ", response = String.class),
96                            @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = "get ApiRouteInfo fail", response = String.class)})
97     @Produces(MediaType.APPLICATION_JSON)
98         @Timed
99         public ApiRouteInfo getApiRoute(
100                         @ApiParam(value = "ApiRoute serviceName", required = true) @PathParam("serviceName") String serviceName,
101                         @ApiParam(value = "ApiRoute version,if the version is empty, please enter \"null\"", required = false) @PathParam("version") @DefaultValue("") String version,
102                 @ApiParam(value = "ApiRoute host", required = false) @QueryParam("host") String host,
103                 @ApiParam(value = "ApiRoute Publish port", required = false) @QueryParam("publish_port") @DefaultValue("")String publish_port,
104                 @ApiParam(value = "Route Way", required = false) @QueryParam("routeWay") @DefaultValue("ip")String routeWay) {
105
106                 return ApiRouteServiceWrapper.getInstance().getApiRouteInstance(serviceName,version,host,publish_port,routeWay);
107
108         }
109
110         @PUT
111         @Path("/{serviceName}/version/{version}")
112         @ApiOperation(value = "update one ApiRoute by serviceName and version",  code = HttpStatus.SC_CREATED,response = ApiRouteInfo.class)
113         @ApiResponses(value = {
114                            @ApiResponse(code = HttpStatus.SC_UNPROCESSABLE_ENTITY, message = "Unprocessable ApiRouteInfo Entity ", response = String.class),
115                            @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = "update ApiRouteInfo fail", response = String.class),
116                            @ApiResponse(code = HttpStatus.SC_BAD_REQUEST, message = "Unprocessable ApiRouteInfo JSON REQUEST", response = String.class)})
117     @Produces(MediaType.APPLICATION_JSON)
118         @Timed
119         public Response updateApiRoute(
120                         @ApiParam(value = "ApiRoute serviceName", required = true) @PathParam("serviceName") String serviceName,
121                         @ApiParam(value = "ApiRoute version,if the version is empty, please enter \"null\"", required = false) @PathParam("version") @DefaultValue("") String version,
122                         @ApiParam(value = "ApiRoute Instance Info", required = true) ApiRouteInfo apiRouteInfo,
123                         @ApiParam(value = "Route Way", required = false) @QueryParam("routeWay") @DefaultValue("ip")String routeWay) {
124
125                 ApiRouteInfo new_apiRouteInfo = ApiRouteServiceWrapper.getInstance().saveApiRouteInstance4Rest(apiRouteInfo,routeWay);
126         URI returnURI =uriInfo.getAbsolutePathBuilder().path("/" + new_apiRouteInfo.getServiceName()+"/version/"+new_apiRouteInfo.getVersion()).build();
127         return Response.created(returnURI).entity(new_apiRouteInfo).build();
128
129         }
130         
131         
132
133         @DELETE
134         @Path("/{serviceName}/version/{version}")
135         @ApiOperation(value = "delete one ApiRoute by serviceName and version", code = HttpStatus.SC_NO_CONTENT)
136         @ApiResponses(value = {
137                            @ApiResponse(code = HttpStatus.SC_NO_CONTENT, message = "delete ApiRouteInfo succeed "),
138                            @ApiResponse(code = HttpStatus.SC_NOT_FOUND, message = "ApiRouteInfo not found", response = String.class),
139                            @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = "delete ApiRouteInfo fail", response = String.class)})
140    @Produces(MediaType.APPLICATION_JSON)
141         @Timed
142         public void deleteApiRoute(
143                         @ApiParam(value = "ApiRoute serviceName", required = true) @PathParam("serviceName") String serviceName,
144                         @ApiParam(value = "ApiRoute version,if the version is empty, please enter \"null\"", required = false) @PathParam("version") @DefaultValue("")  String version,
145                         @ApiParam(value = "ApiRoute host", required = false) @QueryParam("host") String host,
146                         @ApiParam(value = "ApiRoute Publish port", required = false) @QueryParam("publish_port") @DefaultValue("")String publish_port,
147                         @ApiParam(value = "Route Way", required = false) @QueryParam("routeWay") @DefaultValue("ip")String routeWay) {
148
149                  ApiRouteServiceWrapper.getInstance().deleteApiRoute(serviceName, version,host,publish_port,routeWay);
150         }
151         
152
153         @GET
154         @Path("/apiDocs")
155         @ApiOperation(value = "get all Local apiDoc ", code = HttpStatus.SC_OK, response = String.class, responseContainer = "List")
156     @ApiResponses(value = {@ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = "get apiDoc List  fail", response = String.class)})
157         @Produces(MediaType.APPLICATION_JSON)
158         @Timed
159         public String[] getApiDocs() {
160
161           return ApiRouteServiceWrapper.getInstance().getAllApiDocs();
162         }
163
164         
165         @GET
166     @Path("/discoverInfo")
167     @ApiOperation(value = "get discover Info ", code = HttpStatus.SC_OK,response = DiscoverInfo.class)
168     @ApiResponses(value = {@ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = "get discover Info fail", response = String.class)})
169         @Produces(MediaType.APPLICATION_JSON)
170     @Timed
171     public DiscoverInfo getServiceDiscoverInfo() {
172
173             return ConfigUtil.getInstance().getDiscoverInfo();
174     }
175         
176         @PUT
177         @Path("/{serviceName}/version/{version}/status/{status}")
178         @ApiOperation(value = "update one ApiRoute  status by serviceName and version", code = HttpStatus.SC_CREATED,response = ApiRouteInfo.class)
179         @ApiResponses(value = {
180                             @ApiResponse(code = HttpStatus.SC_UNPROCESSABLE_ENTITY, message = "Unprocessable ApiRouteInfo Entity ", response = String.class),
181                             @ApiResponse(code = HttpStatus.SC_NOT_FOUND, message = "ApiRouteInfo not found", response = String.class),
182                             @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = "update status fail", response = String.class)})
183     @Produces(MediaType.APPLICATION_JSON)
184         @Timed
185         public Response updateApiRouteStatus(
186                         @ApiParam(value = "ApiRoute serviceName", required = true) @PathParam("serviceName") String serviceName,
187                         @ApiParam(value = "ApiRoute version,if the version is empty, please enter \"null\"", required = false) @PathParam("version") @DefaultValue("") String version,
188                         @ApiParam(value = "ApiRoute status,1:abled  0:disabled", required = true)  @PathParam("status") String status,
189                         @ApiParam(value = "ApiRoute host", required = false) @QueryParam("host") String host,
190                         @ApiParam(value = "ApiRoute Publish port", required = false) @QueryParam("publish_port") @DefaultValue("")String publish_port,
191                         @ApiParam(value = "Route Way", required = false) @QueryParam("routeWay") @DefaultValue("ip")String routeWay) {
192
193             ApiRouteInfo new_apiRouteInfo =  ApiRouteServiceWrapper.getInstance().updateApiRouteStatus(serviceName,version,host,publish_port,status,routeWay);
194         return Response.created(uriInfo.getAbsolutePathBuilder().build()).entity(new_apiRouteInfo).build();
195
196         }
197         
198         @GET
199     @Path("/export")
200         @ApiOperation(value = "export all route service Info by json-file", code = HttpStatus.SC_OK,response = String.class)
201     @ApiResponses(value = {
202                            @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = "export fail", response = String.class),
203                            @ApiResponse(code = HttpStatus.SC_NOT_ACCEPTABLE, message = " not Acceptable client-side", response = String.class)})
204         @Produces(MediaType.TEXT_PLAIN)  
205     public Response  exportService(@ApiParam(value = "Route Way", required = false) @QueryParam("routeWay") @DefaultValue("ip")String routeWay) throws Exception {
206
207             ResponseBuilder response = Response.ok( ApiRouteServiceWrapper.getInstance().getAllrouteByJson(routeWay));   
208         return response.header("Content-Disposition", "attachment; filename=\"RouteService.json\"").build();   
209
210     }
211
212         
213
214 }