Merge "Fix CVE-2018-1271, CVE-2018-10237"
[vfc/nfvo/driver/vnfm/svnfm.git] / huawei / vnfmadapter / VnfmadapterService / service / src / main / java / org / onap / vfc / nfvo / vnfm / svnfm / vnfmadapter / service / rest / VnfRoa.java
index 6ed28a8..e56eef1 100644 (file)
@@ -16,6 +16,7 @@
 
 package org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.rest;
 
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -33,10 +34,8 @@ import javax.ws.rs.core.MediaType;
 
 import org.apache.commons.collections.map.UnmodifiableMap;
 import org.apache.commons.lang3.StringUtils;
-import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.ResultRequestUtil;
 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.VnfmJsonUtil;
 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.VnfmUtil;
-import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.restclient.ServiceException;
 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.constant.Constant;
 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.process.VnfMgr;
 import org.slf4j.Logger;
@@ -103,13 +102,11 @@ public class VnfRoa {
      *         {
      *         "jobId":"1"
      *         }
-     * @throws ServiceException
      */
     @POST
     @Path("/{vnfmId}/vnfs/{vnfInstanceId}/scale")
     public String scaleVnf(@Context HttpServletRequest context, @Context HttpServletResponse resp,
-            @PathParam("vnfmId") String vnfmId, @PathParam("vnfInstanceId") String vnfInstanceId)
-            throws ServiceException {
+            @PathParam("vnfmId") String vnfmId, @PathParam("vnfInstanceId") String vnfInstanceId) {
         JSONObject jsonObject = VnfmJsonUtil.getJsonFromContexts(context);
         LOG.info("function=scaleVNF, msg=enter to scale a vnf. request body:" + jsonObject);
         JSONObject result = new JSONObject();
@@ -139,13 +136,12 @@ public class VnfRoa {
      * @param resp
      * @param vnfmId
      * @return
-     * @throws ServiceException
      * @since VFC 1.0
      */
     @POST
     @Path("/{vnfmId}/vnfs")
     public String addVnf(@Context HttpServletRequest context, @Context HttpServletResponse resp,
-            @PathParam("vnfmId") String vnfmId) throws ServiceException {
+            @PathParam("vnfmId") String vnfmId) {
         LOG.warn("function=addVnf, msg=enter to add a vnf");
         JSONObject subJsonObject = VnfmJsonUtil.getJsonFromContexts(context);
         JSONObject restJson = new JSONObject();
@@ -176,14 +172,12 @@ public class VnfRoa {
      * @param vnfInstanceId
      * @param context
      * @return
-     * @throws ServiceException
      * @since VFC 1.0
      */
     @POST
     @Path("/{vnfmId}/vnfs/{vnfInstanceId}/terminate")
     public String delVnf(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp,
-            @PathParam("vnfInstanceId") String vnfInstanceId, @Context HttpServletRequest context)
-            throws ServiceException {
+            @PathParam("vnfInstanceId") String vnfInstanceId, @Context HttpServletRequest context) {
         LOG.warn("function=delVnf, msg=enter to delete a vnf: vnfInstanceId: {}, vnfmId: {}", vnfInstanceId, vnfmId);
         JSONObject vnfObject = VnfmJsonUtil.getJsonFromContexts(context);
         JSONObject restJson = new JSONObject();
@@ -210,15 +204,13 @@ public class VnfRoa {
      * @param vnfmId
      * @param resp
      * @param vnfInstanceId
-     * @param context
      * @return
-     * @throws ServiceException
      * @since VFC 1.0
      */
     @GET
     @Path("/{vnfmId}/vnfs/{vnfInstanceId}")
     public String getVnf(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp,
-            @PathParam("vnfInstanceId") String vnfInstanceId) throws ServiceException {
+            @PathParam("vnfInstanceId") String vnfInstanceId) throws IOException {
         LOG.warn("function=getVnf, msg=enter to get a vnf: vnfInstanceId: {}, vnfmId: {}", vnfInstanceId, vnfmId);
         JSONObject restJson = new JSONObject();
 
@@ -235,6 +227,7 @@ public class VnfRoa {
         }
 
         restJson.remove(Constant.RETCODE);
+        LOG.info("function=getVnf, restJson: {}", restJson);
         return restJson.toString();
     }
 
@@ -244,13 +237,11 @@ public class VnfRoa {
      * @param vnfmId
      * @param resp
      * @return
-     * @throws ServiceException
      * @since VFC 1.0
      */
     @GET
     @Path("/{vnfmId}")
-    public String getVnfmById(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp)
-            throws ServiceException {
+    public String getVnfmById(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp) {
         LOG.warn("function=getVnfmById, vnfmId: {}", vnfmId);
         return VnfmUtil.getVnfmById(vnfmId).toString();
     }
@@ -264,14 +255,27 @@ public class VnfRoa {
      * @param resp
      * @param responseId
      * @return
-     * @throws ServiceException
      * @since VFC 1.0
      */
     @GET
-    @Path("/{vnfmId}/jobs/{jobId}")
+    @Path("/{vnfmId}/jobs_old/{jobId}")
     public String getJob(@PathParam("jobId") String jobId, @PathParam("vnfmId") String vnfmId,
-            @Context HttpServletResponse resp, @QueryParam("@responseId") String responseId) throws ServiceException {
+            @Context HttpServletResponse resp, @QueryParam("@responseId") String responseId) {
         LOG.warn("function=getJob, msg=enter to get a job: jobId: {}, responseId: {}", jobId, responseId);
+        return getJobProcess(jobId, vnfmId, resp, jobId);
+    }
+
+    /**
+     * <br>
+     * common getJob method
+     * 
+     * @param jobId
+     * @param vnfmId
+     * @param resp
+     * @return
+     * @since VFC 1.0
+     */
+    private String getJobProcess(String jobId, String vnfmId, HttpServletResponse resp, String orgJobId) {
         JSONObject restJson = new JSONObject();
 
         if(StringUtils.isEmpty(jobId) || StringUtils.isEmpty(vnfmId)) {
@@ -281,38 +285,36 @@ public class VnfRoa {
 
         restJson = vnfMgr.getJob(jobId, vnfmId);
         if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
-            LOG.error("function=getJob, msg=getJob fail");
+            LOG.error("function=getJobProcess, msg=getJob fail");
             resp.setStatus(Constant.HTTP_INNERERROR);
             return restJson.toString();
         }
 
-        return getJobBody(restJson);
+        return getJobBody(restJson, orgJobId);
     }
 
     /**
      * <br>
-     * 
+     *
      * @param context
      *            {
-     *            �action�: �vmReset�,
-     *            �affectedvm�: {
-     *            �vmid�: �804cca71 - 9ae9 - 4511 - 8e30 - d1387718caff�,
-     *            �vduid�: �vdu_100�,
-     *            �vmname�: �ZTE_SSS_111_PP_2_L�
+     *            "action": "vmReset",
+     *            "affectedvm": {
+     *            "vmid": "804cca71 - 9ae9 - 4511 - 8e30 - d1387718caff",
+     *            "vduid": "vdu_100",
+     *            "vmname": "SBC_111_PP_2_L"
      *            }
      *            }
      * @param resp
      * @param vnfmId
      * @param vnfInstanceId
      * @return
-     * @throws ServiceException
      * @since VFC 1.0
      */
     @POST
     @Path("/{vnfmId}/vnfs/{vnfInstanceId}/heal")
     public String healVnf(@Context HttpServletRequest context, @Context HttpServletResponse resp,
-            @PathParam("vnfmId") String vnfmId, @PathParam("vnfInstanceId") String vnfInstanceId)
-            throws ServiceException {
+            @PathParam("vnfmId") String vnfmId, @PathParam("vnfInstanceId") String vnfInstanceId) {
         LOG.warn("function=healVnf, msg=enter to heal a vnf: vnfInstanceId: {}, vnfmId: {}", vnfInstanceId, vnfmId);
         JSONObject restJson = new JSONObject();
         JSONObject jsonObject = VnfmJsonUtil.getJsonFromContexts(context);
@@ -331,16 +333,32 @@ public class VnfRoa {
         }
 
         restJson.remove(Constant.RETCODE);
-        restJson.put("jobId", vnfInstanceId + "_post");
+        //restJson.put("jobId", vnfInstanceId + "_post");
+        restJson.put("jobId", vnfInstanceId + ":heal");
         return restJson.toString();
     }
 
-    private String getJobBody(JSONObject restJson) {
+    private String getHealJobBody(String jobId) {
+       LOG.warn("function=getHealJobBody");
+       JSONObject responseJson = new JSONObject();
+       JSONObject jobInfoJson = new JSONObject();
+        jobInfoJson.put("jobId", jobId);
+       responseJson.put("progress", "100");
+        responseJson.put("status", "finished");
+        responseJson.put("errorCode", "null");
+        responseJson.put("responseId", "100");
+        jobInfoJson.put("responsedescriptor", responseJson);
+        
+        LOG.warn("function=getJobBody, jobInfoJson: {}", jobInfoJson);
+        return jobInfoJson.toString();
+    }
+    
+    private String getJobBody(JSONObject restJson, String jobId) {
         LOG.warn("function=getJobBody, restJson: {}", restJson);
         JSONObject responseJson = new JSONObject();
         JSONObject jobInfoJson = new JSONObject();
         JSONObject retJson = restJson.getJSONArray("data").getJSONObject(0);
-        jobInfoJson.put("jobId", retJson.getString("id"));
+        jobInfoJson.put("jobId", jobId);
         responseJson.put("progress", progressItem.get(retJson.getString(Constant.STATUS)));
         responseJson.put("status", jobstatusItem.get(retJson.getString(Constant.STATUS)));
         responseJson.put("errorCode", "null");
@@ -356,24 +374,42 @@ public class VnfRoa {
         return jobInfoJson.toString();
     }
 
+    /**
+     * <br>
+     * Query vms info from vnfm
+     * 
+     * @param vnfmId
+     * @param resp
+     * @return
+     */
     @GET
     @Path("/{vnfmId}/vms")
-    public String getVms(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp)
-            throws ServiceException {
+    public String getVms(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp) {
         LOG.info("function=getVms, msg=enter to get vms: vnfmId: {}", vnfmId);
-        JSONObject restJson = new JSONObject();
-        JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
-        if(vnfmObjcet.isNullObject()) {
-            LOG.error("function=getVnf, msg=vnfm not exists, vnfmId: {}", vnfmId);
-            restJson.put("message", "vnfm not exists");
-            return restJson.toString();
-        }
-        String url = "/v2/vapps/instances/query/vms";
-        restJson = ResultRequestUtil.call(vnfmObjcet, url, Constant.GET, null, Constant.CERTIFICATE);
+        JSONObject restJson = vnfMgr.getVmsFromVnfm(vnfmId, null);
         LOG.info("function=getVms, restJson: {}", restJson);
         return restJson.getString("data");
     }
 
+    /**
+     * <br>
+     * Query vms info by vnfId from vnfm
+     *
+     * @param vnfmId
+     * @param vnfInstanceId
+     * @param resp
+     * @return
+     */
+    @GET
+    @Path("/{vnfmId}/{vnfInstanceId}/vms")
+    public String getVmsByVnfId(@PathParam("vnfmId") String vnfmId, @PathParam("vnfInstanceId") String vnfInstanceId,
+            @Context HttpServletResponse resp) {
+        LOG.info("function=getVmsByVnfId, msg=enter to get vms: vnfmId: {}", vnfmId);
+        JSONObject restJson = vnfMgr.getVmsFromVnfm(vnfmId, vnfInstanceId);
+        LOG.info("function=getVmsByVnfId, restJson: {}", restJson);
+        return restJson.getString("data");
+    }
+
     /**
      * <br>
      * Query job status from vnfm version 18.1
@@ -382,20 +418,35 @@ public class VnfRoa {
      * @param vnfmId
      * @param responseId
      * @return
-     * @throws ServiceException
      * @since VFC 1.0
      */
+    @GET
+    @Path("/{vnfmId}/jobs/{jobId}")
     public String getJobFromVnfm(@PathParam("jobId") String jobId, @PathParam("vnfmId") String vnfmId,
-            @Context HttpServletResponse resp, @QueryParam("@responseId") String responseId) throws ServiceException {
+            @Context HttpServletResponse resp, @QueryParam("@responseId") String responseId) {
         LOG.warn("function=getJobFromVnfm, msg=enter to get a job: jobId: {}, responseId: {}", jobId, responseId);
-        JSONObject restJson = vnfMgr.getJobFromVnfm(jobId, vnfmId);
-
-        if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
-            LOG.error("function=getJobFromVnfm, msg=getJobFromVnfm fail");
-            resp.setStatus(Constant.HTTP_INNERERROR);
-            return restJson.toString();
+        String[] temps = jobId.split(":");
+        String tmpJobId = temps[0];
+        String flag = "";
+        if(temps.length > 1) {
+            flag = temps[1];
+        }
+        LOG.warn("function=getJobFromVnfm, tmpJobId: {}, flag: {}", tmpJobId, flag);
+
+        if(flag.equalsIgnoreCase("no")) {
+            return getJobProcess(tmpJobId, vnfmId, resp, jobId);
+        } else if (flag.equalsIgnoreCase("heal")){
+            return getHealJobBody(jobId);
+        } else {
+            JSONObject restJson = vnfMgr.getJobFromVnfm(tmpJobId, vnfmId);
+
+            if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
+                LOG.error("function=getJobFromVnfm, msg=getJobFromVnfm fail");
+                resp.setStatus(Constant.HTTP_INNERERROR);
+                return restJson.toString();
+            }
+
+            return vnfMgr.transferToLcm(restJson);
         }
-
-        return vnfMgr.transferToLcm(restJson);
     }
 }