Merge "Added new flow for creating 5G slice service."
[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 org.camunda.bpm.engine.delegate.BpmnError
4 import org.camunda.bpm.engine.delegate.DelegateExecution
5 import org.onap.aai.domain.yang.ServiceInstance
6 import org.onap.aai.domain.yang.SliceProfile
7 import org.onap.logging.filter.base.ONAPComponents
8 import org.onap.so.beans.nsmf.AllocateAnNssi
9 import org.onap.so.beans.nsmf.AllocateCnNssi
10 import org.onap.so.beans.nsmf.AllocateTnNssi
11 import org.onap.so.beans.nsmf.AnSliceProfile
12 import org.onap.so.beans.nsmf.CnSliceProfile
13 import org.onap.so.beans.nsmf.EsrInfo
14 import org.onap.so.beans.nsmf.JobStatusRequest
15 import org.onap.so.beans.nsmf.NetworkType
16 import org.onap.so.beans.nsmf.NsiInfo
17 import org.onap.so.beans.nsmf.NssiAllocateRequest
18 import org.onap.so.beans.nsmf.PerfReq
19 import org.onap.so.beans.nsmf.PerfReqEmbbList
20 import org.onap.so.beans.nsmf.PerfReqUrllcList
21 import org.onap.so.beans.nsmf.ResourceSharingLevel
22 import org.onap.so.beans.nsmf.ServiceProfile
23 import org.onap.so.beans.nsmf.SliceTaskParams
24 import org.onap.so.beans.nsmf.TnSliceProfile
25 import org.onap.so.beans.nsmf.UeMobilityLevel
26 import org.onap.so.bpmn.common.scripts.ExceptionUtil
27 import org.onap.so.bpmn.core.RollbackData
28 import org.onap.so.bpmn.core.UrnPropertiesReader
29 import org.onap.so.bpmn.core.domain.ModelInfo
30 import org.onap.so.bpmn.core.domain.ServiceDecomposition
31 import org.onap.so.bpmn.core.json.JsonUtils
32 import org.onap.so.client.HttpClient
33 import org.onap.so.client.HttpClientFactory
34 import org.onap.so.client.aai.AAIObjectType
35 import org.onap.so.client.aai.AAIResourcesClient
36 import org.onap.so.client.aai.entities.AAIEdgeLabel
37 import org.onap.so.client.aai.entities.uri.AAIResourceUri
38 import org.onap.so.client.aai.entities.uri.AAIUriFactory
39 import org.slf4j.Logger
40 import org.slf4j.LoggerFactory
41 import com.fasterxml.jackson.databind.ObjectMapper;
42 import javax.ws.rs.core.Response
43
44 import static org.apache.commons.lang3.StringUtils.isBlank
45
46
47 class DoAllocateNSSI extends org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor{
48
49     private static final Logger logger = LoggerFactory.getLogger( DoAllocateNSSI.class);
50     private static final ObjectMapper MAPPER = new ObjectMapper();
51
52     ExceptionUtil exceptionUtil = new ExceptionUtil()
53
54     JsonUtils jsonUtil = new JsonUtils()
55
56     /**
57      * Pre Process the BPMN Flow Request
58      * Inclouds:
59      * generate the nsOperationKey
60      * generate the nsParameters
61      */
62     void preProcessRequest (DelegateExecution execution) {
63         logger.trace("Enter preProcessRequest()")
64         String msg = ""
65         String nssmfOperation = ""
66         String msoRequestId = execution.getVariable("msoRequestId")
67         String nsstInput = execution.getVariable("nsstInput")
68         String modelUuid = jsonUtil.getJsonValue(nsstInput, "modelUuid")
69         //modelUuid="2763777c-27bd-4df7-93b8-c690e23f4d3f"
70         String nssiInstanceId = jsonUtil.getJsonValue(nsstInput, "serviceInstanceId")
71         String serviceModelInfo = """{
72             "modelInvariantUuid":"",
73             "modelUuid":"${modelUuid}",
74             "modelVersion":""
75              }"""
76         execution.setVariable("serviceModelInfo",serviceModelInfo)
77         execution.setVariable("nssiInstanceId",nssiInstanceId)
78         String nssiProfileID = UUID.randomUUID().toString()
79         execution.setVariable("nssiProfileID",nssiProfileID)
80         if(isBlank(nssiInstanceId))
81         {
82             nssmfOperation="create"
83             nssiInstanceId = UUID.randomUUID().toString()
84         }else {
85             nssmfOperation = "update"
86         }
87         execution.setVariable("nssmfOperation",nssmfOperation)
88         execution.setVariable("nssiInstanceId",nssiInstanceId)
89
90         def isDebugLogEnabled ="false"
91         def isNSSICreated = false
92         execution.setVariable("isNSSICreated",isNSSICreated)
93
94         int currentCycle = 0
95         execution.setVariable("currentCycle", currentCycle)
96
97         logger.trace("Exit preProcessRequest")
98     }
99
100
101     void getNSSTInfo(DelegateExecution execution){
102         logger.trace("Enter getNSSTInfo in DoAllocateNSSI()")
103         ServiceDecomposition serviceDecomposition= execution.getVariable("serviceDecomposition")
104         ModelInfo modelInfo = serviceDecomposition.getModelInfo()
105         String serviceRole = "nssi"
106         String nssiServiceInvariantUuid = serviceDecomposition.modelInfo.getModelInvariantUuid()
107         String nssiServiceUuid = serviceDecomposition.modelInfo.getModelUuid()
108         String nssiServiceType = serviceDecomposition.getServiceType()
109         String uuiRequest = execution.getVariable("uuiRequest")
110         String nssiServiceName = "nssi_"+jsonUtil.getJsonValue(uuiRequest, "service.name")
111         execution.setVariable("nssiServiceName",nssiServiceName)
112         execution.setVariable("nssiServiceType",nssiServiceType)
113         execution.setVariable("nssiServiceInvariantUuid",nssiServiceInvariantUuid)
114         execution.setVariable("nssiServiceUuid",nssiServiceUuid)
115         execution.setVariable("serviceRole",serviceRole)
116
117         String content = serviceDecomposition.getServiceInfo().getServiceArtifact().get(0).getContent()
118         String nsstID = jsonUtil.getJsonValue(content, "metadata.id")
119         String nsstVendor = jsonUtil.getJsonValue(content, "metadata.vendor")
120         String nsstDomain = jsonUtil.getJsonValue(content, "metadata.domainType")
121         String nsstType = jsonUtil.getJsonValue(content, "metadata.type")
122
123         execution.setVariable("nsstID",nsstID)
124         execution.setVariable("nsstVendor",nsstVendor)
125         execution.setVariable("nsstDomain",nsstDomain)
126         execution.setVariable("nssiServiceUuid",nssiServiceUuid)
127         execution.setVariable("nsstType",nsstType)
128
129         String nsstContentInfo = """{
130         "NsstID":"${nsstID}",
131         "Vendor":"${nsstVendor}",
132         "type":"${nsstType}"
133          }"""
134
135         logger.trace("Exit getNSSTInfo in DoAllocateNSSI()")
136     }
137
138     void timeDelay(DelegateExecution execution) {
139         logger.trace("Enter timeDelay in DoAllocateNSSI()")
140         try {
141             Thread.sleep(60000);
142             int currentCycle = execution.getVariable("currentCycle")
143             currentCycle=currentCycle+1
144             if(currentCycle>60)
145             {
146                 logger.trace("Completed all the retry times... but still nssmf havent completed the creation process...")
147                 exceptionUtil.buildAndThrowWorkflowException(execution, 500, "NSSMF creation didnt complete by time...")
148             }
149             execution.setVariable("currentCycle",currentCycle)
150         } catch(InterruptedException e) {
151             logger.info("Time Delay exception" + e)
152         }
153         logger.trace("Exit timeDelay in DoAllocateNSSI()")
154     }
155
156
157     void sendUpdateRequestNSSMF(DelegateExecution execution) {
158         logger.trace("Enter sendUpdateRequestNSSMF in DoAllocateNSSI()")
159         String urlString = UrnPropertiesReader.getVariable("mso.adapters.nssmf.endpoint", execution)
160         logger.debug( "get NSSMF: " + urlString)
161
162        //Prepare auth for NSSMF - Begin
163         def authHeader = ""
164         String basicAuth = UrnPropertiesReader.getVariable("mso.nssmf.auth", execution)
165         String domain = execution.getVariable("nsstDomain")
166         String nssmfRequest = buildUpdateNSSMFRequest(execution, domain.toUpperCase())
167
168         //send request to update NSSI option - Begin
169         URL url = new URL(urlString+"/api/rest/provMns/v1/NSS/SliceProfiles")
170         HttpClient httpClient = new HttpClientFactory().newJsonClient(url, ONAPComponents.EXTERNAL)
171         Response httpResponse = httpClient.post(nssmfRequest)
172
173         int responseCode = httpResponse.getStatus()
174         logger.debug("NSSMF sync response code is: " + responseCode)
175
176         if(responseCode < 199 && responseCode > 299){
177             String nssmfResponse ="NSSMF response have nobody"
178             if(httpResponse.hasEntity())
179                 nssmfResponse = httpResponse.readEntity(String.class)
180             logger.trace("received error message from NSSMF : "+nssmfResponse)
181             logger.trace("Exit sendCreateRequestNSSMF in DoAllocateNSSI()")
182             exceptionUtil.buildAndThrowWorkflowException(execution, responseCode, "Received a Bad Sync Response from NSSMF.")
183         }
184
185         if(httpResponse.hasEntity()){
186             String nssmfResponse = httpResponse.readEntity(String.class)
187             execution.setVariable("nssmfResponse", nssmfResponse)
188             String nssiId = jsonUtil.getJsonValue(nssmfResponse, "nssiId")
189             String jobId = jsonUtil.getJsonValue(nssmfResponse, "jobId")
190             execution.setVariable("nssiId",nssiId)
191             execution.setVariable("jobId",jobId)
192         }else{
193             exceptionUtil.buildAndThrowWorkflowException(execution, responseCode, "Received a Bad Sync Response from NSSMF.")
194         }
195         logger.trace("Exit sendUpdateRequestNSSMF in DoAllocateNSSI()")
196     }
197
198     void sendCreateRequestNSSMF(DelegateExecution execution) {
199         logger.trace("Enter sendCreateRequestNSSMF in DoAllocateNSSI()")
200         String urlString = UrnPropertiesReader.getVariable("mso.adapters.nssmf.endpoint", execution)
201         logger.debug( "get NSSMF: " + urlString)
202
203         //Prepare auth for NSSMF - Begin
204         String domain = execution.getVariable("nsstDomain")
205         String nssmfRequest = buildCreateNSSMFRequest(execution, domain.toUpperCase())
206
207         //send request to get NSI option - Begin
208         URL url = new URL(urlString+"/api/rest/provMns/v1/NSS/SliceProfiles")
209         HttpClient httpClient = new HttpClientFactory().newJsonClient(url, ONAPComponents.EXTERNAL)
210         Response httpResponse = httpClient.post(nssmfRequest)
211
212         int responseCode = httpResponse.getStatus()
213         logger.debug("NSSMF sync response code is: " + responseCode)
214
215         if(responseCode < 199 || responseCode > 299 ){
216             String nssmfResponse ="NSSMF response have nobody"
217             if(httpResponse.hasEntity())
218                 nssmfResponse = httpResponse.readEntity(String.class)
219             logger.trace("received error message from NSSMF : "+nssmfResponse)
220             logger.trace("Exit sendCreateRequestNSSMF in DoAllocateNSSI()")
221             exceptionUtil.buildAndThrowWorkflowException(execution, responseCode, "Received a Bad Sync Response from NSSMF.")
222         }
223
224         if(httpResponse.hasEntity()){
225             String nssmfResponse = httpResponse.readEntity(String.class)
226             execution.setVariable("nssmfResponse", nssmfResponse)
227             String nssiId = jsonUtil.getJsonValue(nssmfResponse, "nssiId")
228             String jobId = jsonUtil.getJsonValue(nssmfResponse, "jobId")
229             execution.setVariable("nssiId",nssiId)
230             execution.setVariable("jobId",jobId)
231         }else{
232             exceptionUtil.buildAndThrowWorkflowException(execution, responseCode, "Received a Bad Sync Response from NSSMF.")
233         }
234         logger.trace("Exit sendCreateRequestNSSMF in DoAllocateNSSI()")
235
236     }
237
238     void getNSSMFProgresss(DelegateExecution execution) {
239         logger.trace("Enter getNSSMFProgresss in DoAllocateNSSI()")
240
241         String endpoint = UrnPropertiesReader.getVariable("mso.adapters.nssmf.endpoint", execution)
242         logger.debug( "get NSSMF: " + endpoint)
243
244         //Prepare auth for NSSMF - Begin
245         def authHeader = ""
246         String basicAuth = UrnPropertiesReader.getVariable("mso.nssmf.auth", execution)
247
248         String nssmfRequest = buildNSSMFProgressRequest(execution)
249         String strUrl="/api/rest/provMns/v1/NSS/jobs/"+execution.getVariable("jobId")
250         //send request to update NSSI option - Begin
251         URL url = new URL(endpoint+strUrl)
252         HttpClient httpClient = new HttpClientFactory().newJsonClient(url, ONAPComponents.EXTERNAL)
253         Response httpResponse = httpClient.post(nssmfRequest)
254
255         int responseCode = httpResponse.getStatus()
256         logger.debug("NSSMF sync response code is: " + responseCode)
257
258         if(responseCode < 199 || responseCode > 299){
259             String nssmfResponse ="NSSMF response have nobody"
260             if(httpResponse.hasEntity())
261                 nssmfResponse = httpResponse.readEntity(String.class)
262             logger.trace("received error message from NSSMF : "+nssmfResponse)
263             logger.trace("Exit sendCreateRequestNSSMF in DoAllocateNSSI()")
264             exceptionUtil.buildAndThrowWorkflowException(execution, responseCode, "Received a Bad Sync Response from NSSMF.")
265         }
266
267         if(httpResponse.hasEntity()){
268             String nssmfResponse = httpResponse.readEntity(String.class)
269             Boolean isNSSICreated = false
270             execution.setVariable("nssmfResponse", nssmfResponse)
271             Integer progress = java.lang.Integer.parseInt(jsonUtil.getJsonValue(nssmfResponse, "responseDescriptor.progress"))
272             String status = jsonUtil.getJsonValue(nssmfResponse, "responseDescriptor.status")
273             String statusDescription = jsonUtil.getJsonValue(nssmfResponse, "responseDescriptor.statusDescription")
274             execution.setVariable("nssmfProgress",progress)
275             execution.setVariable("nssmfStatus",status)
276             execution.setVariable("nddmfStatusDescription",statusDescription)
277             if(progress>99)
278                 isNSSICreated = true
279             execution.setVariable("isNSSICreated",isNSSICreated)
280
281         }else{
282             exceptionUtil.buildAndThrowWorkflowException(execution, responseCode, "Received a Bad Sync Response from NSSMF.")
283         }
284         logger.trace("Exit getNSSMFProgresss in DoAllocateNSSI()")
285
286     }
287
288     void updateRelationship(DelegateExecution execution) {
289         logger.trace("Enter updateRelationship in DoAllocateNSSI()")
290         String nssiInstanceId = execution.getVariable("nssiInstanceId")
291         String nsiInstanceId = execution.getVariable("nsiServiceInstanceId")
292         try{
293             AAIResourceUri nsiServiceuri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, nsiInstanceId);
294             AAIResourceUri nssiServiceUri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, nssiInstanceId)
295             getAAIClient().connect(nsiServiceuri, nssiServiceUri, AAIEdgeLabel.COMPOSED_OF);
296         }catch(Exception ex) {
297             String msg = "Exception in DoAllocateNSSI InstantiateNSSI service while creating relationship " + ex.getMessage()
298             logger.info(msg)
299             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
300         }
301         logger.trace("Exit updateRelationship in DoAllocateNSSI()")
302     }
303
304
305     void instantiateNSSIService(DelegateExecution execution) {
306         logger.trace("Enter instantiateNSSIService in DoAllocateNSSI()")
307         //String nssiInstanceId = execution.getVariable("nssiInstanceId")
308         String nssiInstanceId = execution.getVariable("nssiId")
309         execution.setVariable("nssiInstanceId",nssiInstanceId)
310         String sliceInstanceId = execution.getVariable("nsiServiceInstanceId")
311         try {
312             org.onap.aai.domain.yang.ServiceInstance nssi = new ServiceInstance();
313             Map<String, Object> serviceProfileMap = execution.getVariable("serviceProfile")
314
315             nssi.setServiceInstanceId(nssiInstanceId)
316             nssi.setServiceInstanceName(execution.getVariable("nssiServiceName"))
317             //nssi.setServiceType(execution.getVariable("nssiServiceType"))
318             nssi.setServiceType(serviceProfileMap.get("sST").toString())
319             String serviceStatus = "deactivated"
320             nssi.setOrchestrationStatus(serviceStatus)
321             String modelInvariantUuid = execution.getVariable("nssiServiceInvariantUuid")
322             String modelUuid = execution.getVariable("nssiServiceUuid")
323             nssi.setModelInvariantId(modelInvariantUuid)
324             nssi.setModelVersionId(modelUuid)
325             String uuiRequest = execution.getVariable("uuiRequest")
326             String serviceInstanceLocationid = jsonUtil.getJsonValue(uuiRequest, "service.parameters.requestInputs.plmnIdList")
327             nssi.setServiceInstanceLocationId(serviceInstanceLocationid)
328             //String snssai = jsonUtil.getJsonValue(uuiRequest, "service.parameters.requestInputs.sNSSAI")
329             String envContext=execution.getVariable("nsstDomain")
330             nssi.setEnvironmentContext(envContext)
331             nssi.setServiceRole(execution.getVariable("serviceRole"))
332             AAIResourcesClient client = new AAIResourcesClient()
333             AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, execution.getVariable("globalSubscriberId"), execution.getVariable("subscriptionServiceType"), nssiInstanceId)
334             client.create(uri, nssi)
335         } catch (BpmnError e) {
336             throw e
337         } catch (Exception ex) {
338             String msg = "Exception in DoCreateSliceServiceInstance.instantiateSliceService. " + ex.getMessage()
339             logger.info(msg)
340             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
341         }
342         try{
343             AAIResourceUri nsiServiceuri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, sliceInstanceId);
344             AAIResourceUri nssiServiceUri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, nssiInstanceId)
345             getAAIClient().connect(nsiServiceuri, nssiServiceUri, AAIEdgeLabel.COMPOSED_OF);
346         }catch(Exception ex) {
347             String msg = "Exception in DoAllocateNSSI InstantiateNSSI service while creating relationship " + ex.getMessage()
348             logger.info(msg)
349             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
350         }
351
352
353
354         def rollbackData = execution.getVariable("RollbackData")
355         if (rollbackData == null) {
356             rollbackData = new RollbackData();
357         }
358         //rollbackData.put("SERVICEINSTANCE", "disableRollback", idisableRollback.toStrng())
359         rollbackData.put("SERVICEINSTANCE", "rollbackAAI", "true")
360         rollbackData.put("SERVICEINSTANCE", "serviceInstanceId", nssiInstanceId)
361         rollbackData.put("SERVICEINSTANCE", "subscriptionServiceType", execution.getVariable("subscriptionServiceType"))
362         rollbackData.put("SERVICEINSTANCE", "globalSubscriberId", execution.getVariable("globalSubscriberId"))
363         execution.setVariable("rollbackData", rollbackData)
364         execution.setVariable("RollbackData", rollbackData)
365         logger.debug("RollbackData:" + rollbackData)
366         logger.trace("Exit instantiateNSSIService in DoAllocateNSSI()")
367     }
368
369
370     void createSliceProfile(DelegateExecution execution) {
371         logger.trace("Enter createSliceProfile in DoAllocateNSSI()")
372         String sliceserviceInstanceId = execution.getVariable("nssiInstanceId")
373         String nssiProfileID = execution.getVariable("nssiProfileID")
374         Map<String, Object> sliceProfileMap = execution.getVariable("sliceProfileCn")
375         Map<String, Object> serviceProfileMap = execution.getVariable("serviceProfile")
376         SliceProfile sliceProfile = new SliceProfile()
377         sliceProfile.setServiceAreaDimension("")
378         sliceProfile.setPayloadSize(0)
379         sliceProfile.setJitter(0)
380         sliceProfile.setSurvivalTime(0)
381         //sliceProfile.setCsAvailability()
382         //sliceProfile.setReliability()
383         sliceProfile.setExpDataRate(0)
384         sliceProfile.setTrafficDensity(0)
385         sliceProfile.setConnDensity(0)
386         sliceProfile.setExpDataRateUL(Integer.parseInt(sliceProfileMap.get("expDataRateUL").toString()))
387         sliceProfile.setExpDataRateDL(Integer.parseInt(sliceProfileMap.get("expDataRateDL").toString()))
388         sliceProfile.setActivityFactor(Integer.parseInt(sliceProfileMap.get("activityFactor").toString()))
389         sliceProfile.setResourceSharingLevel(sliceProfileMap.get("activityFactor").toString())
390         sliceProfile.setUeMobilityLevel(serviceProfileMap.get("uEMobilityLevel").toString())
391         sliceProfile.setCoverageAreaTAList(serviceProfileMap.get("coverageAreaTAList").toString())
392         sliceProfile.setMaxNumberOfUEs(Integer.parseInt(sliceProfileMap.get("activityFactor").toString()))
393         sliceProfile.setLatency(Integer.parseInt(sliceProfileMap.get("latency").toString()))
394         sliceProfile.setProfileId(nssiProfileID)
395         sliceProfile.setE2ELatency(0)
396
397         try {
398             AAIResourcesClient client = new AAIResourcesClient()
399             AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SLICE_PROFILE,
400                     execution.getVariable("globalSubscriberId"), execution.getVariable("subscriptionServiceType"), sliceserviceInstanceId, nssiProfileID)
401             client.create(uri, sliceProfile)
402         } catch (BpmnError e) {
403             throw e
404         } catch (Exception ex) {
405             String msg = "Exception in DoCreateSliceServiceInstance.instantiateSliceService. " + ex.getMessage()
406             logger.info(msg)
407             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
408         }
409
410         def rollbackData = execution.getVariable("RollbackData")
411         if (rollbackData == null) {
412             rollbackData = new RollbackData();
413         }
414         //rollbackData.put("SERVICEINSTANCE", "disableRollback", disableRollback.toString())
415         rollbackData.put("SERVICEINSTANCE", "rollbackAAI", "true")
416         rollbackData.put("SERVICEINSTANCE", "serviceInstanceId", sliceserviceInstanceId)
417         rollbackData.put("SERVICEINSTANCE", "subscriptionServiceType", execution.getVariable("serviceType"))
418         rollbackData.put("SERVICEINSTANCE", "globalSubscriberId", execution.getVariable("globalSubscriberId"))
419         execution.setVariable("rollbackData", rollbackData)
420         execution.setVariable("RollbackData", rollbackData)
421         logger.debug("RollbackData:" + rollbackData)
422         logger.trace("Exit createSliceProfile in DoAllocateNSSI()")
423     }
424
425
426     String buildCreateNSSMFRequest(DelegateExecution execution, String domain) {
427
428         NssiAllocateRequest request = new NssiAllocateRequest()
429         String strRequest = ""
430         //String uuiRequest = execution.getVariable("uuiRequest")
431         SliceTaskParams sliceTaskParams = execution.getVariable("sliceTaskParams")
432
433         switch (domain) {
434             case "AN":
435                 EsrInfo esrInfo = new EsrInfo()
436                 esrInfo.setNetworkType(execution.getVariable("networkType"))
437                 esrInfo.setVendor(execution.getVariable("nsstVendor"))
438
439                 NsiInfo nsiInfo = new NsiInfo()
440                 nsiInfo.setNsiId(execution.getVariable("nsiInstanceID"))
441                 nsiInfo.setNsiName(execution.getVariable("nsiInstanceName"))
442
443                 AnSliceProfile anSliceProfile = new AnSliceProfile()
444                 anSliceProfile.setLatency(execution.getVariable("latency"))
445                 anSliceProfile.setCoverageAreaTAList(execution.getVariable("coverageAreaList"))
446                 anSliceProfile.setQi(execution.getVariable("qi"))
447
448                 AllocateAnNssi allocateAnNssi = new AllocateAnNssi()
449                 allocateAnNssi.setNsstId(execution.getVariable("nsstId"))
450                 allocateAnNssi.setNssiName(execution.getVariable("nssiName"))
451                 allocateAnNssi.setNsiInfo(nsiInfo)
452                 allocateAnNssi.setSliceProfile(anSliceProfile)
453                 String anScriptName = sliceTaskParams.getAnScriptName()
454                 allocateAnNssi.setScriptName(anScriptName)
455
456                 request.setAllocateAnNssi(allocateAnNssi)
457                 request.setEsrInfo(esrInfo)
458                 break;
459             case "CN":
460                 Map<String, Object> sliceProfileCn =execution.getVariable("sliceProfileCn")
461                 Map<String, Object> serviceProfile = execution.getVariable("serviceProfile")
462                 NsiInfo nsiInfo = new NsiInfo()
463                 nsiInfo.setNsiId(execution.getVariable("nsiServiceInstanceId"))
464                 nsiInfo.setNsiName(execution.getVariable("nsiServiceInstanceName"))
465
466                 EsrInfo esrInfo = new EsrInfo()
467                 esrInfo.setNetworkType(NetworkType.fromString(domain))
468                 esrInfo.setVendor(execution.getVariable("nsstVendor"))
469                 execution.setVariable("esrInfo",esrInfo)
470
471
472                 PerfReqEmbbList perfReqEmbb = new PerfReqEmbbList()
473                 perfReqEmbb.setActivityFactor(sliceProfileCn.get("activityFactor"))
474                 perfReqEmbb.setAreaTrafficCapDL(sliceProfileCn.get("areaTrafficCapDL"))
475                 perfReqEmbb.setAreaTrafficCapUL(sliceProfileCn.get("areaTrafficCapUL"))
476                 perfReqEmbb.setExpDataRateDL(sliceProfileCn.get("expDataRateDL"))
477                 perfReqEmbb.setExpDataRateUL(sliceProfileCn.get("expDataRateUL"))
478
479                 List<PerfReqEmbbList> listPerfReqEmbbList = new ArrayList<>()
480                 listPerfReqEmbbList.add(perfReqEmbb)
481
482                 PerfReq perfReq = new PerfReq()
483                 perfReq.setPerfReqEmbbList(listPerfReqEmbbList)
484
485                 PerfReqUrllcList perfReqUrllc = new PerfReqUrllcList()
486                 perfReqUrllc.setConnDensity(0)
487                 perfReqUrllc.setTrafficDensity(0)
488                 perfReqUrllc.setExpDataRate(0)
489                 perfReqUrllc.setReliability(0)
490                 perfReqUrllc.setCsAvailability(0)
491                 perfReqUrllc.setSurvivalTime(0)
492                 perfReqUrllc.setJitter(0)
493                 perfReqUrllc.setE2eLatency(0)
494                 perfReqUrllc.setPayloadSize("0")
495                 perfReqUrllc.setServiceAreaDimension("")
496
497                 List<PerfReqUrllcList> perfReqUrllcList = new ArrayList<>()
498                 perfReqUrllcList.add(perfReqUrllc)
499                 perfReq.setPerfReqUrllcList(perfReqUrllcList)
500
501                 CnSliceProfile cnSliceProfile = new CnSliceProfile()
502                 cnSliceProfile.setSliceProfileId(execution.getVariable("nssiProfileID"))
503                 String plmnStr = serviceProfile.get("plmnIdList")
504                 List<String> plmnIdList=Arrays.asList(plmnStr.split("\\|"))
505                 cnSliceProfile.setPlmnIdList(plmnIdList)
506
507                 String resourceSharingLevel = serviceProfile.get("resourceSharingLevel").toString()
508                 cnSliceProfile.setResourceSharingLevel(ResourceSharingLevel.fromString(resourceSharingLevel))
509
510                 String coverageArea = serviceProfile.get("coverageAreaTAList")
511                 List<String> coverageAreaList=Arrays.asList(coverageArea.split("\\|"))
512                 cnSliceProfile.setCoverageAreaTAList(coverageAreaList)
513
514                 String ueMobilityLevel = serviceProfile.get("uEMobilityLevel").toString()
515                 cnSliceProfile.setUeMobilityLevel(UeMobilityLevel.fromString(ueMobilityLevel))
516
517                 int latency = serviceProfile.get("latency")
518                 cnSliceProfile.setLatency(latency)
519
520                 int maxUE = serviceProfile.get("maxNumberofUEs")
521                 cnSliceProfile.setMaxNumberofUEs(maxUE)
522
523                 String snssai = serviceProfile.get("sNSSAI")
524                 List<String> snssaiList = Arrays.asList(snssai.split("\\|"))
525                 cnSliceProfile.setSnssaiList(snssaiList)
526
527                 cnSliceProfile.setPerfReq(perfReq)
528
529                 AllocateCnNssi allocateCnNssi = new AllocateCnNssi()
530                 allocateCnNssi.setNsstId(execution.getVariable("nsstid"))
531                 allocateCnNssi.setNssiName(execution.getVariable("nssiName"))
532                 allocateCnNssi.setSliceProfile(cnSliceProfile)
533                 allocateCnNssi.setNsiInfo(nsiInfo)
534                 String cnScriptName = sliceTaskParams.getCnScriptName()
535                 allocateCnNssi.setScriptName(cnScriptName)
536                 request.setAllocateCnNssi(allocateCnNssi)
537                 request.setEsrInfo(esrInfo)
538                 break;
539             case "TN":
540                 EsrInfo esrInfo = new EsrInfo()
541                 esrInfo.setNetworkType(execution.getVariable("networkType"))
542                 esrInfo.setVendor(execution.getVariable("vendor"))
543
544                 TnSliceProfile tnSliceProfile = new TnSliceProfile()
545                 tnSliceProfile.setLatency(execution.getVariable("latency"))
546                 tnSliceProfile.setBandwidth(execution.getVariable("bandWidth"))
547
548                 NsiInfo nsiInfo = new NsiInfo()
549                 nsiInfo.setNsiId(execution.getVariable("nsiInstanceID"))
550                 nsiInfo.setNsiName(execution.getVariable("nsiInstanceName"))
551
552                 AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
553                 allocateTnNssi.setSliceProfile(tnSliceProfile)
554                 allocateTnNssi.setNsiInfo(nsiInfo)
555                 allocateTnNssi.setNsstId(execution.getVariable("nsstid"))
556                 String tnScriptName = sliceTaskParams.getTnScriptName()
557                 allocateTnNssi.setScriptName(tnScriptName)
558
559                 request.setAllocateTnNssi(allocateTnNssi)
560                 request.setEsrInfo(esrInfo)
561                 break;
562             default:
563                 break;
564         }
565         try {
566             strRequest = MAPPER.writeValueAsString(request);
567         } catch (IOException e) {
568             logger.error("Invalid get progress request bean to convert as string");
569             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "Invalid get progress request bean to convert as string")
570         }
571         return strRequest
572     }
573
574
575     String buildUpdateNSSMFRequest(DelegateExecution execution, String domain) {
576         NssiAllocateRequest request = new NssiAllocateRequest()
577         String nsstInput = execution.getVariable("nsstInput")
578         String nssiId = jsonUtil.getJsonValue(nsstInput, "serviceInstanceId")
579         String strRequest = ""
580         SliceTaskParams sliceTaskParams = execution.getVariable("sliceTaskParams")
581         switch (domain) {
582             case "AN":
583                 EsrInfo esrInfo = new EsrInfo()
584                 esrInfo.setNetworkType(execution.getVariable("nsstType"))
585                 esrInfo.setVendor(execution.getVariable("vendor"))
586
587                 NsiInfo nsiInfo = new NsiInfo()
588                 nsiInfo.setNsiId(execution.getVariable("nsiInstanceID"))
589                 nsiInfo.setNsiName(execution.getVariable("nsiInstanceName"))
590
591                 AnSliceProfile anSliceProfile = new AnSliceProfile()
592                 anSliceProfile.setLatency(execution.getVariable("latency"))
593                 anSliceProfile.setCoverageAreaTAList(execution.getVariable("coverageAreaList"))
594                 anSliceProfile.setQi(execution.getVariable("qi"))
595
596                 AllocateAnNssi allocateAnNssi = new AllocateAnNssi()
597                 allocateAnNssi.setNsstId(execution.getVariable("nsstId"))
598                 allocateAnNssi.setNssiName(execution.getVariable("nssiName"))
599                 allocateAnNssi.setNsiInfo(nsiInfo)
600                 allocateAnNssi.setSliceProfile(anSliceProfile)
601                 String anScriptName = sliceTaskParams.getAnScriptName()
602                 allocateAnNssi.setScriptName(anScriptName)
603                 request.setAllocateAnNssi(allocateAnNssi)
604                 request.setEsrInfo(esrInfo)
605                 break;
606             case "CN":
607                 Map<String, Object> sliceProfileCn =execution.getVariable("sliceProfileCn")
608                 Map<String, Object> serviceProfile = execution.getVariable("serviceProfile")
609                 NsiInfo nsiInfo = new NsiInfo()
610                 nsiInfo.setNsiId(execution.getVariable("nsiServiceInstanceId"))
611                 nsiInfo.setNsiName(execution.getVariable("nsiServiceInstanceName"))
612
613                 EsrInfo esrInfo = new EsrInfo()
614                 esrInfo.setNetworkType(NetworkType.fromString(domain))
615                 esrInfo.setVendor(execution.getVariable("nsstVendor"))
616                 execution.setVariable("esrInfo",esrInfo)
617
618
619                 PerfReqEmbbList perfReqEmbb = new PerfReqEmbbList()
620                 perfReqEmbb.setActivityFactor(sliceProfileCn.get("activityFactor"))
621                 perfReqEmbb.setAreaTrafficCapDL(sliceProfileCn.get("areaTrafficCapDL"))
622                 perfReqEmbb.setAreaTrafficCapUL(sliceProfileCn.get("areaTrafficCapUL"))
623                 perfReqEmbb.setExpDataRateDL(sliceProfileCn.get("expDataRateDL"))
624                 perfReqEmbb.setExpDataRateUL(sliceProfileCn.get("expDataRateUL"))
625
626                 List<PerfReqEmbbList> listPerfReqEmbbList = new ArrayList<>()
627                 listPerfReqEmbbList.add(perfReqEmbb)
628
629                 PerfReq perfReq = new PerfReq()
630                 perfReq.setPerfReqEmbbList(listPerfReqEmbbList)
631
632                 PerfReqUrllcList perfReqUrllc = new PerfReqUrllcList()
633                 perfReqUrllc.setConnDensity(0)
634                 perfReqUrllc.setTrafficDensity(0)
635                 perfReqUrllc.setExpDataRate(0)
636                 perfReqUrllc.setReliability(0)
637                 perfReqUrllc.setCsAvailability(0)
638                 perfReqUrllc.setSurvivalTime(0)
639                 perfReqUrllc.setJitter(0)
640                 perfReqUrllc.setE2eLatency(0)
641                 perfReqUrllc.setPayloadSize("0")
642                 perfReqUrllc.setServiceAreaDimension("")
643
644                 List<PerfReqUrllcList> perfReqUrllcList = new ArrayList<>()
645                 perfReqUrllcList.add(perfReqUrllc)
646                 perfReq.setPerfReqUrllcList(perfReqUrllcList)
647
648                 CnSliceProfile cnSliceProfile = new CnSliceProfile()
649                 cnSliceProfile.setSliceProfileId(execution.getVariable("nssiProfileID"))
650                 String plmnStr = serviceProfile.get("plmnIdList")
651                 List<String> plmnIdList=Arrays.asList(plmnStr.split("\\|"))
652                 cnSliceProfile.setPlmnIdList(plmnIdList)
653
654                 String resourceSharingLevel = serviceProfile.get("resourceSharingLevel").toString()
655                 cnSliceProfile.setResourceSharingLevel(ResourceSharingLevel.fromString(resourceSharingLevel))
656
657                 String coverageArea = serviceProfile.get("coverageAreaTAList")
658                 List<String> coverageAreaList=Arrays.asList(coverageArea.split("\\|"))
659                 cnSliceProfile.setCoverageAreaTAList(coverageAreaList)
660
661                 String ueMobilityLevel = serviceProfile.get("uEMobilityLevel").toString()
662                 cnSliceProfile.setUeMobilityLevel(UeMobilityLevel.fromString(ueMobilityLevel))
663
664                 int latency = serviceProfile.get("latency")
665                 cnSliceProfile.setLatency(latency)
666
667                 int maxUE = serviceProfile.get("maxNumberofUEs")
668                 cnSliceProfile.setMaxNumberofUEs(maxUE)
669
670                 String snssai = serviceProfile.get("sNSSAI")
671                 List<String> snssaiList = Arrays.asList(snssai.split("\\|"))
672                 cnSliceProfile.setSnssaiList(snssaiList)
673
674                 cnSliceProfile.setPerfReq(perfReq)
675
676                 AllocateCnNssi allocateCnNssi = new AllocateCnNssi()
677                 allocateCnNssi.setNsstId(execution.getVariable("nsstid"))
678                 allocateCnNssi.setNssiName(execution.getVariable("nssiName"))
679                 allocateCnNssi.setSliceProfile(cnSliceProfile)
680                 allocateCnNssi.setNsiInfo(nsiInfo)
681                 allocateCnNssi.setNssiId(nssiId)              // need to check this
682                 String cnScriptName = sliceTaskParams.getCnScriptName()
683                 allocateCnNssi.setScriptName(cnScriptName)
684                 request.setAllocateCnNssi(allocateCnNssi)
685                 request.setEsrInfo(esrInfo)
686                 break;
687             case "TN":
688                 EsrInfo esrInfo = new EsrInfo()
689                 esrInfo.setNetworkType(execution.getVariable("networkType"))
690                 esrInfo.setVendor(execution.getVariable("vendor"))
691
692                 TnSliceProfile tnSliceProfile = new TnSliceProfile()
693                 tnSliceProfile.setLatency(execution.getVariable("latency"))
694                 tnSliceProfile.setBandwidth(execution.getVariable("bandWidth"))
695
696                 NsiInfo nsiInfo = new NsiInfo()
697                 nsiInfo.setNsiId(execution.getVariable("nsiInstanceID"))
698                 nsiInfo.setNsiName(execution.getVariable("nsiInstanceName"))
699
700                 AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
701                 allocateTnNssi.setSliceProfile(tnSliceProfile)
702                 allocateTnNssi.setNsiInfo(nsiInfo)
703                 allocateTnNssi.setNsstId(execution.getVariable("nsstid"))
704                 String tnScriptName = sliceTaskParams.getTnScriptName()
705                 allocateTnNssi.setScriptName(tnScriptName)
706                 request.setAllocateTnNssi(allocateTnNssi)
707                 request.setEsrInfo(esrInfo)
708                 break;
709             default:
710                 break;
711         }
712         try {
713             strRequest = MAPPER.writeValueAsString(request);
714         } catch (IOException e) {
715             logger.error("Invalid get progress request bean to convert as string");
716             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "Invalid get progress request bean to convert as string")
717         }
718         return strRequest
719     }
720
721     String buildNSSMFProgressRequest(DelegateExecution execution){
722         JobStatusRequest request = new JobStatusRequest()
723         String strRequest = ""
724         EsrInfo esrInfo = execution.getVariable("esrInfo")
725         request.setNsiId(execution.getVariable("nsiServiceInstanceId"))
726         request.setNssiId(execution.getVariable("nssiId"))
727         request.setEsrInfo(esrInfo)
728
729         try {
730             strRequest = MAPPER.writeValueAsString(request);
731         } catch (IOException e) {
732             logger.error("Invalid get progress request bean to convert as string");
733             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "Invalid get progress request bean to convert as string")
734         }
735         return strRequest
736     }
737
738     public void prepareUpdateOrchestrationTask(DelegateExecution execution) {
739         logger.debug("Start prepareUpdateOrchestrationTask progress")
740         String requestMethod = "PUT"
741         String progress = execution.getVariable("nssmfProgress")
742         String status = execution.getVariable("nssmfStatus")
743         String statusDescription=execution.getVariable("nddmfStatusDescription")
744         SliceTaskParams sliceTaskParams = execution.getVariable("sliceTaskParams")
745         String domain = execution.getVariable("nsstDomain")
746         switch (domain.toUpperCase()) {
747             case "AN":
748                 sliceTaskParams.setAnProgress(progress)
749                 sliceTaskParams.setAnStatus(status)
750                 sliceTaskParams.setAnStatusDescription(statusDescription)
751                 break;
752             case "CN":
753                 sliceTaskParams.setCnProgress(progress)
754                 sliceTaskParams.setCnStatus(status)
755                 sliceTaskParams.setCnStatusDescription(statusDescription)
756                 break;
757             case "TN":
758                 sliceTaskParams.setTnProgress(progress)
759                 sliceTaskParams.setTnStatus(status)
760                 sliceTaskParams.setTnStatusDescription(statusDescription)
761                 break;
762             default:
763                 break;
764         }
765         String paramJson = sliceTaskParams.convertToJson()
766         execution.setVariable("CSSOT_paramJson", paramJson)
767         execution.setVariable("CSSOT_requestMethod", requestMethod)
768         logger.debug("Finish prepareUpdateOrchestrationTask progress")
769     }
770
771 }