2 * Copyright 2016-2017 Huawei Technologies Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.rest;
19 import java.util.HashMap;
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.Path;
28 import javax.ws.rs.PathParam;
29 import javax.ws.rs.Produces;
30 import javax.ws.rs.QueryParam;
31 import javax.ws.rs.core.Context;
32 import javax.ws.rs.core.MediaType;
34 import org.apache.commons.collections.map.UnmodifiableMap;
35 import org.apache.commons.lang3.StringUtils;
36 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.VnfmJsonUtil;
37 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.constant.Constant;
38 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.process.VnfMgr;
39 import org.openo.baseservice.remoteservice.exception.ServiceException;
40 import org.slf4j.Logger;
41 import org.slf4j.LoggerFactory;
43 import net.sf.json.JSONObject;
46 * Provide interfaces for instantiate or terminate VNF.
50 * @version NFVO 0.5 Aug 24, 2016
52 @SuppressWarnings("unchecked")
53 @Path("/openoapi/hwvnfm/v1")
54 @Consumes(MediaType.APPLICATION_JSON)
55 @Produces(MediaType.APPLICATION_JSON)
58 private static final Logger LOG = LoggerFactory.getLogger(VnfRoa.class);
60 private VnfMgr vnfMgr;
62 private static Map<String, String> PROGRESSITEM;
64 private static Map<String, String> JOBSTATUSITEM;
67 Map<String, String> map = new HashMap<>();
68 map.put("Building", "50");
69 map.put("Active", "100");
70 map.put("Stopped", "50");
71 map.put("Error", "100");
72 PROGRESSITEM = UnmodifiableMap.decorate(map);
74 map = new HashMap<>();
75 map.put("Building", "processing");
76 map.put("Active", "finished");
77 map.put("Stopped", "processing");
78 map.put("Error", "error");
79 JOBSTATUSITEM = UnmodifiableMap.decorate(map);
82 public void setVnfMgr(VnfMgr vnfMgr) {
91 * "vnfInstanceId":"5",
94 * "numberOfSteps":"1",
95 * "additionalParam":{}
103 * @throws ServiceException
106 @Path("/{vnfmId}/vnfs/{vnfInstanceId}/scale")
107 public String scaleVnf(@Context HttpServletRequest context, @Context HttpServletResponse resp,
108 @PathParam("vnfmId") String vnfmId, @PathParam("vnfInstanceId") String vnfInstanceId)
109 throws ServiceException {
110 JSONObject jsonObject = VnfmJsonUtil.getJsonFromContexts(context);
111 LOG.info("function=scaleVNF, msg=enter to scale a vnf. request body:" + jsonObject);
112 JSONObject result = new JSONObject();
114 if(null == jsonObject) {
115 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();
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();
129 return JSONObject.fromObject(result.getJSONObject("data")).toString();
133 * Provide function for instantiate VNF
140 * @throws ServiceException
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();
151 if(null == subJsonObject) {
152 LOG.error("function=addVnf, msg=params are insufficient");
153 resp.setStatus(Constant.HTTP_INNERERROR);
154 return restJson.toString();
156 LOG.info("addVnf request info from (LCM):" + subJsonObject);
157 restJson = vnfMgr.addVnf(subJsonObject, vnfmId);
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();
165 return JSONObject.fromObject(restJson.getJSONObject("data")).toString();
169 * Provide function for terminate VNF
174 * @param vnfInstanceId
177 * @throws ServiceException
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();
189 if(StringUtils.isEmpty(vnfInstanceId) || StringUtils.isEmpty(vnfmId)) {
190 resp.setStatus(Constant.HTTP_INNERERROR);
191 return restJson.toString();
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();
201 return JSONObject.fromObject(restJson.getJSONObject("data")).toString();
205 * Provide function for get VNF
210 * @param vnfInstanceId
213 * @throws ServiceException
217 @Path("/{vnfmId}/vnfs/{vnfInstanceId}")
218 public String getVnf(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp,
219 @PathParam("vnfInstanceId") String vnfInstanceId, @Context HttpServletRequest context)
220 throws ServiceException {
221 LOG.warn("function=getVnf, msg=enter to get a vnf: vnfInstanceId: {}, vnfmId: {}", vnfInstanceId, vnfmId);
222 JSONObject restJson = new JSONObject();
224 if(StringUtils.isEmpty(vnfInstanceId) || StringUtils.isEmpty(vnfmId)) {
225 resp.setStatus(Constant.HTTP_INNERERROR);
226 return restJson.toString();
229 restJson = vnfMgr.getVnf(vnfInstanceId, vnfmId);
230 if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
231 LOG.error("function=getVnf, msg=getVnf fail");
232 resp.setStatus(Constant.HTTP_INNERERROR);
233 return restJson.toString();
236 restJson.remove(Constant.RETCODE);
237 return restJson.toString();
241 * Provide function for get job
249 * @throws ServiceException
253 @Path("/{vnfmId}/jobs/{jobId}")
254 public String getJob(@PathParam("jobId") String jobId, @PathParam("vnfmId") String vnfmId,
255 @Context HttpServletResponse resp, @QueryParam("@responseId") String responseId) throws ServiceException {
256 LOG.warn("function=getJob, msg=enter to get a job: jobId: {}", jobId);
257 JSONObject restJson = new JSONObject();
259 if(StringUtils.isEmpty(jobId) || StringUtils.isEmpty(vnfmId)) {
260 resp.setStatus(Constant.HTTP_INNERERROR);
261 return restJson.toString();
264 restJson = vnfMgr.getJob(jobId, vnfmId);
265 if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
266 LOG.error("function=getJob, msg=getJob fail");
267 resp.setStatus(Constant.HTTP_INNERERROR);
268 return restJson.toString();
271 return getJobBody(restJson);
274 private String getJobBody(JSONObject restJson) {
275 JSONObject responseJson = new JSONObject();
276 JSONObject jobInfoJson = new JSONObject();
277 JSONObject retJson = restJson.getJSONArray("data").getJSONObject(0);
278 jobInfoJson.put("jobId", retJson.getString("id"));
279 responseJson.put("progress", PROGRESSITEM.get(retJson.getString(Constant.STATUS)));
280 responseJson.put("status", JOBSTATUSITEM.get(retJson.getString(Constant.STATUS)));
281 responseJson.put("errorCode", "null");
282 responseJson.put("responseId", PROGRESSITEM.get(retJson.getString(Constant.STATUS)));
283 jobInfoJson.put("responsedescriptor", responseJson);
284 return jobInfoJson.toString();