Update NSMF workflow to for the E2E Network Slicing requirements
[so.git] / bpmn / so-bpmn-infrastructure-common / src / main / groovy / org / onap / so / bpmn / infrastructure / scripts / DoAllocateNSSI.groovy
1 package org.onap.so.bpmn.infrastructure.scripts
2
3 import com.fasterxml.jackson.databind.ObjectMapper
4 import org.camunda.bpm.engine.delegate.DelegateExecution
5 import org.onap.so.beans.nsmf.EsrInfo
6 import org.onap.so.beans.nsmf.NssiResponse
7 import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest
8 import org.onap.so.beans.nsmf.ResponseDescriptor
9 import org.onap.so.beans.nsmf.ServiceInfo
10 import org.onap.so.beans.nsmf.SliceTaskInfo
11 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
12 import org.onap.so.bpmn.common.scripts.ExceptionUtil
13 import org.onap.so.bpmn.common.scripts.NssmfAdapterUtils
14 import org.onap.so.bpmn.core.domain.ModelInfo
15 import org.onap.so.bpmn.core.domain.ServiceDecomposition
16 import org.onap.so.bpmn.core.json.JsonUtils
17 import org.slf4j.Logger
18 import org.slf4j.LoggerFactory
19 import org.springframework.http.ResponseEntity
20
21 import static org.apache.commons.lang3.StringUtils.isBlank
22
23 class DoAllocateNSSI extends AbstractServiceTaskProcessor {
24
25     private static final Logger logger = LoggerFactory.getLogger(DoAllocateNSSI.class);
26
27     ExceptionUtil exceptionUtil = new ExceptionUtil()
28
29     JsonUtils jsonUtil = new JsonUtils()
30
31     ObjectMapper objectMapper = new ObjectMapper()
32
33     private NssmfAdapterUtils nssmfAdapterUtils = new NssmfAdapterUtils(httpClientFactory, jsonUtil)
34
35     private static final NSSMF_ALLOCATE_URL = "/api/rest/provMns/v1/NSS/SliceProfiles"
36
37     private static final NSSMF_QUERY_JOB_STATUS_URL = "/NSS/jobs/%s"
38
39     @Override
40     void preProcessRequest(DelegateExecution execution) {
41         logger.trace("Enter preProcessRequest()")
42
43         NssmfAdapterNBIRequest nbiRequest = execution.getVariable("nbiRequest") as NssmfAdapterNBIRequest
44
45         //SliceTaskInfo sliceTaskInfo = execution.getVariable("sliceTaskInfo") as SliceTaskInfo
46         boolean isNSIOptionAvailable = execution.getVariable("isNSIOptionAvailable") as Boolean
47
48         if (isNSIOptionAvailable) {
49             nbiRequest.serviceInfo.setActionType("modify")
50         } else {
51             nbiRequest.serviceInfo.setActionType("allocate")
52         }
53         execution.setVariable("nbiRequest", nbiRequest)
54         logger.trace("Exit preProcessRequest")
55     }
56
57     /**
58      * send Create Request NSSMF
59      * @param execution
60      */
61     void sendCreateRequestNSSMF(DelegateExecution execution) {
62         NssmfAdapterNBIRequest nbiRequest = execution.getVariable("nbiRequest") as NssmfAdapterNBIRequest
63         String response = nssmfAdapterUtils.sendPostRequestNSSMF(execution, NSSMF_ALLOCATE_URL,
64                 objectMapper.writeValueAsString(nbiRequest))
65         ResponseEntity responseEntity = objectMapper.readValue(response, ResponseEntity.class)
66         String respBody = responseEntity.getBody()
67         NssiResponse result = objectMapper.readValue(respBody, NssiResponse.class)
68         //todo: if success
69         //todo:
70         execution.setVariable("serviceInfo", nbiRequest.getServiceInfo())
71         execution.setVariable("esrInfo", nbiRequest.getEsrInfo())
72     }
73
74     /**
75      * query nssi allocate status
76      * @param execution
77      */
78     void queryNSSIStatus(DelegateExecution execution) {
79         NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
80         NssiResponse nssiAllocateResult = execution.getVariable("nssiAllocateResult") as NssiResponse
81         String jobId = nssiAllocateResult.getJobId()
82         String nssiId = nssiAllocateResult.getNssiId()
83
84         ServiceInfo serviceInfo = execution.getVariable("serviceInfo") as ServiceInfo
85         serviceInfo.setNssiId(nssiId)
86         EsrInfo esrInfo = execution.getVariable("esrInfo") as EsrInfo
87
88         //nbiRequest.setResponseId(jobId)
89         nbiRequest.setServiceInfo(serviceInfo)
90         nbiRequest.setEsrInfo(esrInfo)
91
92         String endpoint = String.format(NSSMF_QUERY_JOB_STATUS_URL, jobId)
93
94         String response =
95                 nssmfAdapterUtils.sendPostRequestNSSMF(execution, endpoint, objectMapper.writeValueAsString(nbiRequest))
96
97         ResponseEntity responseEntity = objectMapper.readValue(response, ResponseEntity.class)
98         String result = responseEntity.getBody()
99         //todo;if success
100         ResponseDescriptor responseDescriptor = objectMapper.readValue(result, ResponseDescriptor.class)
101
102         //todo: handle status
103         execution.setVariable("nssiAllocateResult", responseDescriptor)
104     }
105
106     void prepareUpdateOrchestrationTask(DelegateExecution execution) {
107         //todo;update orchestration task
108     }
109
110     void timeDelay(DelegateExecution execution) {
111         //todo: time delay
112     }
113
114 }