Fix published url for huaweidriver
[vfc/nfvo/driver/vnfm/svnfm.git] / huawei / vnfmadapter / VnfmadapterService / service / src / main / java / org / onap / vfc / nfvo / vnfm / svnfm / vnfmadapter / service / rest / VnfRoa.java
1 /*
2  * Copyright 2016-2017 Huawei Technologies Co., Ltd.
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
17 package org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.rest;
18
19 import java.util.HashMap;
20 import java.util.Map;
21
22 import javax.servlet.http.HttpServletRequest;
23 import javax.servlet.http.HttpServletResponse;
24 import javax.ws.rs.Consumes;
25 import javax.ws.rs.GET;
26 import javax.ws.rs.POST;
27 import javax.ws.rs.PUT;
28 import javax.ws.rs.Path;
29 import javax.ws.rs.PathParam;
30 import javax.ws.rs.Produces;
31 import javax.ws.rs.QueryParam;
32 import javax.ws.rs.core.Context;
33 import javax.ws.rs.core.MediaType;
34
35 import org.apache.commons.collections.map.UnmodifiableMap;
36 import org.apache.commons.lang3.StringUtils;
37 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.VnfmJsonUtil;
38 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.restclient.ServiceException;
39 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.constant.Constant;
40 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.process.VnfMgr;
41 import org.slf4j.Logger;
42 import org.slf4j.LoggerFactory;
43
44 import net.sf.json.JSONObject;
45
46 /**
47  * Provide interfaces for instantiate or terminate VNF.
48  * <br/>
49  *
50  * @author
51  * @version VFC 1.0 Aug 24, 2016
52  */
53 @SuppressWarnings("unchecked")
54 @Path("/api/huaweivnfmdriver/v1")
55 @Consumes(MediaType.APPLICATION_JSON)
56 @Produces(MediaType.APPLICATION_JSON)
57 public class VnfRoa {
58
59     private static final Logger LOG = LoggerFactory.getLogger(VnfRoa.class);
60
61     private VnfMgr vnfMgr;
62
63     private static Map<String, String> progressItem;
64
65     private static Map<String, String> jobstatusItem;
66
67     static {
68         Map<String, String> map = new HashMap<>();
69         map.put("Building", "50");
70         map.put("Active", "100");
71         map.put("Stopped", "50");
72         map.put("Error", "100");
73         progressItem = UnmodifiableMap.decorate(map);
74
75         map = new HashMap<>();
76         map.put("Building", "processing");
77         map.put("Active", "finished");
78         map.put("Stopped", "processing");
79         map.put("Error", "error");
80         jobstatusItem = UnmodifiableMap.decorate(map);
81     }
82
83     public void setVnfMgr(VnfMgr vnfMgr) {
84         this.vnfMgr = vnfMgr;
85     }
86
87     /**
88      * Scale VNF
89      * 
90      * @param context
91      *            * {
92      *            "vnfInstanceId":"5",
93      *            "type":"SCALE_OUT",
94      *            "aspectId":"101",
95      *            "numberOfSteps":"1",
96      *            "additionalParam":{}
97      *            }
98      * @param resp
99      * @param vnfmId
100      * @return
101      *         {
102      *         "jobId":"1"
103      *         }
104      * @throws ServiceException
105      */
106     @POST
107     @Path("/{vnfmId}/vnfs/{vnfInstanceId}/scale")
108     public String scaleVnf(@Context HttpServletRequest context, @Context HttpServletResponse resp,
109             @PathParam("vnfmId") String vnfmId, @PathParam("vnfInstanceId") String vnfInstanceId)
110             throws ServiceException {
111         JSONObject jsonObject = VnfmJsonUtil.getJsonFromContexts(context);
112         LOG.info("function=scaleVNF, msg=enter to scale a vnf. request body:" + jsonObject);
113         JSONObject result = new JSONObject();
114         if(null == jsonObject) {
115             String msg = "the parameters do not meet the requirements,please check it!";
116             LOG.error("function=scalVnf," + msg);
117             resp.setStatus(Constant.HTTP_NOT_ACCEPTABLE);
118             result.put("msg", msg);
119             return result.toString();
120         }
121
122         result = vnfMgr.scaleVNF(jsonObject, vnfmId, vnfInstanceId);
123         LOG.info("function=scaleVNF,result=" + result.toString());
124         if(result.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
125             LOG.error("function=scaleVNF, msg=scaleVnf fail");
126             resp.setStatus(Constant.HTTP_INNERERROR);
127             return result.toString();
128         }
129         return JSONObject.fromObject(result.getJSONObject("data")).toString();
130     }
131
132     /**
133      * Provide function for instantiate VNF
134      * <br/>
135      *
136      * @param context
137      * @param resp
138      * @param vnfmId
139      * @return
140      * @throws ServiceException
141      * @since VFC 1.0
142      */
143     @POST
144     @Path("/{vnfmId}/vnfs")
145     public String addVnf(@Context HttpServletRequest context, @Context HttpServletResponse resp,
146             @PathParam("vnfmId") String vnfmId) throws ServiceException {
147         LOG.warn("function=addVnf, msg=enter to add a vnf");
148         JSONObject subJsonObject = VnfmJsonUtil.getJsonFromContexts(context);
149         JSONObject restJson = new JSONObject();
150
151         if(null == subJsonObject) {
152             LOG.error("function=addVnf, msg=params are insufficient");
153             resp.setStatus(Constant.HTTP_INNERERROR);
154             return restJson.toString();
155         }
156         LOG.info("addVnf request info from (LCM):" + subJsonObject);
157         restJson = vnfMgr.addVnf(subJsonObject, vnfmId);
158
159         if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
160             LOG.error("function=addVnf, msg=addvnf fail");
161             resp.setStatus(Constant.HTTP_INNERERROR);
162             return restJson.toString();
163         }
164
165         return JSONObject.fromObject(restJson.getJSONObject("data")).toString();
166     }
167
168     /**
169      * Provide function for terminate VNF
170      * <br/>
171      *
172      * @param vnfmId
173      * @param resp
174      * @param vnfInstanceId
175      * @param context
176      * @return
177      * @throws ServiceException
178      * @since VFC 1.0
179      */
180     @POST
181     @Path("/{vnfmId}/vnfs/{vnfInstanceId}/terminate")
182     public String delVnf(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp,
183             @PathParam("vnfInstanceId") String vnfInstanceId, @Context HttpServletRequest context)
184             throws ServiceException {
185         LOG.warn("function=delVnf, msg=enter to delete a vnf: vnfInstanceId: {}, vnfmId: {}", vnfInstanceId, vnfmId);
186         JSONObject vnfObject = VnfmJsonUtil.getJsonFromContexts(context);
187         JSONObject restJson = new JSONObject();
188
189         if(StringUtils.isEmpty(vnfInstanceId) || StringUtils.isEmpty(vnfmId)) {
190             resp.setStatus(Constant.HTTP_INNERERROR);
191             return restJson.toString();
192         }
193
194         restJson = vnfMgr.deleteVnf(vnfInstanceId, vnfmId, vnfObject);
195         if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
196             LOG.error("function=delVnf, msg=delVnf fail");
197             resp.setStatus(Constant.HTTP_INNERERROR);
198             return restJson.toString();
199         }
200
201         return JSONObject.fromObject(restJson.getJSONObject("data")).toString();
202     }
203
204     /**
205      * Provide function for get VNF
206      * <br/>
207      *
208      * @param vnfmId
209      * @param resp
210      * @param vnfInstanceId
211      * @param context
212      * @return
213      * @throws ServiceException
214      * @since VFC 1.0
215      */
216     @GET
217     @Path("/{vnfmId}/vnfs/{vnfInstanceId}")
218     public String getVnf(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp,
219             @PathParam("vnfInstanceId") String vnfInstanceId) throws ServiceException {
220         LOG.warn("function=getVnf, msg=enter to get a vnf: vnfInstanceId: {}, vnfmId: {}", vnfInstanceId, vnfmId);
221         JSONObject restJson = new JSONObject();
222
223         if(StringUtils.isEmpty(vnfInstanceId) || StringUtils.isEmpty(vnfmId)) {
224             resp.setStatus(Constant.HTTP_INNERERROR);
225             return restJson.toString();
226         }
227
228         restJson = vnfMgr.getVnf(vnfInstanceId, vnfmId);
229         if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
230             LOG.error("function=getVnf, msg=getVnf fail");
231             resp.setStatus(Constant.HTTP_INNERERROR);
232             return restJson.toString();
233         }
234
235         restJson.remove(Constant.RETCODE);
236         return restJson.toString();
237     }
238
239     /**
240      * Provide function for get job
241      * <br/>
242      *
243      * @param jobId
244      * @param vnfmId
245      * @param resp
246      * @param responseId
247      * @return
248      * @throws ServiceException
249      * @since VFC 1.0
250      */
251     @GET
252     @Path("/{vnfmId}/jobs/{jobId}")
253     public String getJob(@PathParam("jobId") String jobId, @PathParam("vnfmId") String vnfmId,
254             @Context HttpServletResponse resp, @QueryParam("@responseId") String responseId) throws ServiceException {
255         LOG.warn("function=getJob, msg=enter to get a job: jobId: {}, responseId: {}", jobId, responseId);
256         JSONObject restJson = new JSONObject();
257
258         if(StringUtils.isEmpty(jobId) || StringUtils.isEmpty(vnfmId)) {
259             resp.setStatus(Constant.HTTP_INNERERROR);
260             return restJson.toString();
261         }
262
263         restJson = vnfMgr.getJob(jobId, vnfmId);
264         if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
265             LOG.error("function=getJob, msg=getJob fail");
266             resp.setStatus(Constant.HTTP_INNERERROR);
267             return restJson.toString();
268         }
269
270         return getJobBody(restJson);
271     }
272
273     /**
274      * <br>
275      * 
276      * @param context
277      *            {
278      *            �action�: �vmReset�,
279      *            �affectedvm�: {
280      *            �vmid�: �804cca71 - 9ae9 - 4511 - 8e30 - d1387718caff�,
281      *            �vduid�: �vdu_100�,
282      *            �vmname�: �ZTE_SSS_111_PP_2_L�
283      *            }
284      *            }
285      * @param resp
286      * @param vnfmId
287      * @param vnfInstanceId
288      * @return
289      * @throws ServiceException
290      * @since VFC 1.0
291      */
292     @PUT
293     @Path("/{vnfmId}/vnfs/{vnfInstanceId}/heal")
294     public String healVnf(@Context HttpServletRequest context, @Context HttpServletResponse resp,
295             @PathParam("vnfmId") String vnfmId, @PathParam("vnfInstanceId") String vnfInstanceId)
296             throws ServiceException {
297         LOG.warn("function=healVnf, msg=enter to heal a vnf: vnfInstanceId: {}, vnfmId: {}", vnfInstanceId, vnfmId);
298         JSONObject restJson = new JSONObject();
299         JSONObject jsonObject = VnfmJsonUtil.getJsonFromContexts(context);
300
301         if(StringUtils.isEmpty(vnfInstanceId) || StringUtils.isEmpty(vnfmId)) {
302             resp.setStatus(Constant.HTTP_INNERERROR);
303             restJson.put("message", "vnfmId is null or vnfInstanceId is null");
304             return restJson.toString();
305         }
306
307         restJson = vnfMgr.healVnf(jsonObject, vnfInstanceId, vnfmId);
308         if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
309             LOG.error("function=healVnf, msg=healVnf fail");
310             resp.setStatus(Constant.HTTP_INNERERROR);
311             return restJson.toString();
312         }
313
314         restJson.remove(Constant.RETCODE);
315         restJson.put("jobId", vnfInstanceId + "_put");
316         return restJson.toString();
317     }
318
319     private String getJobBody(JSONObject restJson) {
320         JSONObject responseJson = new JSONObject();
321         JSONObject jobInfoJson = new JSONObject();
322         JSONObject retJson = restJson.getJSONArray("data").getJSONObject(0);
323         jobInfoJson.put("jobId", retJson.getString("id"));
324         responseJson.put("progress", progressItem.get(retJson.getString(Constant.STATUS)));
325         responseJson.put("status", jobstatusItem.get(retJson.getString(Constant.STATUS)));
326         responseJson.put("errorCode", "null");
327         responseJson.put("responseId", progressItem.get(retJson.getString(Constant.STATUS)));
328         jobInfoJson.put("responsedescriptor", responseJson);
329         return jobInfoJson.toString();
330     }
331 }