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.io.IOException;
 
  20 import java.util.HashMap;
 
  23 import javax.servlet.http.HttpServletRequest;
 
  24 import javax.servlet.http.HttpServletResponse;
 
  25 import javax.ws.rs.Consumes;
 
  26 import javax.ws.rs.GET;
 
  27 import javax.ws.rs.POST;
 
  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;
 
  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.VnfmUtil;
 
  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;
 
  44 import net.sf.json.JSONObject;
 
  47  * Provide interfaces for instantiate or terminate VNF.
 
  51  * @version VFC 1.0 Aug 24, 2016
 
  53 @SuppressWarnings("unchecked")
 
  54 @Path("/api/huaweivnfmdriver/v1")
 
  55 @Consumes(MediaType.APPLICATION_JSON)
 
  56 @Produces(MediaType.APPLICATION_JSON)
 
  59     private static final Logger LOG = LoggerFactory.getLogger(VnfRoa.class);
 
  61     private VnfMgr vnfMgr;
 
  63     private static Map<String, String> progressItem;
 
  65     private static Map<String, String> jobstatusItem;
 
  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);
 
  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);
 
  83     public void setVnfMgr(VnfMgr vnfMgr) {
 
  91      * @param vnfInstanceId
 
  95      *            "vnfInstanceId":"5",
 
  98      *            "numberOfSteps":"1",
 
  99      *            "additionalParam":{}
 
 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         JSONObject jsonObject = VnfmJsonUtil.getJsonFromContexts(context);
 
 111         LOG.info("function=scaleVNF, msg=enter to scale a vnf. request body:" + jsonObject);
 
 112         JSONObject result = new JSONObject();
 
 113         if(null == jsonObject) {
 
 114             String msg = "the parameters do not meet the requirements,please check it!";
 
 115             LOG.error("function=scalVnf," + msg);
 
 116             resp.setStatus(Constant.HTTP_NOT_ACCEPTABLE);
 
 117             result.put("msg", msg);
 
 118             return result.toString();
 
 121         result = vnfMgr.scaleVNF(jsonObject, vnfmId, vnfInstanceId);
 
 122         LOG.info("function=scaleVNF,result=" + result.toString());
 
 123         if(result.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
 
 124             LOG.error("function=scaleVNF, msg=scaleVnf fail");
 
 125             resp.setStatus(Constant.HTTP_INNERERROR);
 
 126             return result.toString();
 
 128         return JSONObject.fromObject(result.getJSONObject("data")).toString();
 
 132      * Provide function for instantiate VNF
 
 142     @Path("/{vnfmId}/vnfs")
 
 143     public String addVnf(@Context HttpServletRequest context, @Context HttpServletResponse resp,
 
 144             @PathParam("vnfmId") String vnfmId) {
 
 145         LOG.warn("function=addVnf, msg=enter to add a vnf");
 
 146         JSONObject subJsonObject = VnfmJsonUtil.getJsonFromContexts(context);
 
 147         JSONObject restJson = new JSONObject();
 
 149         if(null == subJsonObject) {
 
 150             LOG.error("function=addVnf, msg=params are insufficient");
 
 151             resp.setStatus(Constant.HTTP_INNERERROR);
 
 152             return restJson.toString();
 
 154         LOG.info("addVnf request info from (LCM):" + subJsonObject);
 
 155         restJson = vnfMgr.addVnf(subJsonObject, vnfmId);
 
 157         if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
 
 158             LOG.error("function=addVnf, msg=addvnf fail");
 
 159             resp.setStatus(Constant.HTTP_INNERERROR);
 
 160             return restJson.toString();
 
 163         return JSONObject.fromObject(restJson.getJSONObject("data")).toString();
 
 167      * Provide function for terminate VNF
 
 172      * @param vnfInstanceId
 
 178     @Path("/{vnfmId}/vnfs/{vnfInstanceId}/terminate")
 
 179     public String delVnf(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp,
 
 180             @PathParam("vnfInstanceId") String vnfInstanceId, @Context HttpServletRequest context) {
 
 181         LOG.warn("function=delVnf, msg=enter to delete a vnf: vnfInstanceId: {}, vnfmId: {}", vnfInstanceId, vnfmId);
 
 182         JSONObject vnfObject = VnfmJsonUtil.getJsonFromContexts(context);
 
 183         JSONObject restJson = new JSONObject();
 
 185         if(StringUtils.isEmpty(vnfInstanceId) || StringUtils.isEmpty(vnfmId)) {
 
 186             resp.setStatus(Constant.HTTP_INNERERROR);
 
 187             return restJson.toString();
 
 190         restJson = vnfMgr.deleteVnf(vnfInstanceId, vnfmId, vnfObject);
 
 191         if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
 
 192             LOG.error("function=delVnf, msg=delVnf fail");
 
 193             resp.setStatus(Constant.HTTP_INNERERROR);
 
 194             return restJson.toString();
 
 197         return JSONObject.fromObject(restJson.getJSONObject("data")).toString();
 
 201      * Provide function for get VNF
 
 206      * @param vnfInstanceId
 
 211     @Path("/{vnfmId}/vnfs/{vnfInstanceId}")
 
 212     public String getVnf(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp,
 
 213             @PathParam("vnfInstanceId") String vnfInstanceId) throws IOException {
 
 214         LOG.warn("function=getVnf, msg=enter to get a vnf: vnfInstanceId: {}, vnfmId: {}", vnfInstanceId, vnfmId);
 
 215         JSONObject restJson = new JSONObject();
 
 217         if(StringUtils.isEmpty(vnfInstanceId) || StringUtils.isEmpty(vnfmId)) {
 
 218             resp.setStatus(Constant.HTTP_INNERERROR);
 
 219             return restJson.toString();
 
 222         restJson = vnfMgr.getVnf(vnfInstanceId, vnfmId);
 
 223         if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
 
 224             LOG.error("function=getVnf, msg=getVnf fail");
 
 225             resp.setStatus(Constant.HTTP_INNERERROR);
 
 226             return restJson.toString();
 
 229         restJson.remove(Constant.RETCODE);
 
 230         LOG.info("function=getVnf, restJson: {}", restJson);
 
 231         return restJson.toString();
 
 244     public String getVnfmById(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp) {
 
 245         LOG.warn("function=getVnfmById, vnfmId: {}", vnfmId);
 
 246         return VnfmUtil.getVnfmById(vnfmId).toString();
 
 250      * Provide function for get job
 
 261     @Path("/{vnfmId}/jobs_old/{jobId}")
 
 262     public String getJob(@PathParam("jobId") String jobId, @PathParam("vnfmId") String vnfmId,
 
 263             @Context HttpServletResponse resp, @QueryParam("@responseId") String responseId) {
 
 264         LOG.warn("function=getJob, msg=enter to get a job: jobId: {}, responseId: {}", jobId, responseId);
 
 265         JSONObject restJson = new JSONObject();
 
 267         if(StringUtils.isEmpty(jobId) || StringUtils.isEmpty(vnfmId)) {
 
 268             resp.setStatus(Constant.HTTP_INNERERROR);
 
 269             return restJson.toString();
 
 272         restJson = vnfMgr.getJob(jobId, vnfmId);
 
 273         if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
 
 274             LOG.error("function=getJob, msg=getJob fail");
 
 275             resp.setStatus(Constant.HTTP_INNERERROR);
 
 276             return restJson.toString();
 
 279         return getJobBody(restJson);
 
 287      *            "action": "vmReset",
 
 289      *            "vmid": "804cca71 - 9ae9 - 4511 - 8e30 - d1387718caff",
 
 290      *            "vduid": "vdu_100",
 
 291      *            "vmname": "ZTE_SSS_111_PP_2_L"
 
 296      * @param vnfInstanceId
 
 301     @Path("/{vnfmId}/vnfs/{vnfInstanceId}/heal")
 
 302     public String healVnf(@Context HttpServletRequest context, @Context HttpServletResponse resp,
 
 303             @PathParam("vnfmId") String vnfmId, @PathParam("vnfInstanceId") String vnfInstanceId) {
 
 304         LOG.warn("function=healVnf, msg=enter to heal a vnf: vnfInstanceId: {}, vnfmId: {}", vnfInstanceId, vnfmId);
 
 305         JSONObject restJson = new JSONObject();
 
 306         JSONObject jsonObject = VnfmJsonUtil.getJsonFromContexts(context);
 
 308         if(StringUtils.isEmpty(vnfInstanceId) || StringUtils.isEmpty(vnfmId)) {
 
 309             resp.setStatus(Constant.HTTP_INNERERROR);
 
 310             restJson.put("message", "vnfmId is null or vnfInstanceId is null");
 
 311             return restJson.toString();
 
 314         restJson = vnfMgr.healVnf(jsonObject, vnfInstanceId, vnfmId);
 
 315         if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
 
 316             LOG.error("function=healVnf, msg=healVnf fail");
 
 317             resp.setStatus(Constant.HTTP_INNERERROR);
 
 318             return restJson.toString();
 
 321         restJson.remove(Constant.RETCODE);
 
 322         restJson.put("jobId", vnfInstanceId + "_post");
 
 323         return restJson.toString();
 
 326     private String getJobBody(JSONObject restJson) {
 
 327         LOG.warn("function=getJobBody, restJson: {}", restJson);
 
 328         JSONObject responseJson = new JSONObject();
 
 329         JSONObject jobInfoJson = new JSONObject();
 
 330         JSONObject retJson = restJson.getJSONArray("data").getJSONObject(0);
 
 331         jobInfoJson.put("jobId", retJson.getString("id"));
 
 332         responseJson.put("progress", progressItem.get(retJson.getString(Constant.STATUS)));
 
 333         responseJson.put("status", jobstatusItem.get(retJson.getString(Constant.STATUS)));
 
 334         responseJson.put("errorCode", "null");
 
 335         responseJson.put("responseId", progressItem.get(retJson.getString(Constant.STATUS)));
 
 336         if(retJson.getString(Constant.STATUS) == null || retJson.getString(Constant.STATUS) == "null") {
 
 337             responseJson.put("progress", "100");
 
 338             responseJson.put("status", "finished");
 
 339             responseJson.put("errorCode", "null");
 
 340             responseJson.put("responseId", "100");
 
 342         jobInfoJson.put("responsedescriptor", responseJson);
 
 343         LOG.warn("function=getJobBody, jobInfoJson: {}", jobInfoJson);
 
 344         return jobInfoJson.toString();
 
 349      * Query vms info from vnfm
 
 356     @Path("/{vnfmId}/vms")
 
 357     public String getVms(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp) {
 
 358         LOG.info("function=getVms, msg=enter to get vms: vnfmId: {}", vnfmId);
 
 359         JSONObject restJson = vnfMgr.getVmsFromVnfm(vnfmId, null);
 
 360         LOG.info("function=getVms, restJson: {}", restJson);
 
 361         return restJson.getString("data");
 
 366      * Query vms info by vnfId from vnfm
 
 369      * @param vnfInstanceId
 
 374     @Path("/{vnfmId}/{vnfInstanceId}/vms")
 
 375     public String getVmsByVnfId(@PathParam("vnfmId") String vnfmId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 376             @Context HttpServletResponse resp) {
 
 377         LOG.info("function=getVmsByVnfId, msg=enter to get vms: vnfmId: {}", vnfmId);
 
 378         JSONObject restJson = vnfMgr.getVmsFromVnfm(vnfmId, vnfInstanceId);
 
 379         LOG.info("function=getVmsByVnfId, restJson: {}", restJson);
 
 380         return restJson.getString("data");
 
 385      * Query job status from vnfm version 18.1
 
 394     @Path("/{vnfmId}/jobs/{jobId}")
 
 395     public String getJobFromVnfm(@PathParam("jobId") String jobId, @PathParam("vnfmId") String vnfmId,
 
 396             @Context HttpServletResponse resp, @QueryParam("@responseId") String responseId) {
 
 397         LOG.warn("function=getJobFromVnfm, msg=enter to get a job: jobId: {}, responseId: {}", jobId, responseId);
 
 398         JSONObject restJson = vnfMgr.getJobFromVnfm(jobId, vnfmId);
 
 400         if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
 
 401             LOG.error("function=getJobFromVnfm, msg=getJobFromVnfm fail");
 
 402             resp.setStatus(Constant.HTTP_INNERERROR);
 
 403             return restJson.toString();
 
 406         return vnfMgr.transferToLcm(restJson);