Merge "Bpmn to cnf adapter implementation testing bpmn"
[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.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.NssiResponse
8 import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest
9 import org.onap.so.beans.nsmf.ResponseDescriptor
10 import org.onap.so.beans.nsmf.ServiceInfo
11 import org.onap.so.beans.nsmf.SliceTaskInfo
12 import org.onap.so.beans.nsmf.SliceTaskParamsAdapter
13 import org.onap.so.beans.nsmf.oof.SubnetType
14 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
15 import org.onap.so.bpmn.common.scripts.ExceptionUtil
16 import org.onap.so.bpmn.common.scripts.NssmfAdapterUtils
17 import org.onap.so.bpmn.core.json.JsonUtils
18 import org.slf4j.Logger
19 import org.slf4j.LoggerFactory
20 import org.springframework.http.ResponseEntity
21
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         execution.setVariable("currentCycle", 0)
46         boolean isNSIOptionAvailable = execution.getVariable("isNSIOptionAvailable") as Boolean
47
48         if (!isNSIOptionAvailable) {
49             nbiRequest.serviceInfo.setActionType("allocate")
50         } else if (StringUtils.isBlank(nbiRequest.serviceInfo.nssiId)){
51             nbiRequest.serviceInfo.setActionType("allocate")
52         } else {
53             nbiRequest.serviceInfo.setActionType("modify")
54         }
55         execution.setVariable("nbiRequest", nbiRequest)
56         logger.trace("Exit preProcessRequest")
57     }
58
59     /**
60      * send Create Request NSSMF
61      * @param execution
62      */
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))
67         ResponseEntity responseEntity = objectMapper.readValue(response, ResponseEntity.class)
68         String respBody = responseEntity.getBody()
69         NssiResponse result = objectMapper.readValue(respBody, NssiResponse.class)
70         //todo: if success
71         //todo:
72         execution.setVariable("serviceInfo", nbiRequest.getServiceInfo())
73         execution.setVariable("esrInfo", nbiRequest.getEsrInfo())
74     }
75
76     /**
77      * query nssi allocate status
78      * @param execution
79      */
80     void queryNSSIStatus(DelegateExecution execution) {
81         NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
82         NssiResponse nssiAllocateResult = execution.getVariable("nssiAllocateResult") as NssiResponse
83         String jobId = nssiAllocateResult.getJobId()
84         String nssiId = nssiAllocateResult.getNssiId()
85
86         ServiceInfo serviceInfo = execution.getVariable("serviceInfo") as ServiceInfo
87         serviceInfo.setNssiId(nssiId)
88         EsrInfo esrInfo = execution.getVariable("esrInfo") as EsrInfo
89
90         //nbiRequest.setResponseId(jobId)
91         nbiRequest.setServiceInfo(serviceInfo)
92         nbiRequest.setEsrInfo(esrInfo)
93
94         String endpoint = String.format(NSSMF_QUERY_JOB_STATUS_URL, jobId)
95
96         String response =
97                 nssmfAdapterUtils.sendPostRequestNSSMF(execution, endpoint, objectMapper.writeValueAsString(nbiRequest))
98
99         ResponseEntity responseEntity = objectMapper.readValue(response, ResponseEntity.class)
100         String result = responseEntity.getBody()
101         //todoï¼›if success
102         ResponseDescriptor responseDescriptor = objectMapper.readValue(result, ResponseDescriptor.class)
103
104         //todo: handle status
105         execution.setVariable("nssiAllocateResult", responseDescriptor)
106     }
107
108     void prepareUpdateOrchestrationTask(DelegateExecution execution) {
109         logger.debug("Start prepareUpdateOrchestrationTask progress")
110         String requestMethod = "PUT"
111
112         SliceTaskParamsAdapter sliceParams =
113                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
114         ResponseDescriptor response = execution.getVariable("nssiAllocateResult") as ResponseDescriptor
115         SubnetType subnetType = execution.getVariable("subnetType") as SubnetType
116
117
118         SliceTaskInfo sliceTaskInfo = execution.getVariable("sliceTaskInfo") as SliceTaskInfo
119         sliceTaskInfo.progress = response.getProgress()
120         sliceTaskInfo.status = response.getStatus()
121         sliceTaskInfo.statusDescription = response.getStatusDescription()
122         updateNssiResult(sliceParams, subnetType, sliceTaskInfo)
123
124         String paramJson = sliceParams.convertToJson()
125         execution.setVariable("CSSOT_paramJson", paramJson)
126         execution.setVariable("CSSOT_requestMethod", requestMethod)
127
128         execution.setVariable("sliceTaskParams", sliceParams)
129         execution.setVariable("sliceTaskInfo", sliceTaskInfo)
130         logger.debug("Finish prepareUpdateOrchestrationTask progress")
131     }
132
133     private void updateNssiResult(SliceTaskParamsAdapter sliceTaskParams, SubnetType subnetType,
134                                   SliceTaskInfo sliceTaskInfo) {
135         switch (subnetType) {
136             case SubnetType.CN:
137                 sliceTaskParams.cnSliceTaskInfo = sliceTaskInfo
138                 break
139             case SubnetType.AN_NF:
140                 sliceTaskParams.anSliceTaskInfo = sliceTaskInfo
141                 break
142             case SubnetType.TN_BH:
143                 sliceTaskParams.tnBHSliceTaskInfo = sliceTaskInfo
144                 break
145             case SubnetType.TN_FH:
146                 sliceTaskParams.tnFHSliceTaskInfo = sliceTaskInfo
147                 break
148             case SubnetType.TN_MH:
149                 sliceTaskParams.tnMHSliceTaskInfo = sliceTaskInfo
150                 break
151         }
152     }
153
154     void timeDelay(DelegateExecution execution) {
155         logger.trace("Enter timeDelay in DoAllocateNSSI()")
156         try {
157             Thread.sleep(60000)
158             int currentCycle = execution.getVariable("currentCycle") as Integer
159             currentCycle = currentCycle + 1
160             if(currentCycle >  60)
161             {
162                 logger.trace("Completed all the retry times... but still nssmf havent completed the creation process...")
163                 exceptionUtil.buildAndThrowWorkflowException(execution, 500, "NSSMF creation didnt complete by time...")
164             }
165             execution.setVariable("currentCycle", currentCycle)
166         } catch(InterruptedException e) {
167             logger.info("Time Delay exception" + e)
168         }
169         logger.trace("Exit timeDelay in DoAllocateNSSI()")
170     }
171
172 }