Support Allocate feature for NSMF based TN slices
[so.git] / bpmn / so-bpmn-infrastructure-common / src / main / groovy / org / onap / so / bpmn / infrastructure / scripts / DoAllocateNSSI.groovy
index 9aa044a..fc873be 100644 (file)
@@ -1,24 +1,24 @@
 package org.onap.so.bpmn.infrastructure.scripts
 
 import com.fasterxml.jackson.databind.ObjectMapper
+import org.apache.commons.lang3.StringUtils
 import org.camunda.bpm.engine.delegate.DelegateExecution
 import org.onap.so.beans.nsmf.EsrInfo
+import org.onap.so.beans.nsmf.JobStatusResponse
 import org.onap.so.beans.nsmf.NssiResponse
 import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest
 import org.onap.so.beans.nsmf.ResponseDescriptor
 import org.onap.so.beans.nsmf.ServiceInfo
 import org.onap.so.beans.nsmf.SliceTaskInfo
+import org.onap.so.beans.nsmf.SliceTaskParamsAdapter
+import org.onap.so.beans.nsmf.oof.SubnetType
 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
 import org.onap.so.bpmn.common.scripts.ExceptionUtil
 import org.onap.so.bpmn.common.scripts.NssmfAdapterUtils
-import org.onap.so.bpmn.core.domain.ModelInfo
-import org.onap.so.bpmn.core.domain.ServiceDecomposition
 import org.onap.so.bpmn.core.json.JsonUtils
 import org.slf4j.Logger
 import org.slf4j.LoggerFactory
-import org.springframework.http.ResponseEntity
 
