Add SO APIs to Nokia VNFM adapter
[vfc/nfvo/driver/vnfm/svnfm.git] / nokiav2 / driver / src / main / java / org / onap / vfc / nfvo / driver / vnfm / svnfm / nokia / restapi / SoV2Api.java
diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/restapi/SoV2Api.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/restapi/SoV2Api.java
new file mode 100644 (file)
index 0000000..13d4ef8
--- /dev/null
@@ -0,0 +1,194 @@
+/*
+ * Copyright 2016-2017, Nokia Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.restapi;
+
+import javax.servlet.http.HttpServletResponse;
+import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.so.SoV2LifecycleManager;
+import org.onap.vnfmadapter.so.v2.model.*;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static javax.servlet.http.HttpServletResponse.SC_CREATED;
+import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT;
+
+import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.Constants.BASE_URL;
+import static org.slf4j.LoggerFactory.getLogger;
+import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
+import static org.springframework.web.bind.annotation.RequestMethod.*;
+
+/**
+ * Responsible for providing the Nokia sVNFM REST APIs
+ */
+@Controller
+@RequestMapping(value = BASE_URL + "/so/v2")
+public class SoV2Api {
+    private static Logger logger = getLogger(SoV2Api.class);
+
+    private final SoV2LifecycleManager soLifecycleManager;
+
+    @Autowired
+    SoV2Api(SoV2LifecycleManager lifecycleManager) {
+        this.soLifecycleManager = lifecycleManager;
+    }
+
+    /**
+     * Create the VNF
+     *
+     * @param request      the creation request
+     * @param vnfIdInAai   the identifier of the VNF in A&AI
+     * @param httpResponse the HTTP response
+     * @return the descriptor of the created VNF
+     */
+    @RequestMapping(value = "/vnfs/{vnfIdInAai}", method = POST, consumes = APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public void createVnf(@RequestBody SoV2VnfCreateRequest request, @PathVariable("vnfIdInAai") String vnfIdInAai, HttpServletResponse httpResponse) {
+        logger.info("REST: Create the VNF");
+        soLifecycleManager.createVnf(vnfIdInAai, request, httpResponse);
+        httpResponse.setStatus(SC_NO_CONTENT);
+    }
+
+    /**
+     * Query the VNF
+     *
+     * @param request      the creation request
+     * @param vnfIdInAai   the identifier of the VNF in A&AI
+     * @param httpResponse the HTTP response
+     * @return the descriptor of the created VNF
+     */
+    @RequestMapping(value = "/vnfs/{vnfIdInAai}", method = POST, consumes = APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public SoV2VnfQueryResponse queryVnf(@RequestBody SoV2VnfQueryRequest request, @PathVariable("vnfIdInAai") String vnfIdInAai, HttpServletResponse httpResponse) {
+        logger.info("REST: Create the VNF");
+        return soLifecycleManager.queryVnf(vnfIdInAai, request, httpResponse);
+    }
+
+    /**
+     * Terminate the VNF
+     *
+     * @param request      the termination request
+     * @param vnfIdInAai   the identifier of the VNF in A&AI
+     * @param httpResponse the HTTP response
+     * @return the job representing the VNF termination operation
+     */
+    @RequestMapping(value = "/vnfs/{vnfIdInAai}", method = DELETE, consumes = APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public void delete(@RequestBody SoV2VnfDeleteRequest request, @PathVariable("vnfIdInAai") String vnfIdInAai, HttpServletResponse httpResponse) {
+        logger.info("REST: Deactivate the VNF");
+        soLifecycleManager.delete(vnfIdInAai, request, httpResponse);
+        httpResponse.setStatus(SC_NO_CONTENT);
+    }
+
+    /**
+     * Update the VNF
+     *
+     * @param request      the creation request
+     * @param vnfIdInAai   the identifier of the VNF in A&AI
+     * @param httpResponse the HTTP response
+     * @return the descriptor of the created VNF
+     */
+    @RequestMapping(value = "/vnfs/{vnfIdInAai}", method = PUT, produces = APPLICATION_JSON_VALUE, consumes = APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public SoV2VnfUpdateResponse updateVnf(@RequestBody SoV2VnfUpdateRequest request, @PathVariable("vnfIdInAai") String vnfIdInAai, HttpServletResponse httpResponse) {
+        logger.info("REST: Update the VNF");
+        return soLifecycleManager.updateVnf(vnfIdInAai, request, httpResponse);
+    }
+
+    /**
+     * Rollback update VNF
+     *
+     * @param request      the rollback request
+     * @param httpResponse the HTTP response
+     */
+    @RequestMapping(value = "/vnfs/{vnfIdInAai}/rollback", method = POST, produces = APPLICATION_JSON_VALUE, consumes = APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public void rollback(@RequestBody SoV2RollbackVnfUpdate request, @PathVariable("vnfIdInAai") String vnfIdInAai, HttpServletResponse httpResponse) {
+        logger.info("REST: Create the VF");
+        soLifecycleManager.rollback(vnfIdInAai, request, httpResponse);
+    }
+
+    /**
+     * Create the VF module
+     *
+     * @param request      the creation request
+     * @param vnfIdInAai   the identifier of the VNF in A&AI
+     * @param httpResponse the HTTP response
+     */
+    @RequestMapping(value = "/vfmodule/{vnfIdInAai}/{vfModuleId}", method = POST, consumes = APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public void createVfModule(@RequestBody SoV2VfModuleCreateRequest request, @PathVariable("vnfIdInAai") String vnfIdInAai, @PathVariable("vfModuleId") String vfModuleId, HttpServletResponse httpResponse) {
+        logger.info("REST: Create the VF");
+        soLifecycleManager.createVfModule(vnfIdInAai, vfModuleId, request, httpResponse);
+        httpResponse.setStatus(SC_CREATED);
+    }
+
+    /**
+     * Terminate the VF module
+     *
+     * @param request      the termination request
+     * @param vnfIdInAai   the identifier of the VNF in A&AI
+     * @param httpResponse the HTTP response
+     */
+    @RequestMapping(value = "/vfmodule/{vnfIdInAai}/{vfModuleId}", method = DELETE, consumes = APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public void deleteVfModule(@RequestBody SoV2VnfDeleteRequest request, @PathVariable("vnfIdInAai") String vnfIdInAai, @PathVariable("vfModuleId") String vfModuleId, HttpServletResponse httpResponse) {
+        logger.info("REST: Deactivate the VNF");
+        soLifecycleManager.deleteVfModule(vnfIdInAai, vfModuleId, request, httpResponse);
+        httpResponse.setStatus(SC_NO_CONTENT);
+    }
+
+    /**
+     * Update the VF module
+     *
+     * @param request      the creation request
+     * @param vnfIdInAai   the identifier of the VNF in A&AI
+     * @param httpResponse the HTTP response
+     * @return the descriptor of the created VNF
+     */
+    @RequestMapping(value = "/vfmodule/{vnfIdInAai}/{vfModuleId}", method = PUT, produces = APPLICATION_JSON_VALUE, consumes = APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public SoV2VnfUpdateResponse updateVfModule(@RequestBody SoV2VnfUpdateRequest request, @PathVariable("vnfIdInAai") String vnfIdInAai, @PathVariable("vfModuleId") String vfModuleId, HttpServletResponse httpResponse) {
+        logger.info("REST: Update the VNF");
+        return soLifecycleManager.updateVfModule(vnfIdInAai, vfModuleId, request, httpResponse);
+    }
+
+    /**
+     * Rollback update VNF
+     *
+     * @param request      the rollback request
+     * @param httpResponse the HTTP response
+     */
+    @RequestMapping(value = "/vfmodule/{vnfIdInAai}/{vfModuleId}/rollback", method = PUT, produces = APPLICATION_JSON_VALUE, consumes = APPLICATION_JSON_VALUE)
+    @ResponseBody
+    public void rollbackVfModuleUpdate(@RequestBody SoV2RollbackVnfUpdate request, @PathVariable("vnfIdInAai") String vnfIdInAai, HttpServletResponse httpResponse) {
+        logger.info("REST: Roll back VF module update");
+        soLifecycleManager.rollback(vnfIdInAai, request, httpResponse);
+    }
+
+    /**
+     * Provides a probe for SO to test health of VNFM adapter
+     *
+     * @param httpResponse the HTTP response
+     */
+    @RequestMapping(value = "/ping", method = GET)
+    public void testLcnConnectivity(HttpServletResponse httpResponse) {
+        httpResponse.setStatus(HttpServletResponse.SC_OK);
+    }
+}