Add sending create request to VNFM
[so.git] / adapters / mso-vnfm-adapter / mso-vnfm-etsi-adapter / src / main / java / org / onap / so / adapters / vnfmadapter / rest / VnfmAdapterController.java
index 77a3f21..1cf00da 100644 (file)
 
 package org.onap.so.adapters.vnfmadapter.rest;
 
-import static org.onap.so.adapters.vnfmadapter.Constants.BASE_URL;
-import java.util.UUID;
-import javax.validation.Valid;
-import javax.ws.rs.core.MediaType;
+import io.swagger.annotations.ApiParam;
 import org.onap.logging.ref.slf4j.ONAPLogConstants;
+import org.onap.so.adapters.vnfmadapter.jobmanagement.JobManager;
+import org.onap.so.adapters.vnfmadapter.lifecycle.LifecycleManager;
 import org.onap.vnfmadapter.v1.model.CreateVnfRequest;
 import org.onap.vnfmadapter.v1.model.CreateVnfResponse;
+import org.onap.vnfmadapter.v1.model.DeleteVnfResponse;
+import org.onap.vnfmadapter.v1.model.QueryJobResponse;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestHeader;
-import org.springframework.web.bind.annotation.RequestMapping;
-import io.swagger.annotations.ApiParam;
+import org.springframework.web.bind.annotation.*;
+import javax.validation.Valid;
+import javax.ws.rs.core.MediaType;
+import static org.onap.so.adapters.vnfmadapter.Constants.BASE_URL;
 
 /**
  * Controller for handling requests to the VNFM (Virtual Network Function Manager) adapter REST API.
@@ -49,6 +49,14 @@ import io.swagger.annotations.ApiParam;
 public class VnfmAdapterController {
 
     private static final Logger logger = LoggerFactory.getLogger(VnfmAdapterController.class);
+    private final LifecycleManager lifecycleManager;
+    private final JobManager jobManager;
+
+    @Autowired
+    VnfmAdapterController(final LifecycleManager lifecycleManager, final JobManager jobManager) {
+        this.lifecycleManager = lifecycleManager;
+        this.jobManager = jobManager;
+    }
 
     @PostMapping(value = "/vnfs/{vnfId}")
     public ResponseEntity<CreateVnfResponse> vnfCreate(
@@ -58,25 +66,82 @@ public class VnfmAdapterController {
                     required = true) @Valid @RequestBody final CreateVnfRequest createVnfRequest,
             @ApiParam(
                     value = "Used to track REST requests for logging purposes. Identifies a single top level invocation of ONAP",
-                    required = true) @RequestHeader(value = ONAPLogConstants.Headers.REQUEST_ID,
+                    required = false) @RequestHeader(value = ONAPLogConstants.Headers.REQUEST_ID,
                             required = false) final String requestId,
             @ApiParam(
                     value = "Used to track REST requests for logging purposes. Identifies the client application user agent or user invoking the API",
-                    required = true) @RequestHeader(value = ONAPLogConstants.Headers.PARTNER_NAME,
+                    required = false) @RequestHeader(value = ONAPLogConstants.Headers.PARTNER_NAME,
                             required = false) final String partnerName,
             @ApiParam(
                     value = "Used to track REST requests for logging purposes. Identifies a single invocation of a single component",
-                    required = true) @RequestHeader(value = ONAPLogConstants.Headers.INVOCATION_ID,
+                    required = false) @RequestHeader(value = ONAPLogConstants.Headers.INVOCATION_ID,
                             required = false) final String invocationId) {
 
         setLoggingMDCs(requestId, partnerName, invocationId);
 
         logger.info("REST request vnfCreate with body: {}", createVnfRequest);
 
-        final CreateVnfResponse response = new CreateVnfResponse();
-        response.setJobId(UUID.randomUUID().toString());
-        clearLoggingMDCs();
-        return new ResponseEntity<>(response, HttpStatus.ACCEPTED);
+        try {
+            final CreateVnfResponse createVnfResponse = lifecycleManager.createVnf(vnfId, createVnfRequest);
+            return new ResponseEntity<>(createVnfResponse, HttpStatus.ACCEPTED);
+        } finally {
+            clearLoggingMDCs();
+        }
+    }
+
+    @DeleteMapping(value = "/vnfs/{vnfId}")
+    public ResponseEntity<DeleteVnfResponse> vnfDelete(
+            @ApiParam(value = "The identifier of the VNF. This must be the vnf-id of an existing generic-vnf in AAI.",
+                    required = true) @PathVariable("vnfId") final String vnfId,
+            @ApiParam(
+                    value = "Used to track REST requests for logging purposes. Identifies a single top level invocation of ONAP",
+                    required = false) @RequestHeader(value = ONAPLogConstants.Headers.REQUEST_ID,
+                            required = false) final String requestId,
+            @ApiParam(
+                    value = "Used to track REST requests for logging purposes. Identifies the client application user agent or user invoking the API",
+                    required = false) @RequestHeader(value = ONAPLogConstants.Headers.PARTNER_NAME,
+                            required = false) final String partnerName,
+            @ApiParam(
+                    value = "Used to track REST requests for logging purposes. Identifies a single invocation of a single component",
+                    required = false) @RequestHeader(value = ONAPLogConstants.Headers.INVOCATION_ID,
+                            required = false) final String invocationId) {
+
+        setLoggingMDCs(requestId, partnerName, invocationId);
+
+        logger.info("REST request vnfDelete for VNF: {}", vnfId);
+
+        try {
+            final DeleteVnfResponse response = lifecycleManager.deleteVnf(vnfId);
+            return new ResponseEntity<>(response, HttpStatus.ACCEPTED);
+        } finally {
+            clearLoggingMDCs();
+        }
+    }
+
+    @GetMapping(value = "/jobs/{jobId}")
+    public ResponseEntity<QueryJobResponse> jobQuery(
+            @ApiParam(value = "The identifier of the Job.", required = true) @PathVariable("jobId") final String jobId,
+            @ApiParam(
+                    value = "Used to track REST requests for logging purposes. Identifies a single top level invocation of ONAP",
+                    required = false) @RequestHeader(value = ONAPLogConstants.Headers.REQUEST_ID,
+                            required = false) final String requestId,
+            @ApiParam(
+                    value = "Used to track REST requests for logging purposes. Identifies the client application user agent or user invoking the API",
+                    required = false) @RequestHeader(value = ONAPLogConstants.Headers.PARTNER_NAME,
+                            required = false) final String partnerName,
+            @ApiParam(
+                    value = "Used to track REST requests for logging purposes. Identifies a single invocation of a single component",
+                    required = false) @RequestHeader(value = ONAPLogConstants.Headers.INVOCATION_ID,
+                            required = false) final String invocationId) {
+
+        setLoggingMDCs(requestId, partnerName, invocationId);
+
+        try {
+            final QueryJobResponse response = jobManager.getVnfmOperation(jobId);
+            return new ResponseEntity<>(response, HttpStatus.OK);
+        } finally {
+            clearLoggingMDCs();
+        }
     }
 
     private void setLoggingMDCs(final String requestId, final String partnerName, final String invocationId) {