VoLTE groovy draft files
[so.git] / adapters / mso-vfc-adapter / src / main / java / org / openecomp / mso / adapters / vfc / VfcAdapterRest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20 package org.openecomp.mso.adapters.vfc;
21
22 import javax.servlet.http.HttpServletRequest;
23 import javax.ws.rs.Consumes;
24 import javax.ws.rs.POST;
25 import javax.ws.rs.Path;
26 import javax.ws.rs.PathParam;
27 import javax.ws.rs.Produces;
28 import javax.ws.rs.core.MediaType;
29 import javax.ws.rs.core.Response;
30 import javax.ws.rs.core.Response.ResponseBuilder;
31
32 import org.openecomp.mso.adapters.vfc.model.NSResourceInputParameter;
33 import org.openecomp.mso.adapters.vfc.model.NsOperationKey;
34 import org.openecomp.mso.adapters.vfc.model.RestfulResponse;
35 import org.openecomp.mso.adapters.vfc.util.JsonUtil;
36 import org.openecomp.mso.adapters.vfc.util.RestfulUtil;
37 import org.openecomp.mso.adapters.vfc.util.ValidateUtil;
38 import org.openecomp.mso.logger.MsoLogger;
39
40 /**
41  * The rest class for VF-c Adapter
42  * <br>
43  * <p>
44  * </p>
45  * 
46  * @author
47  * @version     ONAP Amsterdam Release  2017-08-28
48  */
49 @Path("/v1/vfcdrivers")
50 public class VfcAdapterRest {
51
52     private static final MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.RA);
53
54     private final VfcManager driverMgr = new VfcManager();
55
56     /**
57      * Create a NS
58      * <br>
59      * 
60      * @param servletReq the http request
61      * @return
62      * @since ONAP Amsterdam Release
63      */
64     @POST
65     @Path("/ns")
66     @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
67     @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
68     public Response createNfvoNs(HttpServletRequest servletReq) {
69         // Step 1: get parameters from request for current node
70         String body = RestfulUtil.getRequestBody(servletReq);
71         ValidateUtil.assertObjectNotNull(body);
72         LOGGER.debug("body from request is {}" + body);
73         NSResourceInputParameter nsInput = JsonUtil.unMarshal(body, NSResourceInputParameter.class);
74         RestfulResponse rsp = driverMgr.createNs(nsInput);
75         return buildResponse(rsp);
76     }
77
78     /**
79      * Delete NS instance<br>
80      *
81      * @param servletReq http request
82      * @return response
83      * @since ONAP Amsterdam Release
84      */
85     @POST
86     @Path("/ns/{nsInstanceId}")
87     @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
88     @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
89     public Response deleteNfvoNs(HttpServletRequest servletReq, @PathParam("nsInstanceId") String nsInstanceId) {
90         // Step 1: get parameters from request for current node
91         String body = RestfulUtil.getRequestBody(servletReq);
92         ValidateUtil.assertObjectNotNull(body);
93         LOGGER.debug("body from request is {}" + body);
94         NsOperationKey nsOperationKey = JsonUtil.unMarshal(body, NsOperationKey.class);
95
96         RestfulResponse rsp = driverMgr.deleteNs(nsOperationKey, nsInstanceId);
97         return buildResponse(rsp);
98     }
99
100     /**
101      * Query Operation job status
102      * <br>
103      * 
104      * @param servletReq The Http Request
105      * @param jobId The job id 
106      * @return
107      * @since ONAP Amsterdam Release
108      */
109     @POST
110     @Path("/jobs/{jobId}")
111     @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
112     @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
113     public Response queryNfvoJobStatus(HttpServletRequest servletReq, @PathParam("jobId") String jobId) {
114         ValidateUtil.assertObjectNotNull(jobId);
115         String body = RestfulUtil.getRequestBody(servletReq);
116         ValidateUtil.assertObjectNotNull(body);
117         LOGGER.debug("body from request is {}" + body);
118         NsOperationKey nsOperationKey = JsonUtil.unMarshal(body, NsOperationKey.class);
119         RestfulResponse rsp = driverMgr.getNsProgress(nsOperationKey, jobId);
120         return buildResponse(rsp);
121     }
122
123
124     /**
125      * Instantiate NS instance
126      * <br>
127      * 
128      * @param servletReq The http request
129      * @param nsInstanceId The NS instance id
130      * @return
131      * @since ONAP Amsterdam Release
132      */
133     @POST
134     @Path("/ns/{nsInstanceId}/instantiate")
135     @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
136     @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
137     public Response instantiateNfvoNs(HttpServletRequest servletReq, @PathParam("nsInstanceId") String nsInstanceId) {
138         String body = RestfulUtil.getRequestBody(servletReq);
139         ValidateUtil.assertObjectNotNull(body);
140         LOGGER.debug("body from request is {}" + body);
141         NSResourceInputParameter nsInput = JsonUtil.unMarshal(body, NSResourceInputParameter.class);
142         RestfulResponse rsp = driverMgr.instantiateNs(nsInstanceId, nsInput);
143         return buildResponse(rsp);
144     }
145
146     /**
147      * Terminate NS instance
148      * <br>
149      * 
150      * @param servletReq The http request
151      * @param nsInstanceId The NS instance id
152      * @return
153      * @since ONAP Amsterdam Release
154      */
155     @POST
156     @Path("/ns/{nsInstanceId}/terminate")
157     @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
158     @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
159     public Response terminateNfvoNs(HttpServletRequest servletReq, @PathParam("nsInstanceId") String nsInstanceId) {
160         ValidateUtil.assertObjectNotNull(nsInstanceId);
161         String body = RestfulUtil.getRequestBody(servletReq);
162         ValidateUtil.assertObjectNotNull(body);
163         LOGGER.debug("body from request is {}" + body);
164         NsOperationKey nsOperationKey = JsonUtil.unMarshal(body, NsOperationKey.class);
165         RestfulResponse rsp = driverMgr.terminateNs(nsOperationKey, nsInstanceId);
166         return buildResponse(rsp);
167     }
168
169
170     /**
171      * build response from restful response
172      * <br>
173      * 
174      * @param rsp general response object
175      * @return
176      * @since ONAP Amsterdam Release
177      */
178     private Response buildResponse(RestfulResponse rsp) {
179         ResponseBuilder rspBuilder = Response.status(rsp.getStatus());
180         rspBuilder.entity(rsp.getResponseContent());
181         return rspBuilder.build();
182     }
183 }