-import static org.apache.commons.lang3.StringUtils.isBlank
 
 class DoAllocateNSSI extends AbstractServiceTaskProcessor {
 
@@ -34,7 +34,7 @@ class DoAllocateNSSI extends AbstractServiceTaskProcessor {
 
     private static final NSSMF_ALLOCATE_URL = "/api/rest/provMns/v1/NSS/SliceProfiles"
 
-    private static final NSSMF_QUERY_JOB_STATUS_URL = "/NSS/jobs/%s"
+    private static final NSSMF_QUERY_JOB_STATUS_URL = "/api/rest/provMns/v1/NSS/jobs/%s"
 
     @Override
     void preProcessRequest(DelegateExecution execution) {
@@ -42,13 +42,15 @@ class DoAllocateNSSI extends AbstractServiceTaskProcessor {
 
         NssmfAdapterNBIRequest nbiRequest = execution.getVariable("nbiRequest") as NssmfAdapterNBIRequest
 
-        //SliceTaskInfo sliceTaskInfo = execution.getVariable("sliceTaskInfo") as SliceTaskInfo
+        execution.setVariable("currentCycle", 0)
         boolean isNSIOptionAvailable = execution.getVariable("isNSIOptionAvailable") as Boolean
 
-        if (isNSIOptionAvailable) {
-            nbiRequest.serviceInfo.setActionType("modify")
-        } else {
+        if (!isNSIOptionAvailable) {
+            nbiRequest.serviceInfo.setActionType("allocate")
+        } else if (StringUtils.isBlank(nbiRequest.serviceInfo.nssiId)){
             nbiRequest.serviceInfo.setActionType("allocate")
+        } else {
+            nbiRequest.serviceInfo.setActionType("modify")
         }
         execution.setVariable("nbiRequest", nbiRequest)
         logger.trace("Exit preProcessRequest")
@@ -60,13 +62,16 @@ class DoAllocateNSSI extends AbstractServiceTaskProcessor {
      */
     void sendCreateRequestNSSMF(DelegateExecution execution) {
         NssmfAdapterNBIRequest nbiRequest = execution.getVariable("nbiRequest") as NssmfAdapterNBIRequest
-        String response = nssmfAdapterUtils.sendPostRequestNSSMF(execution, NSSMF_ALLOCATE_URL,
-                objectMapper.writeValueAsString(nbiRequest))
-        ResponseEntity responseEntity = objectMapper.readValue(response, ResponseEntity.class)
-        String respBody = responseEntity.getBody()
-        NssiResponse result = objectMapper.readValue(respBody, NssiResponse.class)
-        //todo: if success
-        //todo:
+        String nssmfRequest = objectMapper.writeValueAsString(nbiRequest)
+        logger.debug("sendCreateRequestNSSMF: " + nssmfRequest)
+
+        String response = nssmfAdapterUtils.sendPostRequestNSSMF(execution, NSSMF_ALLOCATE_URL, nssmfRequest)
+
+        if (response != null) {
+            NssiResponse nssiResponse = objectMapper.readValue(response, NssiResponse.class)
+            execution.setVariable("nssiAllocateResult", nssiResponse)
+        }
+
         execution.setVariable("serviceInfo", nbiRequest.getServiceInfo())
         execution.setVariable("esrInfo", nbiRequest.getEsrInfo())
     }
@@ -94,21 +99,87 @@ class DoAllocateNSSI extends AbstractServiceTaskProcessor {
         String response =
                 nssmfAdapterUtils.sendPostRequestNSSMF(execution, endpoint, objectMapper.writeValueAsString(nbiRequest))
 
-        ResponseEntity responseEntity = objectMapper.readValue(response, ResponseEntity.class)
-        String result = responseEntity.getBody()
-        //todo;if success
-        ResponseDescriptor responseDescriptor = objectMapper.readValue(result, ResponseDescriptor.class)
-
-        //todo: handle status
-        execution.setVariable("nssiAllocateResult", responseDescriptor)
+        logger.debug("nssmf response nssiAllocateStatus:" + response)
+
+        if (response != null) {
+            JobStatusResponse jobStatusResponse = objectMapper.readValue(response, JobStatusResponse.class)
+            if (StringUtils.isBlank(nssiId)) {
+                nssiAllocateResult.setNssiId(jobStatusResponse.getResponseDescriptor().getNssiId())
+                execution.setVariable("nssiAllocateResult", nssiAllocateResult)
+            }
+
+            execution.setVariable("nssiAllocateStatus", jobStatusResponse)
+            if (jobStatusResponse.getResponseDescriptor().getProgress() == 100) {
+               if (nssiId == null) {
+                nssiAllocateResult.setNssiId(jobStatusResponse.getResponseDescriptor().getNssiId())
+               }
+                execution.setVariable("jobFinished", true)
+            }
+        }
     }
 
     void prepareUpdateOrchestrationTask(DelegateExecution execution) {
-        //todo;update orchestration task
+        logger.debug("Start prepareUpdateOrchestrationTask progress")
+        String requestMethod = "PUT"
+
+        SliceTaskParamsAdapter sliceParams =
+                execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
+        JobStatusResponse jobStatusResponse = execution.getVariable("nssiAllocateStatus") as JobStatusResponse
+        ResponseDescriptor response = jobStatusResponse.getResponseDescriptor()
+        SubnetType subnetType = execution.getVariable("subnetType") as SubnetType
+
+        SliceTaskInfo sliceTaskInfo = execution.getVariable("sliceTaskInfo") as SliceTaskInfo
+        sliceTaskInfo.progress = response.getProgress()
+        sliceTaskInfo.status = response.getStatus().toLowerCase()
+        sliceTaskInfo.statusDescription = response.getStatusDescription()
+        updateNssiResult(sliceParams, subnetType, sliceTaskInfo)
+
+        execution.setVariable("CSSOT_paramJson", objectMapper.writeValueAsString(sliceParams))
+        execution.setVariable("CSSOT_requestMethod", requestMethod)
+
+        execution.setVariable("sliceTaskParams", sliceParams)
+        execution.setVariable("sliceTaskInfo", sliceTaskInfo)
+
+        logger.debug("Finish prepareUpdateOrchestrationTask progress")
+    }
+
+    private void updateNssiResult(SliceTaskParamsAdapter sliceTaskParams, SubnetType subnetType,
+                                  SliceTaskInfo sliceTaskInfo) {
+        switch (subnetType) {
+            case SubnetType.CN:
+                sliceTaskParams.cnSliceTaskInfo = sliceTaskInfo
+                break
+            case SubnetType.AN:
+                sliceTaskParams.anSliceTaskInfo = sliceTaskInfo
+                break
+            case SubnetType.TN_BH:
+                sliceTaskParams.tnBHSliceTaskInfo = sliceTaskInfo
+                break
+            case SubnetType.TN_FH:
+                sliceTaskParams.tnFHSliceTaskInfo = sliceTaskInfo
+                break
+            case SubnetType.TN_MH:
+                sliceTaskParams.tnMHSliceTaskInfo = sliceTaskInfo
+                break
+        }
     }
 
     void timeDelay(DelegateExecution execution) {
-        //todo: time delay
+        logger.trace("Enter timeDelay in DoAllocateNSSI()")
+        try {
+            Thread.sleep(60000)
+            int currentCycle = execution.getVariable("currentCycle") as Integer
+            currentCycle = currentCycle + 1
+            if(currentCycle >  60)
+            {
+                logger.trace("Completed all the retry times... but still nssmf havent completed the creation process...")
+                exceptionUtil.buildAndThrowWorkflowException(execution, 500, "NSSMF creation didnt complete by time...")
+            }
+            execution.setVariable("currentCycle", currentCycle)
+        } catch(InterruptedException e) {
+            logger.info("Time Delay exception" + e)
+        }
+        logger.trace("Exit timeDelay in DoAllocateNSSI()")
     }
 
 }