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.common.VnfmUtil;
 
  38 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.constant.Constant;
 
  39 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.process.VnfMgr;
 
  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 VFC 1.0 Aug 24, 2016
 
  52 @SuppressWarnings("unchecked")
 
  53 @Path("/api/huaweivnfmdriver/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) {
 
  90      * @param vnfInstanceId
 
  94      *            "vnfInstanceId":"5",
 
  97      *            "numberOfSteps":"1",
 
  98      *            "additionalParam":{}
 
 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         JSONObject jsonObject = VnfmJsonUtil.getJsonFromContexts(context);
 
 110         LOG.info("function=scaleVNF, msg=enter to scale a vnf. request body:" + jsonObject);
 
 111         JSONObject result = new JSONObject();
 
 112         if(null == jsonObject) {
 
 113             String msg = "the parameters do not meet the requirements,please check it!";
 
 114             LOG.error("function=scalVnf," + msg);
 
 115             resp.setStatus(Constant.HTTP_NOT_ACCEPTABLE);
 
 116             result.put("msg", msg);
 
 117             return result.toString();
 
 120         result = vnfMgr.scaleVNF(jsonObject, vnfmId, vnfInstanceId);
 
 121         LOG.info("function=scaleVNF,result=" + result.toString());
 
 122         if(result.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
 
 123             LOG.error("function=scaleVNF, msg=scaleVnf fail");
 
 124             resp.setStatus(Constant.HTTP_INNERERROR);
 
 125             return result.toString();
 
 127         return JSONObject.fromObject(result.getJSONObject("data")).toString();
 
 131      * Provide function for instantiate VNF
 
 141     @Path("/{vnfmId}/vnfs")
 
 142     public String addVnf(@Context HttpServletRequest context, @Context HttpServletResponse resp,
 
 143             @PathParam("vnfmId") String vnfmId) {
 
 144         LOG.warn("function=addVnf, msg=enter to add a vnf");
 
 145         JSONObject subJsonObject = VnfmJsonUtil.getJsonFromContexts(context);
 
 146         JSONObject restJson = new JSONObject();
 
 148         if(null == subJsonObject) {
 
 149             LOG.error("function=addVnf, msg=params are insufficient");
 
 150             resp.setStatus(Constant.HTTP_INNERERROR);
 
 151             return restJson.toString();
 
 153         LOG.info("addVnf request info from (LCM):" + subJsonObject);
 
 154         restJson = vnfMgr.addVnf(subJsonObject, vnfmId);
 
 156         if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
 
 157             LOG.error("function=addVnf, msg=addvnf fail");
 
 158             resp.setStatus(Constant.HTTP_INNERERROR);
 
 159             return restJson.toString();
 
 162         return JSONObject.fromObject(restJson.getJSONObject("data")).toString();
 
 166      * Provide function for terminate VNF
 
 171      * @param vnfInstanceId
 
 177     @Path("/{vnfmId}/vnfs/{vnfInstanceId}/terminate")
 
 178     public String delVnf(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp,
 
 179             @PathParam("vnfInstanceId") String vnfInstanceId, @Context HttpServletRequest context) {
 
 180         LOG.warn("function=delVnf, msg=enter to delete a vnf: vnfInstanceId: {}, vnfmId: {}", vnfInstanceId, vnfmId);
 
 181         JSONObject vnfObject = VnfmJsonUtil.getJsonFromContexts(context);
 
 182         JSONObject restJson = new JSONObject();
 
 184         if(StringUtils.isEmpty(vnfInstanceId) || StringUtils.isEmpty(vnfmId)) {
 
 185             resp.setStatus(Constant.HTTP_INNERERROR);
 
 186             return restJson.toString();
 
 189         restJson = vnfMgr.deleteVnf(vnfInstanceId, vnfmId, vnfObject);
 
 190         if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
 
 191             LOG.error("function=delVnf, msg=delVnf fail");
 
 192             resp.setStatus(Constant.HTTP_INNERERROR);
 
 193             return restJson.toString();
 
 196         return JSONObject.fromObject(restJson.getJSONObject("data")).toString();
 
 200      * Provide function for get VNF
 
 205      * @param vnfInstanceId
 
 210     @Path("/{vnfmId}/vnfs/{vnfInstanceId}")
 
 211     public String getVnf(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp,
 
 212             @PathParam("vnfInstanceId") String vnfInstanceId) {
 
 213         LOG.warn("function=getVnf, msg=enter to get a vnf: vnfInstanceId: {}, vnfmId: {}", vnfInstanceId, vnfmId);
 
 214         JSONObject restJson = new JSONObject();
 
 216         if(StringUtils.isEmpty(vnfInstanceId) || StringUtils.isEmpty(vnfmId)) {
 
 217             resp.setStatus(Constant.HTTP_INNERERROR);
 
 218             return restJson.toString();
 
 221         restJson = vnfMgr.getVnf(vnfInstanceId, vnfmId);
 
 222         if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
 
 223             LOG.error("function=getVnf, msg=getVnf fail");
 
 224             resp.setStatus(Constant.HTTP_INNERERROR);
 
 225             return restJson.toString();
 
 228         restJson.remove(Constant.RETCODE);
 
 229         return restJson.toString();
 
 242     public String getVnfmById(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp) {
 
 243         LOG.warn("function=getVnfmById, vnfmId: {}", vnfmId);
 
 244         return VnfmUtil.getVnfmById(vnfmId).toString();
 
 248      * Provide function for get job
 
 259     @Path("/{vnfmId}/jobs/{jobId}")
 
 260     public String getJob(@PathParam("jobId") String jobId, @PathParam("vnfmId") String vnfmId,
 
 261             @Context HttpServletResponse resp, @QueryParam("@responseId") String responseId) {
 
 262         LOG.warn("function=getJob, msg=enter to get a job: jobId: {}, responseId: {}", jobId, responseId);
 
 263         JSONObject restJson = new JSONObject();
 
 265         if(StringUtils.isEmpty(jobId) || StringUtils.isEmpty(vnfmId)) {
 
 266             resp.setStatus(Constant.HTTP_INNERERROR);
 
 267             return restJson.toString();
 
 270         restJson = vnfMgr.getJob(jobId, vnfmId);
 
 271         if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
 
 272             LOG.error("function=getJob, msg=getJob fail");
 
 273             resp.setStatus(Constant.HTTP_INNERERROR);
 
 274             return restJson.toString();
 
 277         return getJobBody(restJson);
 
 285      *            "action": "vmReset",
 
 287      *            "vmid": "804cca71 - 9ae9 - 4511 - 8e30 - d1387718caff",
 
 288      *            "vduid": "vdu_100",
 
 289      *            "vmname": "ZTE_SSS_111_PP_2_L"
 
 294      * @param vnfInstanceId
 
 299     @Path("/{vnfmId}/vnfs/{vnfInstanceId}/heal")
 
 300     public String healVnf(@Context HttpServletRequest context, @Context HttpServletResponse resp,
 
 301             @PathParam("vnfmId") String vnfmId, @PathParam("vnfInstanceId") String vnfInstanceId) {
 
 302         LOG.warn("function=healVnf, msg=enter to heal a vnf: vnfInstanceId: {}, vnfmId: {}", vnfInstanceId, vnfmId);
 
 303         JSONObject restJson = new JSONObject();
 
 304         JSONObject jsonObject = VnfmJsonUtil.getJsonFromContexts(context);
 
 306         if(StringUtils.isEmpty(vnfInstanceId) || StringUtils.isEmpty(vnfmId)) {
 
 307             resp.setStatus(Constant.HTTP_INNERERROR);
 
 308             restJson.put("message", "vnfmId is null or vnfInstanceId is null");
 
 309             return restJson.toString();
 
 312         restJson = vnfMgr.healVnf(jsonObject, vnfInstanceId, vnfmId);
 
 313         if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
 
 314             LOG.error("function=healVnf, msg=healVnf fail");
 
 315             resp.setStatus(Constant.HTTP_INNERERROR);
 
 316             return restJson.toString();
 
 319         restJson.remove(Constant.RETCODE);
 
 320         restJson.put("jobId", vnfInstanceId + "_post");
 
 321         return restJson.toString();
 
 324     private String getJobBody(JSONObject restJson) {
 
 325         LOG.warn("function=getJobBody, restJson: {}", restJson);
 
 326         JSONObject responseJson = new JSONObject();
 
 327         JSONObject jobInfoJson = new JSONObject();
 
 328         JSONObject retJson = restJson.getJSONArray("data").getJSONObject(0);
 
 329         jobInfoJson.put("jobId", retJson.getString("id"));
 
 330         responseJson.put("progress", progressItem.get(retJson.getString(Constant.STATUS)));
 
 331         responseJson.put("status", jobstatusItem.get(retJson.getString(Constant.STATUS)));
 
 332         responseJson.put("errorCode", "null");
 
 333         responseJson.put("responseId", progressItem.get(retJson.getString(Constant.STATUS)));
 
 334         if(retJson.getString(Constant.STATUS) == null || retJson.getString(Constant.STATUS) == "null") {
 
 335             responseJson.put("progress", "100");
 
 336             responseJson.put("status", "finished");
 
 337             responseJson.put("errorCode", "null");
 
 338             responseJson.put("responseId", "100");
 
 340         jobInfoJson.put("responsedescriptor", responseJson);
 
 341         LOG.warn("function=getJobBody, jobInfoJson: {}", jobInfoJson);
 
 342         return jobInfoJson.toString();
 
 347      * Query vms info from vnfm
 
 354     @Path("/{vnfmId}/vms")
 
 355     public String getVms(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp) {
 
 356         LOG.info("function=getVms, msg=enter to get vms: vnfmId: {}", vnfmId);
 
 357         JSONObject restJson = vnfMgr.getVmsFromVnfm(vnfmId, null);
 
 358         LOG.info("function=getVms, restJson: {}", restJson);
 
 359         return restJson.getString("data");
 
 364      * Query vms info by vnfId from vnfm
 
 367      * @param vnfInstanceId
 
 372     @Path("/{vnfmId}/{vnfInstanceId}/vms")
 
 373     public String getVmsByVnfId(@PathParam("vnfmId") String vnfmId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 374             @Context HttpServletResponse resp) {
 
 375         LOG.info("function=getVmsByVnfId, msg=enter to get vms: vnfmId: {}", vnfmId);
 
 376         JSONObject restJson = vnfMgr.getVmsFromVnfm(vnfmId, vnfInstanceId);
 
 377         LOG.info("function=getVmsByVnfId, restJson: {}", restJson);
 
 378         return restJson.getString("data");
 
 383      * Query job status from vnfm version 18.1
 
 391     public String getJobFromVnfm(@PathParam("jobId") String jobId, @PathParam("vnfmId") String vnfmId,
 
 392             @Context HttpServletResponse resp, @QueryParam("@responseId") String responseId) {
 
 393         LOG.warn("function=getJobFromVnfm, msg=enter to get a job: jobId: {}, responseId: {}", jobId, responseId);
 
 394         JSONObject restJson = vnfMgr.getJobFromVnfm(jobId, vnfmId);
 
 396         if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
 
 397             LOG.error("function=getJobFromVnfm, msg=getJobFromVnfm fail");
 
 398             resp.setStatus(Constant.HTTP_INNERERROR);
 
 399             return restJson.toString();
 
 402         return vnfMgr.transferToLcm(restJson);