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.process;
 
  20 import java.util.concurrent.ConcurrentHashMap;
 
  22 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.VnfmUtil;
 
  23 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.adapter.impl.AdapterResourceManager;
 
  24 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.constant.Constant;
 
  25 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.csm.vnf.VnfMgrVnfm;
 
  26 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.dao.inf.VnfmDao;
 
  27 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.entity.Vnfm;
 
  28 import org.slf4j.Logger;
 
  29 import org.slf4j.LoggerFactory;
 
  31 import net.sf.json.JSONException;
 
  32 import net.sf.json.JSONObject;
 
  35  * Provide function for instantiate or terminate VNF
 
  39  * @version VFC 1.0 Aug 24, 2016
 
  43     private static final Logger LOG = LoggerFactory.getLogger(VnfMgr.class);
 
  45     private VnfmDao vnfmDao;
 
  47     public void setVnfmDao(VnfmDao vnfmDao) {
 
  48         this.vnfmDao = vnfmDao;
 
  56      *            "vnfInstanceId":"5",
 
  59      *            "numberOfSteps":"1",
 
  60      *            "additionalParam":{}
 
  63      * @param vnfInstanceId
 
  66     public JSONObject scaleVNF(JSONObject vnfObject, String vnfmId, String vnfInstanceId) {
 
  67         JSONObject restJson = new JSONObject();
 
  68         restJson.put(Constant.RETCODE, Constant.REST_FAIL);
 
  71             if(vnfObject.isNullObject() || vnfObject.isEmpty()) {
 
  75             JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
 
  76             LOG.info("vnfm info:" + vnfmObjcet);
 
  77             if(vnfmObjcet.isNullObject()) {
 
  78                 LOG.error("function=scaleVNF,can't find vnfm from db by vnfmId=" + vnfmId);
 
  81             restJson = (new VnfMgrVnfm()).scaleVnf(vnfObject, vnfmObjcet, vnfmId, vnfInstanceId);
 
  82         } catch(JSONException e) {
 
  83             LOG.error("function=scaleVNF, msg=JSONException occurs, e={}.", e);
 
  90      * Provide function for instantiate VNF
 
  98     public JSONObject addVnf(JSONObject vnfObject, String vnfmId) {
 
  99         JSONObject restJson = new JSONObject();
 
 100         restJson.put(Constant.RETCODE, Constant.REST_FAIL);
 
 103             if(vnfObject.isNullObject() || vnfObject.isEmpty()) {
 
 107             JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
 
 109             if(vnfmObjcet.isNullObject()) {
 
 113             Map<String, String> conMap = new ConcurrentHashMap<>(Constant.DEFAULT_COLLECTION_SIZE);
 
 114             conMap.put("csarid", vnfObject.getString("vnfPackageId"));
 
 115             conMap.put("vnfmid", vnfmId);
 
 116             conMap.put("vnfDescriptorId", vnfObject.getString("vnfDescriptorId"));
 
 118             JSONObject resObjcet = (new AdapterResourceManager()).uploadVNFPackage(null, conMap);
 
 120             if(resObjcet.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
 
 124             JSONObject csmBody = transferVnfBody(vnfObject, resObjcet, vnfmId);
 
 125             restJson = (new VnfMgrVnfm()).createVnf(csmBody, vnfmObjcet);
 
 126             saveVnfInfo(restJson, resObjcet);
 
 127         } catch(JSONException e) {
 
 128             LOG.error("function=addVnf, msg=JSONException occurs, e={}.", e);
 
 135      * Provide function for terminate VNF
 
 144     public JSONObject deleteVnf(String vnfId, String vnfmId, JSONObject vnfObject) {
 
 145         LOG.warn("function=deleteVnf ,msg=enter to delete a vnf, vnfId:{}, vnfmId:{}", vnfId, vnfmId);
 
 146         JSONObject restJson = new JSONObject();
 
 147         restJson.put(Constant.RETCODE, Constant.REST_FAIL);
 
 149             JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
 
 150             if(vnfmObjcet.isNullObject()) {
 
 151                 LOG.error("function=deleteVnf, msg=vnfm not exists, vnfmId: {}", vnfmId);
 
 155             restJson = (new VnfMgrVnfm()).removeVnf(vnfmObjcet, vnfId, vnfObject);
 
 156         } catch(JSONException e) {
 
 157             LOG.error("function=deleteVnf, msg=JSONException occurs, e={}.", e);
 
 163      * Provide function for get VNF
 
 171     public JSONObject getVnf(String vnfId, String vnfmId) {
 
 172         LOG.warn("function=getVnf ,msg=enter to get a vnf, vnfId:{}, vnfmId:{}", vnfId, vnfmId);
 
 173         JSONObject restJson = new JSONObject();
 
 174         restJson.put(Constant.RETCODE, Constant.REST_FAIL);
 
 176             JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
 
 177             if(vnfmObjcet.isNullObject()) {
 
 178                 LOG.error("function=getVnf, msg=vnfm not exists, vnfmId: {}", vnfmId);
 
 182             restJson = (new VnfMgrVnfm()).getVnf(vnfmObjcet, vnfId);
 
 184             return restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL ? restJson : getVnfBody(restJson);
 
 186         } catch(JSONException e) {
 
 187             LOG.error("function=getVnf, msg=JSONException occurs, e={}.", e);
 
 188             restJson.put(Constant.RETCODE, Constant.REST_FAIL);
 
 193     private JSONObject getVnfBody(JSONObject restJson) {
 
 195             JSONObject vnfInfoJson = new JSONObject();
 
 196             JSONObject basicInfoJson = new JSONObject();
 
 198             JSONObject retJson = restJson.getJSONArray("data").getJSONObject(0);
 
 200             basicInfoJson.put("vnfInstanceId", retJson.getString("id"));
 
 201             basicInfoJson.put("vnfInstanceName", retJson.getString("vapp_name"));
 
 202             basicInfoJson.put("vnfInstanceDescription", "vFW");
 
 204             Vnfm vnfm = vnfmDao.getVnfmById(retJson.getString("id"));
 
 205             basicInfoJson.put(Constant.VNFDID, vnfm == null ? "" : vnfm.getVnfdId());
 
 206             basicInfoJson.put("vnfdPackageId", vnfm == null ? "" : vnfm.getVnfPackageId());
 
 207             basicInfoJson.put("version", vnfm == null ? "" : vnfm.getVersion());
 
 208             basicInfoJson.put("vnfProvider", "hw");
 
 209             basicInfoJson.put("vnfType", retJson.get("vapp_type"));
 
 210             basicInfoJson.put("vnfStatus", retJson.getString(Constant.STATUS));
 
 212             vnfInfoJson.put("vnfInfo", basicInfoJson);
 
 213             vnfInfoJson.put(Constant.RETCODE, Constant.REST_SUCCESS);
 
 215         } catch(JSONException e) {
 
 216             LOG.error("function=getVnf, msg=JSONException occurs, e={}.", e);
 
 217             restJson.put(Constant.RETCODE, Constant.REST_FAIL);
 
 219         } catch(IndexOutOfBoundsException e) {
 
 220             LOG.error("function=getVnf, msg=IndexOutOfBoundsException occurs, e={}.", e);
 
 221             restJson.put(Constant.RETCODE, Constant.REST_FAIL);
 
 226     @SuppressWarnings("unchecked")
 
 227     private JSONObject transferVnfBody(JSONObject vnfObject, JSONObject resObject, String vnfmId) {
 
 228         JSONObject restJson = new JSONObject();
 
 229         JSONObject vappIfno = new JSONObject();
 
 230         restJson.put("vnfd_id", resObject.getString(Constant.VNFDID));
 
 231         restJson.put("plan_id", resObject.getOrDefault("planId", ""));
 
 232         restJson.put("plan_name", resObject.getOrDefault("planName", ""));
 
 233         restJson.put("vapp_name", vnfObject.get("vnfInstanceName"));
 
 234         restJson.put("project_id", vnfmId);
 
 235         restJson.put("parameters", resObject.getJSONObject("parameters"));
 
 236         restJson.put("nfvo_id", "");
 
 237         restJson.put("location", "");
 
 238         restJson.put("vnfm_id", vnfmId);
 
 239         vappIfno.put("vapp_info", restJson);
 
 244      * Provide function for get job
 
 252     public JSONObject getJob(String jobId, String vnfmId) {
 
 253         LOG.warn("function=getJob ,msg=enter to get a job, vnfId:{}", jobId);
 
 254         JSONObject restJson = new JSONObject();
 
 255         restJson.put(Constant.RETCODE, Constant.REST_FAIL);
 
 257             JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
 
 258             if(vnfmObjcet.isNullObject()) {
 
 259                 LOG.error("function=getJob, msg=vnfm not exists, vnfmId: {}", vnfmId);
 
 263             restJson = (new VnfMgrVnfm()).getJob(vnfmObjcet, jobId);
 
 265         } catch(JSONException e) {
 
 266             LOG.error("function=getJob, msg=JSONException occurs, e={}.", e);
 
 267             restJson.put(Constant.RETCODE, Constant.REST_FAIL);
 
 273      * Provide function for save vnfInfo
 
 280     public void saveVnfInfo(JSONObject vnfObject, JSONObject resObject) {
 
 281         LOG.warn("function=saveVnfInfo , vnfObject:{}", vnfObject);
 
 282         if(vnfObject.getInt(Constant.RETCODE) == Constant.REST_SUCCESS) {
 
 283             Vnfm info = new Vnfm();
 
 284             info.setId(vnfObject.getJSONObject("data").getString("vnfInstanceId"));
 
 285             info.setVersion(resObject.getString("vnfdVersion"));
 
 286             info.setVnfdId(resObject.getString(Constant.VNFDID));
 
 287             info.setVnfPackageId("");
 
 289                 vnfmDao.insertVnfm(info);
 
 290             } catch(Exception e) {
 
 291                 LOG.error("function=saveVnfInfo, msg=ServiceException occurs, e={}.", e);
 
 300      * @param vnfInstanceId
 
 305     public JSONObject healVnf(JSONObject jsonObject, String vnfInstanceId, String vnfmId) {
 
 306         JSONObject restJson = new JSONObject();
 
 307         restJson.put(Constant.RETCODE, Constant.REST_FAIL);
 
 309         if(jsonObject.isNullObject() || jsonObject.isEmpty()) {
 
 313         JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
 
 314         LOG.info("vnfm info:" + vnfmObjcet);
 
 315         if(vnfmObjcet.isNullObject()) {
 
 316             LOG.error("function=scaleVNF,can't find vnfm from db by vnfmId=" + vnfmId);
 
 319         restJson = (new VnfMgrVnfm()).healVnf(jsonObject, vnfmObjcet, vnfmId, vnfInstanceId);