1 package org.onap.so.bpmn.infrastructure.scripts
 
   3 import com.fasterxml.jackson.databind.ObjectMapper
 
   4 import org.apache.commons.lang3.StringUtils
 
   5 import org.camunda.bpm.engine.delegate.DelegateExecution
 
   6 import org.onap.so.beans.nsmf.EsrInfo
 
   7 import org.onap.so.beans.nsmf.JobStatusResponse
 
   8 import org.onap.so.beans.nsmf.NssiResponse
 
   9 import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest
 
  10 import org.onap.so.beans.nsmf.ResponseDescriptor
 
  11 import org.onap.so.beans.nsmf.ServiceInfo
 
  12 import org.onap.so.beans.nsmf.SliceTaskInfo
 
  13 import org.onap.so.beans.nsmf.SliceTaskParamsAdapter
 
  14 import org.onap.so.beans.nsmf.oof.SubnetType
 
  15 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
 
  16 import org.onap.so.bpmn.common.scripts.ExceptionUtil
 
  17 import org.onap.so.bpmn.common.scripts.NssmfAdapterUtils
 
  18 import org.onap.so.bpmn.core.json.JsonUtils
 
  19 import org.slf4j.Logger
 
  20 import org.slf4j.LoggerFactory
 
  23 class DoAllocateNSSI extends AbstractServiceTaskProcessor {
 
  25     private static final Logger logger = LoggerFactory.getLogger(DoAllocateNSSI.class);
 
  27     ExceptionUtil exceptionUtil = new ExceptionUtil()
 
  29     JsonUtils jsonUtil = new JsonUtils()
 
  31     ObjectMapper objectMapper = new ObjectMapper()
 
  33     private NssmfAdapterUtils nssmfAdapterUtils = new NssmfAdapterUtils(httpClientFactory, jsonUtil)
 
  35     private static final NSSMF_ALLOCATE_URL = "/api/rest/provMns/v1/NSS/SliceProfiles"
 
  37     private static final NSSMF_QUERY_JOB_STATUS_URL = "/api/rest/provMns/v1/NSS/jobs/%s"
 
  40     void preProcessRequest(DelegateExecution execution) {
 
  41         logger.trace("Enter preProcessRequest()")
 
  43         NssmfAdapterNBIRequest nbiRequest = execution.getVariable("nbiRequest") as NssmfAdapterNBIRequest
 
  45         execution.setVariable("currentCycle", 0)
 
  46         boolean isNSIOptionAvailable = execution.getVariable("isNSIOptionAvailable") as Boolean
 
  48         if (!isNSIOptionAvailable) {
 
  49             nbiRequest.serviceInfo.setActionType("allocate")
 
  50         } else if (StringUtils.isBlank(nbiRequest.serviceInfo.nssiId)){
 
  51             nbiRequest.serviceInfo.setActionType("allocate")
 
  53             nbiRequest.serviceInfo.setActionType("modify")
 
  55         execution.setVariable("nbiRequest", nbiRequest)
 
  56         logger.trace("Exit preProcessRequest")
 
  60      * send Create Request NSSMF
 
  63     void sendCreateRequestNSSMF(DelegateExecution execution) {
 
  64         NssmfAdapterNBIRequest nbiRequest = execution.getVariable("nbiRequest") as NssmfAdapterNBIRequest
 
  65         String response = nssmfAdapterUtils.sendPostRequestNSSMF(execution, NSSMF_ALLOCATE_URL,
 
  66                 objectMapper.writeValueAsString(nbiRequest))
 
  68         if (response != null) {
 
  69             NssiResponse nssiResponse = objectMapper.readValue(response, NssiResponse.class)
 
  70             execution.setVariable("nssiAllocateResult", nssiResponse)
 
  73         execution.setVariable("serviceInfo", nbiRequest.getServiceInfo())
 
  74         execution.setVariable("esrInfo", nbiRequest.getEsrInfo())
 
  78      * query nssi allocate status
 
  81     void queryNSSIStatus(DelegateExecution execution) {
 
  82         NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
 
  83         NssiResponse nssiAllocateResult = execution.getVariable("nssiAllocateResult") as NssiResponse
 
  84         String jobId = nssiAllocateResult.getJobId()
 
  85         String nssiId = nssiAllocateResult.getNssiId()
 
  87         ServiceInfo serviceInfo = execution.getVariable("serviceInfo") as ServiceInfo
 
  88         serviceInfo.setNssiId(nssiId)
 
  89         EsrInfo esrInfo = execution.getVariable("esrInfo") as EsrInfo
 
  91         //nbiRequest.setResponseId(jobId)
 
  92         nbiRequest.setServiceInfo(serviceInfo)
 
  93         nbiRequest.setEsrInfo(esrInfo)
 
  95         String endpoint = String.format(NSSMF_QUERY_JOB_STATUS_URL, jobId)
 
  98                 nssmfAdapterUtils.sendPostRequestNSSMF(execution, endpoint, objectMapper.writeValueAsString(nbiRequest))
 
 100         if (response != null) {
 
 101             JobStatusResponse jobStatusResponse = objectMapper.readValue(response, JobStatusResponse.class)
 
 102             execution.setVariable("nssiAllocateStatus", jobStatusResponse)
 
 104             if (jobStatusResponse.getResponseDescriptor().getProgress() == 100) {
 
 105                 execution.setVariable("jobFinished", true)
 
 110     void prepareUpdateOrchestrationTask(DelegateExecution execution) {
 
 111         logger.debug("Start prepareUpdateOrchestrationTask progress")
 
 112         String requestMethod = "PUT"
 
 114         SliceTaskParamsAdapter sliceParams =
 
 115                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 116         JobStatusResponse jobStatusResponse = execution.getVariable("nssiAllocateStatus") as JobStatusResponse
 
 117         ResponseDescriptor response = jobStatusResponse.getResponseDescriptor()
 
 118         SubnetType subnetType = execution.getVariable("subnetType") as SubnetType
 
 120         SliceTaskInfo sliceTaskInfo = execution.getVariable("sliceTaskInfo") as SliceTaskInfo
 
 121         sliceTaskInfo.progress = response.getProgress()
 
 122         sliceTaskInfo.status = response.getStatus()
 
 123         sliceTaskInfo.statusDescription = response.getStatusDescription()
 
 124         updateNssiResult(sliceParams, subnetType, sliceTaskInfo)
 
 126         String paramJson = sliceParams.convertToJson()
 
 127         execution.setVariable("CSSOT_paramJson", paramJson)
 
 128         execution.setVariable("CSSOT_requestMethod", requestMethod)
 
 130         execution.setVariable("sliceTaskParams", sliceParams)
 
 131         execution.setVariable("sliceTaskInfo", sliceTaskInfo)
 
 133         logger.debug("Finish prepareUpdateOrchestrationTask progress")
 
 136     private void updateNssiResult(SliceTaskParamsAdapter sliceTaskParams, SubnetType subnetType,
 
 137                                   SliceTaskInfo sliceTaskInfo) {
 
 138         switch (subnetType) {
 
 140                 sliceTaskParams.cnSliceTaskInfo = sliceTaskInfo
 
 143                 sliceTaskParams.anSliceTaskInfo = sliceTaskInfo
 
 145             case SubnetType.TN_BH:
 
 146                 sliceTaskParams.tnBHSliceTaskInfo = sliceTaskInfo
 
 148             case SubnetType.TN_FH:
 
 149                 sliceTaskParams.tnFHSliceTaskInfo = sliceTaskInfo
 
 151             case SubnetType.TN_MH:
 
 152                 sliceTaskParams.tnMHSliceTaskInfo = sliceTaskInfo
 
 157     void timeDelay(DelegateExecution execution) {
 
 158         logger.trace("Enter timeDelay in DoAllocateNSSI()")
 
 161             int currentCycle = execution.getVariable("currentCycle") as Integer
 
 162             currentCycle = currentCycle + 1
 
 163             if(currentCycle >  60)
 
 165                 logger.trace("Completed all the retry times... but still nssmf havent completed the creation process...")
 
 166                 exceptionUtil.buildAndThrowWorkflowException(execution, 500, "NSSMF creation didnt complete by time...")
 
 168             execution.setVariable("currentCycle", currentCycle)
 
 169         } catch(InterruptedException e) {
 
 170             logger.info("Time Delay exception" + e)
 
 172         logger.trace("Exit timeDelay in DoAllocateNSSI()")