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