2a4c74a5b3f9b7dfae925d35f96b859c6b16cb22
[msb/apigateway.git] / msb-core / apiroute / apiroute-service / src / main / java / org / openo / msb / resources / ApiRouteResource.java
1 /**\r
2  * Copyright 2016 ZTE, Inc. and others.\r
3  *\r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  *     http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 package org.openo.msb.resources;\r
17 \r
18 import io.swagger.annotations.Api;\r
19 import io.swagger.annotations.ApiOperation;\r
20 import io.swagger.annotations.ApiParam;\r
21 import io.swagger.annotations.ApiResponse;\r
22 import io.swagger.annotations.ApiResponses;\r
23 \r
24 import java.net.URI;\r
25 \r
26 import javax.ws.rs.DELETE;\r
27 import javax.ws.rs.DefaultValue;\r
28 import javax.ws.rs.GET;\r
29 import javax.ws.rs.POST;\r
30 import javax.ws.rs.PUT;\r
31 import javax.ws.rs.Path;\r
32 import javax.ws.rs.PathParam;\r
33 import javax.ws.rs.Produces;\r
34 import javax.ws.rs.core.Context;\r
35 import javax.ws.rs.core.MediaType;\r
36 import javax.ws.rs.core.Response;\r
37 import javax.ws.rs.core.Response.ResponseBuilder;\r
38 import javax.ws.rs.core.UriInfo;\r
39 \r
40 import org.apache.http.HttpStatus;\r
41 import org.openo.msb.api.ApiRouteInfo;\r
42 import org.openo.msb.api.DiscoverInfo;\r
43 import org.openo.msb.wrapper.ApiRouteServiceWrapper;\r
44 import org.openo.msb.wrapper.CustomRouteServiceWrapper;\r
45 import org.openo.msb.wrapper.IuiRouteServiceWrapper;\r
46 import org.openo.msb.wrapper.util.JacksonJsonUtil;\r
47 import org.openo.msb.wrapper.util.RouteUtil;\r
48 \r
49 import com.codahale.metrics.annotation.Timed;\r
50 \r
51 @Path("/apiRoute")\r
52 @Api(tags = { "ApiRoute" })\r
53 @Produces(MediaType.APPLICATION_JSON)\r
54 public class ApiRouteResource {\r
55 \r
56     @Context\r
57     UriInfo uriInfo; // actual uri info\r
58 \r
59         @GET\r
60         @Path("/")\r
61         @ApiOperation(value = "get all ApiRoute ", code = HttpStatus.SC_OK,response = ApiRouteInfo.class, responseContainer = "List")\r
62     @ApiResponses(value = {@ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = "get ApiRouteInfo List  fail", response = String.class)})\r
63         @Produces(MediaType.APPLICATION_JSON)\r
64         @Timed\r
65         public ApiRouteInfo[] getApiRoutes() {\r
66                 return ApiRouteServiceWrapper.getInstance().getAllApiRouteInstances();\r
67         }\r
68 \r
69         @POST\r
70         @Path("/")\r
71         @ApiOperation(value = "add one ApiRoute ", code = HttpStatus.SC_CREATED,response = ApiRouteInfo.class)\r
72         @ApiResponses(value = {\r
73                            @ApiResponse(code = HttpStatus.SC_UNSUPPORTED_MEDIA_TYPE, message = "Unprocessable ApiRouteInfo Entity ", response = String.class),\r
74                            @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = "add ApiRouteInfo fail", response = String.class),\r
75                            @ApiResponse(code = HttpStatus.SC_BAD_REQUEST, message = "Unprocessable ApiRouteInfo JSON REQUEST", response = String.class)})\r
76     @Produces(MediaType.APPLICATION_JSON)\r
77         @Timed\r
78         public Response addApiRoute(\r
79                         @ApiParam(value = "ApiRoute Instance Info", required = true) ApiRouteInfo apiRouteInfo) {\r
80             ApiRouteInfo new_apiRouteInfo = ApiRouteServiceWrapper.getInstance().saveApiRouteInstance(apiRouteInfo,"");\r
81             URI returnURI =\r
82                 uriInfo.getAbsolutePathBuilder()\r
83                         .path("/" + new_apiRouteInfo.getServiceName()+"/version/"+new_apiRouteInfo.getVersion()).build();\r
84         return Response.created(returnURI).entity(new_apiRouteInfo).build();\r
85 \r
86         }\r
87         \r
88         @GET\r
89         @Path("/{serviceName}/version/{version}")\r
90         @ApiOperation(value = "get one ApiRoute ",code = HttpStatus.SC_OK, response = ApiRouteInfo.class)\r
91         @ApiResponses(value = {\r
92                            @ApiResponse(code = HttpStatus.SC_NOT_FOUND, message = "ApiRouteInfo not found", response = String.class),\r
93                            @ApiResponse(code = HttpStatus.SC_UNSUPPORTED_MEDIA_TYPE, message = "Unprocessable ApiRouteInfo Entity ", response = String.class),\r
94                            @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = "get ApiRouteInfo fail", response = String.class)})\r
95     @Produces(MediaType.APPLICATION_JSON)\r
96         @Timed\r
97         public ApiRouteInfo getApiRoute(\r
98                         @ApiParam(value = "ApiRoute serviceName", required = true) @PathParam("serviceName") String serviceName,\r
99                         @ApiParam(value = "ApiRoute version,if the version is empty, please enter \"null\"", required = false) @PathParam("version") @DefaultValue("") String version) {\r
100 \r
101                 return ApiRouteServiceWrapper.getInstance().getApiRouteInstance(serviceName,version);\r
102 \r
103         }\r
104 \r
105         @PUT\r
106         @Path("/{serviceName}/version/{version}")\r
107         @ApiOperation(value = "update one ApiRoute by serviceName and version",  code = HttpStatus.SC_CREATED,response = ApiRouteInfo.class)\r
108         @ApiResponses(value = {\r
109                            @ApiResponse(code = HttpStatus.SC_UNSUPPORTED_MEDIA_TYPE, message = "Unprocessable ApiRouteInfo Entity ", response = String.class),\r
110                            @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = "update ApiRouteInfo fail", response = String.class),\r
111                            @ApiResponse(code = HttpStatus.SC_BAD_REQUEST, message = "Unprocessable ApiRouteInfo JSON REQUEST", response = String.class)})\r
112     @Produces(MediaType.APPLICATION_JSON)\r
113         @Timed\r
114         public Response updateApiRoute(\r
115                         @ApiParam(value = "ApiRoute serviceName", required = true) @PathParam("serviceName") String serviceName,\r
116                         @ApiParam(value = "ApiRoute version,if the version is empty, please enter \"null\"", required = false) @PathParam("version") @DefaultValue("") String version,\r
117                         @ApiParam(value = "ApiRoute Instance Info", required = true) ApiRouteInfo apiRouteInfo) {\r
118 \r
119                 ApiRouteInfo new_apiRouteInfo = ApiRouteServiceWrapper.getInstance().updateApiRouteInstance(serviceName,version,apiRouteInfo,"");\r
120         URI returnURI =\r
121                 uriInfo.getAbsolutePathBuilder()\r
122                         .path("/" + new_apiRouteInfo.getServiceName()+"/version/"+new_apiRouteInfo.getVersion()).build();\r
123         return Response.created(returnURI).entity(new_apiRouteInfo).build();\r
124 \r
125         }\r
126         \r
127         \r
128 \r
129         @DELETE\r
130         @Path("/{serviceName}/version/{version}")\r
131         @ApiOperation(value = "delete one ApiRoute by serviceName and version", code = HttpStatus.SC_NO_CONTENT)\r
132         @ApiResponses(value = {\r
133                            @ApiResponse(code = HttpStatus.SC_NO_CONTENT, message = "delete ApiRouteInfo succeed "),\r
134                            @ApiResponse(code = HttpStatus.SC_NOT_FOUND, message = "ApiRouteInfo not found", response = String.class),\r
135                            @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = "delete ApiRouteInfo fail", response = String.class)})\r
136    @Produces(MediaType.APPLICATION_JSON)\r
137         @Timed\r
138         public void deleteApiRoute(\r
139                         @ApiParam(value = "ApiRoute serviceName", required = true) @PathParam("serviceName") String serviceName,\r
140                         @ApiParam(value = "ApiRoute version,if the version is empty, please enter \"null\"", required = false) @PathParam("version") @DefaultValue("")  String version) {\r
141 \r
142                 \r
143                  ApiRouteServiceWrapper.getInstance().deleteApiRoute(serviceName, version,"*","");\r
144 \r
145         }\r
146         \r
147 \r
148         @GET\r
149         @Path("/apiDocs")\r
150         @ApiOperation(value = "get all Local apiDoc ", code = HttpStatus.SC_OK, response = String.class, responseContainer = "List")\r
151     @ApiResponses(value = {@ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = "get apiDoc List  fail", response = String.class)})\r
152         @Produces(MediaType.APPLICATION_JSON)\r
153         @Timed\r
154         public String[] getApiDocs() {\r
155 \r
156                 String[] apiDocs = ApiRouteServiceWrapper.getInstance().getAllApiDocs();\r
157                 return apiDocs;\r
158 \r
159         }\r
160         \r
161         @GET\r
162         @Path("/apiGatewayPort")\r
163         @ApiOperation(value = "get apiGateway Port ", code = HttpStatus.SC_OK, response = String.class)\r
164     @ApiResponses(value = {@ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = "get apiGateway Port  fail", response = String.class)})\r
165         @Produces(MediaType.TEXT_PLAIN)\r
166         @Timed\r
167         public String getApiGatewayPort() {\r
168 \r
169             return ApiRouteServiceWrapper.getInstance().getApiGatewayPort();\r
170 \r
171         }\r
172         \r
173         @GET\r
174     @Path("/discoverInfo")\r
175     @ApiOperation(value = "get discover Info ", code = HttpStatus.SC_OK,response = DiscoverInfo.class)\r
176     @ApiResponses(value = {@ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = "get discover Info fail", response = String.class)})\r
177         @Produces(MediaType.APPLICATION_JSON)\r
178     @Timed\r
179     public DiscoverInfo getServiceDiscoverInfo() {\r
180 \r
181             return ApiRouteServiceWrapper.getInstance().getServiceDiscoverInfo();\r
182     }\r
183         \r
184         @PUT\r
185         @Path("/{serviceName}/version/{version}/status/{status}")\r
186         @ApiOperation(value = "update one ApiRoute  status by serviceName and version", code = HttpStatus.SC_CREATED,response = ApiRouteInfo.class)\r
187         @ApiResponses(value = {\r
188                             @ApiResponse(code = HttpStatus.SC_UNSUPPORTED_MEDIA_TYPE, message = "Unprocessable ApiRouteInfo Entity ", response = String.class),\r
189                             @ApiResponse(code = HttpStatus.SC_NOT_FOUND, message = "ApiRouteInfo not found", response = String.class),\r
190                             @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = "update status fail", response = String.class)})\r
191     @Produces(MediaType.APPLICATION_JSON)\r
192         @Timed\r
193         public Response updateApiRouteStatus(\r
194                         @ApiParam(value = "ApiRoute serviceName", required = true) @PathParam("serviceName") String serviceName,\r
195                         @ApiParam(value = "ApiRoute version,if the version is empty, please enter \"null\"", required = false) @PathParam("version") @DefaultValue("") String version,\r
196                         @ApiParam(value = "ApiRoute status,1:abled  0:disabled", required = true)  @PathParam("status") String status) {\r
197 \r
198             ApiRouteInfo new_apiRouteInfo =  ApiRouteServiceWrapper.getInstance().updateApiRouteStatus(serviceName,version,status);\r
199         return Response.created(uriInfo.getAbsolutePathBuilder().build()).entity(new_apiRouteInfo).build();\r
200 \r
201         }\r
202         \r
203         @GET\r
204     @Path("/export")\r
205         @ApiOperation(value = "export all route service Info by json-file", code = HttpStatus.SC_OK,response = String.class)\r
206     @ApiResponses(value = {\r
207                            @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = "export fail", response = String.class),\r
208                            @ApiResponse(code = HttpStatus.SC_NOT_ACCEPTABLE, message = " not Acceptable client-side", response = String.class)})\r
209         @Produces(MediaType.TEXT_PLAIN)  \r
210     public Response  exportService() throws Exception {\r
211          \r
212             \r
213             Object[] apirouteArray= ApiRouteServiceWrapper.getInstance().getAllApiRouteInstances();\r
214             Object[] iuirouteArray= IuiRouteServiceWrapper.getInstance().getAllIuiRouteInstances();\r
215             Object[] customrouteArray= CustomRouteServiceWrapper.getInstance().getAllCustomRouteInstances();\r
216             \r
217             Object[] temprouteArray =RouteUtil.concat(apirouteArray, iuirouteArray);\r
218             Object[] allrouteArray=RouteUtil.concat(temprouteArray, customrouteArray);\r
219             \r
220            \r
221         String allrouteJson=JacksonJsonUtil.beanToJson(allrouteArray);\r
222         \r
223         ResponseBuilder response = Response.ok(allrouteJson);   \r
224         response.header("Content-Disposition",   \r
225             "attachment; filename=\"RouteService.json\"");   \r
226         return response.build(); \r
227        \r
228 \r
229     }\r
230 \r
231         \r
232 \r
233 }\r