Merge "Add missing code for enabling VNF LCM features"
[so.git] / bpmn / so-bpmn-infrastructure-common / src / main / groovy / org / onap / so / bpmn / infrastructure / scripts / DoAllocateNSIandNSSI.groovy
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  # Copyright (c) 2020, CMCC Technologies Co., Ltd.
6  #
7  # Licensed under the Apache License, Version 2.0 (the "License")
8  # you may not use this file except in compliance with the License.
9  # You may obtain a copy of the License at
10  #
11  #       http://www.apache.org/licenses/LICENSE-2.0
12  #
13  # Unless required by applicable law or agreed to in writing, software
14  # distributed under the License is distributed on an "AS IS" BASIS,
15  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  # See the License for the specific language governing permissions and
17  # limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.so.bpmn.infrastructure.scripts
22
23 import org.onap.aai.domain.yang.NetworkRoute
24 import org.onap.so.beans.nsmf.ConnectionLink
25 import org.onap.so.beans.nsmf.EndPoint
26 import org.onap.so.beans.nsmf.NsiInfo
27 import org.onap.so.beans.nsmf.SliceProfileAdapter
28 import org.onap.so.beans.nsmf.TransportSliceNetwork
29 import org.onap.so.beans.nsmf.oof.SubnetType
30 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
31 import javax.ws.rs.NotFoundException
32 import org.camunda.bpm.engine.delegate.BpmnError
33 import org.camunda.bpm.engine.delegate.DelegateExecution
34 import org.onap.aai.domain.yang.Relationship
35 import org.onap.aai.domain.yang.ServiceInstance
36 import org.onap.aai.domain.yang.SliceProfile
37 import org.onap.aaiclient.client.aai.AAINamespaceConstants
38 import org.onap.aaiclient.client.aai.AAIResourcesClient
39 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
40 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
41 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
42 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder
43 import org.onap.so.beans.nsmf.AllocateAnNssi
44 import org.onap.so.beans.nsmf.AllocateCnNssi
45 import org.onap.so.beans.nsmf.AllocateTnNssi
46 import org.onap.so.beans.nsmf.EsrInfo
47 import org.onap.so.beans.nsmf.NssiResponse
48 import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest
49 import org.onap.so.beans.nsmf.ServiceInfo
50 import org.onap.so.beans.nsmf.SliceTaskInfo
51 import org.onap.so.beans.nsmf.SliceTaskParamsAdapter
52 import org.onap.so.bpmn.common.scripts.ExceptionUtil
53 import org.onap.so.bpmn.core.json.JsonUtils
54 import org.slf4j.Logger
55 import org.slf4j.LoggerFactory
56 import static org.apache.commons.lang3.StringUtils.isBlank
57 import org.onap.aaiclient.client.aai.AAIObjectType
58
59 class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
60
61     private static final Logger logger = LoggerFactory.getLogger(DoAllocateNSIandNSSI.class);
62
63     ExceptionUtil exceptionUtil = new ExceptionUtil()
64
65     JsonUtils jsonUtil = new JsonUtils()
66
67     AnNssmfUtils anNssmfUtils = new AnNssmfUtils()
68
69     AAIResourcesClient client = getAAIClient()
70
71     /**
72      * Pre Process the BPMN Flow Request
73      * Inclouds:
74      * generate the nsOperationKey
75      * generate the nsParameters
76      */
77
78     void preProcessRequest (DelegateExecution execution) {
79         String msg = ""
80         logger.trace("Enter preProcessRequest()")
81         Map<String, Object> nssiMap = new HashMap<>()
82         int nsstCount=execution.getVariable("nsstCount") as int
83         if(nsstCount==5){
84             execution.setVariable("processFHandMH", true)
85         }
86         else{
87             execution.setVariable("processFHandMH", false)
88         }
89         execution.setVariable("nssiMap", nssiMap)
90         boolean isMoreNSSTtoProcess = true
91         execution.setVariable("isMoreNSSTtoProcess", isMoreNSSTtoProcess)
92         List<String> nsstSequence = new ArrayList<>(Arrays.asList("cn"))
93         execution.setVariable("nsstSequence", nsstSequence)
94         logger.trace("Exit preProcessRequest")
95     }
96
97     /**
98      * Process NSI options
99      * @param execution
100      */
101     void retriveSliceOption(DelegateExecution execution) {
102         logger.trace("Enter retriveSliceOption() of DoAllocateNSIandNSSI")
103
104         boolean isNSIOptionAvailable
105
106         SliceTaskParamsAdapter sliceParams =
107                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
108
109         if(isBlank(sliceParams.getSuggestNsiId())) {
110             isNSIOptionAvailable = false
111         }
112         else {
113             isNSIOptionAvailable = true
114             execution.setVariable('nsiServiceInstanceId', sliceParams.getSuggestNsiId())
115             execution.setVariable('nsiServiceInstanceName', sliceParams.getSuggestNsiName())
116         }
117         execution.setVariable("isNSIOptionAvailable", isNSIOptionAvailable)
118         logger.trace("Exit retriveSliceOption() of DoAllocateNSIandNSSI")
119     }
120
121
122     /**
123      * create nsi instance in aai
124      * @param execution
125      */
126     void createNSIinAAI(DelegateExecution execution) {
127         logger.debug("Enter CreateNSIinAAI in DoAllocateNSIandNSSI()")
128
129         String sliceInstanceId = UUID.randomUUID().toString()
130         SliceTaskParamsAdapter sliceParams =
131                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
132
133         //set new nsiId to sliceParams suggestNsiId
134         ServiceInstance nsi = new ServiceInstance()
135
136         String sliceInstanceName = "nsi_"+execution.getVariable("sliceServiceInstanceName")
137         String serviceType = sliceParams.serviceProfile.get("sST")
138         String serviceStatus = "deactivated"
139         String modelInvariantUuid = sliceParams.getNSTInfo().invariantUUID
140         String modelUuid = sliceParams.getNSTInfo().UUID
141         String serviceFunction = sliceParams.serviceProfile.get("resourceSharingLevel")
142
143         sliceParams.setSuggestNsiId(sliceInstanceId)
144         sliceParams.setSuggestNsiName(sliceInstanceName)
145
146         String uuiRequest = execution.getVariable("uuiRequest")
147         String serviceInstanceLocationid = jsonUtil.getJsonValue(uuiRequest, "service.parameters.requestInputs.plmnIdList")
148         String serviceRole = "nsi"
149
150         execution.setVariable("sliceInstanceId", sliceInstanceId)
151         nsi.setServiceInstanceId(sliceInstanceId)
152         nsi.setServiceInstanceName(sliceInstanceName)
153         nsi.setServiceType(serviceType)
154         nsi.setOrchestrationStatus(serviceStatus)
155         nsi.setModelInvariantId(modelInvariantUuid)
156         nsi.setModelVersionId(modelUuid)
157         nsi.setServiceInstanceLocationId(serviceInstanceLocationid)
158         nsi.setServiceRole(serviceRole)
159         nsi.setServiceFunction(serviceFunction)
160         String msg
161         try {
162
163             AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
164                     .customer(execution.getVariable("globalSubscriberId"))
165                     .serviceSubscription(execution.getVariable("subscriptionServiceType"))
166                     .serviceInstance(sliceInstanceId))
167             client.create(nsiServiceUri, nsi)
168
169             execution.setVariable("nsiServiceUri", nsiServiceUri)
170
171         } catch (BpmnError e) {
172             throw e
173         } catch (Exception ex) {
174             msg = "Exception in DoAllocateNSIandNSSI.createNSIinAAI: " + ex.getMessage()
175             logger.info(msg)
176             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
177         }
178         execution.setVariable("sliceTaskParams", sliceParams)
179
180         logger.debug("Exit CreateNSIinAAI in DoAllocateNSIandNSSI()")
181     }
182
183
184     /**
185      * create relationship between nsi and service profile instance
186      * @param execution
187      */
188     void createRelationship(DelegateExecution execution) {
189         //relation ship
190         logger.debug("Enter createRelationship in DoAllocateNSIandNSSI")
191         //String allottedResourceId = execution.getVariable("allottedResourceId")
192         //SliceTaskParamsAdapter sliceParams =
193         //        execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
194         String msg
195         try {
196
197             AAIResourceUri nsiServiceUri = execution.getVariable("nsiServiceUri") as AAIResourceUri
198             logger.debug("Creating Allotted resource relationship, nsiServiceUri: " + nsiServiceUri.toString())
199
200             //AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceParams.suggestNsiId).allottedResource(allottedResourceId))
201
202             AAIResourceUri allottedResourceUri = execution.getVariable("allottedResourceUri") as AAIResourceUri
203             logger.debug("Creating Allotted resource relationship, allottedResourceUri: " + allottedResourceUri.toString())
204
205             client.connect(allottedResourceUri, nsiServiceUri)
206         } catch (BpmnError e) {
207             throw e
208         } catch (Exception ex) {
209             msg = "Exception in DoAllocateNSIandNSSI.createRelationship. " + ex.getMessage()
210             logger.info(msg)
211             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
212         }
213         logger.debug("Exit createRelationship in DoAllocateNSIandNSSI")
214     }
215
216     /**
217      *
218      * @param execution
219      */
220     void updateRelationship(DelegateExecution execution) {
221         logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
222         //todo: allottedResourceId
223         String allottedResourceId = execution.getVariable("allottedResourceId")
224         //Need to check whether nsi exist : Begin
225
226         SliceTaskParamsAdapter sliceParams =
227                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
228
229         String nsiServiceInstanceID = sliceParams.getSuggestNsiId()
230         //sliceParams.setServiceId(nsiServiceInstanceID)
231
232         AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
233                 .customer(execution.getVariable("globalSubscriberId"))
234                 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
235                 .serviceInstance(nsiServiceInstanceID))
236
237         try {
238             AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
239             Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
240             if (!si.isPresent()) {
241                 String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
242                 logger.debug(msg)
243                 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
244             }
245
246             //AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceParams.suggestNsiId).allottedResource(allottedResourceId))
247             AAIResourceUri allottedResourceUri = execution.getVariable("allottedResourceUri") as AAIResourceUri
248             logger.debug("updateRelationship Allotted resource relationship, allottedResourceUri: " + allottedResourceUri.toString())
249             client.connect(allottedResourceUri, nsiServiceUri)
250
251             execution.setVariable("sliceTaskParams", sliceParams)
252         }catch(BpmnError e) {
253             throw e
254         }catch (Exception ex){
255             String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
256             logger.debug(msg)
257             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
258         }
259         logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
260     }
261
262     /**
263      * create RAN Slice Profile Instance
264      * @param execution
265      */
266     void createAnSliceProfileInstance(DelegateExecution execution) {
267
268         String globalSubscriberId = execution.getVariable("globalSubscriberId")
269         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
270         String serviceInstanceId = UUID.randomUUID().toString()
271         execution.setVariable("ranSliceProfileInstanceId", serviceInstanceId) //todo:
272
273         String oStatus = "deactivated"
274
275         SliceTaskParamsAdapter sliceParams =
276                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
277         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
278         sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
279         String sliceProfileName = "sliceprofile_an_" + sliceParams.serviceName
280
281         // create slice profile
282         ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, sliceProfileName, oStatus)
283
284         //timestamp format YYYY-MM-DD hh:mm:ss
285         rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
286
287         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
288                 .customer(globalSubscriberId)
289                 .serviceSubscription(subscriptionServiceType)
290                 .serviceInstance(serviceInstanceId))
291         client.create(uri, rspi)
292
293         execution.setVariable("sliceTaskParams", sliceParams)
294     }
295
296     /**
297      * create An Slice Profile
298      * @param execution
299      */
300     void createAnSliceProfile(DelegateExecution execution) {
301
302         String globalSubscriberId = execution.getVariable("globalSubscriberId")
303         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
304         //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
305
306         SliceTaskParamsAdapter sliceParams =
307                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
308         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
309         SliceProfileAdapter anSliceProfile = sliceTaskInfo.sliceProfile
310
311         String profileId = UUID.randomUUID().toString()
312         anSliceProfile.setSliceProfileId(profileId)
313
314         SliceProfile sliceProfile = new SliceProfile()
315         sliceProfile.setProfileId(profileId)
316         sliceProfile.setCoverageAreaTAList(anSliceProfile.coverageAreaTAList)
317         sliceProfile.setMaxNumberOfUEs(anSliceProfile.maxNumberOfUEs)
318         sliceProfile.setLatency(anSliceProfile.latency)
319         sliceProfile.setMaxNumberOfPDUSession(anSliceProfile.maxNumberOfPDUSession)
320         sliceProfile.setExpDataRateDL(anSliceProfile.expDataRateDL)
321         sliceProfile.setExpDataRateUL(anSliceProfile.expDataRateUL)
322         sliceProfile.setAreaTrafficCapDL(anSliceProfile.areaTrafficCapDL)
323         sliceProfile.setAreaTrafficCapUL(anSliceProfile.areaTrafficCapUL)
324         sliceProfile.setOverallUserDensity(anSliceProfile.overallUserDensity)
325         sliceProfile.setActivityFactor(anSliceProfile.activityFactor)
326         sliceProfile.setUeMobilityLevel(anSliceProfile.ueMobilityLevel)
327         sliceProfile.setResourceSharingLevel(anSliceProfile.resourceSharingLevel)
328         sliceProfile.setCsAvailabilityTarget(anSliceProfile.csAvailabilityTarget)
329         sliceProfile.setCsReliabilityMeanTime(anSliceProfile.csReliabilityMeanTime)
330         sliceProfile.setExpDataRate(anSliceProfile.expDataRate)
331         sliceProfile.setMsgSizeByte(anSliceProfile.msgSizeByte)
332         sliceProfile.setTransferIntervalTarget(anSliceProfile.transferIntervalTarget)
333         sliceProfile.setSurvivalTime(anSliceProfile.survivalTime)
334
335         AAIResourceUri uri = AAIUriFactory.createResourceUri(
336             AAIFluentTypeBuilder.business().customer(globalSubscriberId)
337             .serviceSubscription(subscriptionServiceType)
338             .serviceInstance(sliceTaskInfo.sliceInstanceId)
339             .sliceProfile(profileId)
340         )
341         client.create(uri, sliceProfile)
342         execution.setVariable("sliceTaskParams", sliceParams)
343     }
344
345     void createANEndpoint(DelegateExecution execution){
346         logger.debug("Enter createANEndpoint in DoAllocateNSIandNSSI()")
347         SliceTaskParamsAdapter sliceParams =
348                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
349         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
350
351         NetworkRoute route = new NetworkRoute()
352         String routeId = UUID.randomUUID().toString()
353         route.setRouteId(routeId)
354         route.setType("endpoint")
355         route.setRole("AN")
356         route.setFunction("3gppTransportEP")
357         route.setIpAddress( sliceTaskInfo.sliceProfile.ipAddress)
358         route.setNextHop(sliceTaskInfo.sliceProfile.nextHopInfo)
359         route.setLogicalInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
360         route.setAddressFamily("ipv4")
361         route.setPrefixLength(24)
362         sliceTaskInfo.setEndPointId(routeId)
363
364         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(routeId))
365         client.create(uri, route)
366         execution.setVariable("sliceTaskParams", sliceParams)
367         logger.info("an endpointId:" + sliceParams.anSliceTaskInfo.endPointId)
368     }
369
370
371     void createCNEndpoint(DelegateExecution execution){
372         logger.debug("Enter createCNNetworkRoute in DoAllocateNSIandNSSI()")
373         SliceTaskParamsAdapter sliceParams =
374                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
375         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
376
377         NetworkRoute route = new NetworkRoute()
378         String routeId = UUID.randomUUID().toString()
379         route.setRouteId(routeId)
380         route.setType("endpoint")
381         route.setRole("CN")
382         route.setFunction("3gppTransportEP")
383         route.setIpAddress( sliceTaskInfo.sliceProfile.ipAddress)
384         route.setNextHop(sliceTaskInfo.sliceProfile.nextHopInfo)
385         route.setLogicalInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
386         route.setAddressFamily("ipv4")
387         route.setPrefixLength(24)
388
389         sliceTaskInfo.setEndPointId(routeId)
390         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(routeId))
391         client.create(uri, route)
392
393         execution.setVariable("cnEndpointId", routeId)
394         execution.setVariable("sliceTaskParams", sliceParams)
395         logger.info("cn endpointId:" + sliceParams.cnSliceTaskInfo.endPointId)
396     }
397
398     /**
399      * prepare AllocateAnNssi
400      * @param execution
401      */
402     void prepareAllocateAnNssi(DelegateExecution execution) {
403
404         //todo:
405         SliceTaskParamsAdapter sliceParams =
406                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
407         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.getAnSliceTaskInfo()
408
409         NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
410
411         AllocateAnNssi allocateAnNssi = new AllocateAnNssi()
412         allocateAnNssi.setSliceProfile(sliceTaskInfo.getSliceProfile().trans2AnProfile())
413         allocateAnNssi.getSliceProfile().setSliceProfileId(sliceTaskInfo.getSliceInstanceId())
414         allocateAnNssi.setNsstId(sliceTaskInfo.getNSSTInfo().getUUID())
415         allocateAnNssi.setNssiId(sliceTaskInfo.getSuggestNssiId())
416         allocateAnNssi.setNssiName("nssi_an" + execution.getVariable("sliceServiceInstanceName") as String)
417         allocateAnNssi.setScriptName(sliceTaskInfo.getScriptName())
418         NsiInfo nsiInfo = new NsiInfo()
419         nsiInfo.setNsiId(sliceParams.getSuggestNsiId())
420         nsiInfo.setNsiName(sliceParams.getSuggestNsiName())
421         allocateAnNssi.setNsiInfo(nsiInfo)
422         //endPoint
423         EndPoint endPoint = new EndPoint()
424         endPoint.setIpAddress(sliceTaskInfo.getSliceProfile().getIpAddress())
425         endPoint.setLogicInterfaceId(sliceTaskInfo.getSliceProfile().getLogicInterfaceId())
426         endPoint.setNextHopInfo(sliceTaskInfo.getSliceProfile().getNextHopInfo())
427         allocateAnNssi.setEndPoint(endPoint)
428
429         EsrInfo esrInfo = new EsrInfo()
430         //todo: vendor and network
431         esrInfo.setVendor(sliceTaskInfo.getVendor())
432         esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
433
434         String globalSubscriberId = execution.getVariable("globalSubscriberId") as String
435         String subscriptionServiceType = execution.getVariable("subscriptionServiceType") as String
436
437         //todo: service info
438         ServiceInfo serviceInfo = ServiceInfo.builder()
439                 .globalSubscriberId(globalSubscriberId)
440                 .subscriptionServiceType(subscriptionServiceType)
441                 .nsiId(sliceParams.getSuggestNsiId())
442                 .serviceInvariantUuid(sliceTaskInfo.getNSSTInfo().getInvariantUUID())
443                 .serviceUuid(sliceTaskInfo.getNSSTInfo().getUUID())
444                 .sST(sliceTaskInfo.getSliceProfile().getSST() ?: sliceParams.getServiceProfile().get("sST") as String)
445                 .nssiName(sliceTaskInfo.getSuggestNssiId() ? sliceTaskInfo.getNSSTInfo().getName() : allocateAnNssi.getNssiName())
446                 .nssiId(sliceTaskInfo.getSuggestNssiId())
447                 .build()
448
449         nbiRequest.setServiceInfo(serviceInfo)
450         nbiRequest.setEsrInfo(esrInfo)
451         nbiRequest.setAllocateAnNssi(allocateAnNssi)
452
453         execution.setVariable("AnAllocateNssiNbiRequest", nbiRequest)
454         execution.setVariable("anSliceTaskInfo", sliceTaskInfo)
455         execution.setVariable("anSubnetType", SubnetType.AN)
456     }
457
458
459     /**
460      * create RAN Slice Profile Instance
461      * @param execution
462      */
463     void createCnSliceProfileInstance(DelegateExecution execution) {
464
465         String globalSubscriberId = execution.getVariable("globalSubscriberId")
466         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
467         String serviceInstanceId = UUID.randomUUID().toString()
468         execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
469
470         String oStatus = "deactivated"
471
472         SliceTaskParamsAdapter sliceParams =
473                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
474         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
475         sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
476         String sliceProfileName = "sliceprofile_cn_"+sliceParams.serviceName
477
478         // create slice profile
479         ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, sliceProfileName, oStatus)
480
481         //timestamp format YYYY-MM-DD hh:mm:ss
482         rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
483
484         execution.setVariable("communicationServiceInstance", rspi)
485
486         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
487                 .customer(globalSubscriberId)
488                 .serviceSubscription(subscriptionServiceType)
489                 .serviceInstance(serviceInstanceId))
490         client.create(uri, rspi)
491         execution.setVariable("sliceTaskParams", sliceParams)
492     }
493
494     /**
495      * create Cn Slice Profile
496      * @param execution
497      */
498     void createCnSliceProfile(DelegateExecution execution) {
499
500         String globalSubscriberId = execution.getVariable("globalSubscriberId")
501         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
502         //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
503
504         SliceTaskParamsAdapter sliceParams =
505                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
506
507         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
508         SliceProfileAdapter cnSliceProfile = sliceTaskInfo.sliceProfile
509
510         String profileId = UUID.randomUUID().toString()
511         cnSliceProfile.setSliceProfileId(profileId)
512
513         SliceProfile sliceProfile = new SliceProfile()
514         sliceProfile.setProfileId(profileId)
515         sliceProfile.setCoverageAreaTAList(cnSliceProfile.coverageAreaTAList as String)
516         sliceProfile.setMaxNumberOfUEs(cnSliceProfile.maxNumberOfUEs)
517         sliceProfile.setLatency(cnSliceProfile.latency)
518         sliceProfile.setMaxNumberOfPDUSession(cnSliceProfile.maxNumberOfPDUSession)
519         sliceProfile.setExpDataRateDL(cnSliceProfile.expDataRateDL)
520         sliceProfile.setExpDataRateUL(cnSliceProfile.expDataRateUL)
521         sliceProfile.setAreaTrafficCapDL(cnSliceProfile.areaTrafficCapDL)
522         sliceProfile.setAreaTrafficCapUL(cnSliceProfile.areaTrafficCapUL)
523         sliceProfile.setOverallUserDensity(cnSliceProfile.overallUserDensity)
524         sliceProfile.setActivityFactor(cnSliceProfile.activityFactor)
525         sliceProfile.setUeMobilityLevel(cnSliceProfile.ueMobilityLevel)
526         sliceProfile.setResourceSharingLevel(cnSliceProfile.resourceSharingLevel)
527         sliceProfile.setCsAvailabilityTarget(cnSliceProfile.csAvailabilityTarget)
528         sliceProfile.setCsReliabilityMeanTime(cnSliceProfile.csReliabilityMeanTime)
529         sliceProfile.setExpDataRate(cnSliceProfile.expDataRate)
530         sliceProfile.setMsgSizeByte(cnSliceProfile.msgSizeByte)
531         sliceProfile.setTransferIntervalTarget(cnSliceProfile.transferIntervalTarget)
532         sliceProfile.setSurvivalTime(cnSliceProfile.survivalTime)
533
534         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
535                 .customer(globalSubscriberId)
536                 .serviceSubscription(subscriptionServiceType)
537                 .serviceInstance(sliceTaskInfo.sliceInstanceId)
538                 .sliceProfile(profileId))
539         client.create(uri, sliceProfile)
540         execution.setVariable("sliceTaskParams", sliceParams)
541     }
542
543     /**
544      * prepare AllocateCnNssi
545      * @param execution
546      */
547     void prepareAllocateCnNssi(DelegateExecution execution) {
548
549         //todo:
550         SliceTaskParamsAdapter sliceParams =
551                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
552         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
553
554         NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
555
556         AllocateCnNssi allocateCnNssi = new AllocateCnNssi()
557         allocateCnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
558         allocateCnNssi.nssiId = sliceTaskInfo.suggestNssiId
559         allocateCnNssi.nssiName = "nssi_cn" + execution.getVariable("sliceServiceInstanceName")
560         allocateCnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2CnProfile()
561         allocateCnNssi.sliceProfile.sliceProfileId = sliceTaskInfo.sliceInstanceId
562         allocateCnNssi.scriptName = sliceTaskInfo.getScriptName()
563
564         NsiInfo nsiInfo = new NsiInfo()
565         nsiInfo.nsiId = sliceParams.suggestNsiId
566         nsiInfo.nsiName = sliceParams.suggestNsiName
567         allocateCnNssi.nsiInfo = nsiInfo
568         // endPoint
569         EndPoint endPoint = new EndPoint()
570         endPoint.setIpAddress(sliceTaskInfo.sliceProfile.ipAddress)
571         endPoint.setLogicInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
572         endPoint.setNextHopInfo(sliceTaskInfo.sliceProfile.nextHopInfo)
573         allocateCnNssi.setEndPoint(endPoint)
574
575         EsrInfo esrInfo = new EsrInfo()
576         //todo: vendor and network
577         esrInfo.setVendor(sliceTaskInfo.getVendor())
578         esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
579
580         String globalSubscriberId = execution.getVariable("globalSubscriberId")
581         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
582
583         //todo: service info
584         ServiceInfo serviceInfo = new ServiceInfo()
585         serviceInfo.globalSubscriberId = globalSubscriberId
586         serviceInfo.subscriptionServiceType = subscriptionServiceType
587         serviceInfo.nsiId = sliceParams.suggestNsiId
588         serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
589         serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
590         serviceInfo.nssiId = sliceTaskInfo.suggestNssiId //if shared
591         serviceInfo.sST = sliceTaskInfo.sliceProfile.sST ?: sliceParams.serviceProfile.get("sST")
592         serviceInfo.nssiName = allocateCnNssi.nssiName
593
594         nbiRequest.setServiceInfo(serviceInfo)
595         nbiRequest.setEsrInfo(esrInfo)
596         nbiRequest.setAllocateCnNssi(allocateCnNssi)
597
598         execution.setVariable("CnAllocateNssiNbiRequest", nbiRequest)
599         execution.setVariable("cnSliceTaskInfo", sliceTaskInfo)
600         execution.setVariable("cnSubnetType", SubnetType.CN)
601     }
602
603
604     /**
605      * create TN Slice Profile Instance
606      * @param execution
607      */
608     void createTnBHSliceProfileInstance(DelegateExecution execution) {
609         String globalSubscriberId = execution.getVariable("globalSubscriberId")
610         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
611
612         String oStatus = "deactivated"
613
614         SliceTaskParamsAdapter sliceParams =
615                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
616
617         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
618         String serviceInstanceId = UUID.randomUUID().toString()
619
620         sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
621         String sliceProfileName = "sliceprofile_tn_" + sliceParams.serviceName
622         //execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
623
624         // create slice profile
625         ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, sliceProfileName, oStatus)
626
627         //timestamp format YYYY-MM-DD hh:mm:ss
628         rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
629
630         execution.setVariable("communicationServiceInstance", rspi)
631
632         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
633                 .customer(globalSubscriberId)
634                 .serviceSubscription(subscriptionServiceType)
635                 .serviceInstance(serviceInstanceId))
636         client.create(uri, rspi)
637
638         execution.setVariable("sliceTaskParams", sliceParams)
639     }
640
641     /**
642      * create Tn Slice Profile
643      * @param execution
644      */
645     void createTnBHSliceProfile(DelegateExecution execution) {
646
647         String globalSubscriberId = execution.getVariable("globalSubscriberId")
648         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
649
650         SliceTaskParamsAdapter sliceParams =
651                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
652
653         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
654
655         SliceProfileAdapter tnSliceProfile = sliceTaskInfo.sliceProfile
656         String profileId = UUID.randomUUID().toString()
657         tnSliceProfile.setSliceProfileId(profileId)
658
659         SliceProfile sliceProfile = new SliceProfile()
660         sliceProfile.setProfileId(profileId)
661         sliceProfile.setLatency(tnSliceProfile.latency)
662         sliceProfile.setMaxBandwidth(tnSliceProfile.maxBandwidth)
663         sliceProfile.setJitter(tnSliceProfile.jitter)
664
665         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
666                 .customer(globalSubscriberId)
667                 .serviceSubscription(subscriptionServiceType)
668                 .serviceInstance(sliceTaskInfo.sliceInstanceId)
669                 .sliceProfile(profileId))
670         client.create(uri, sliceProfile)
671
672         execution.setVariable("sliceTaskParams", sliceParams)
673     }
674
675     /**
676      * prepare AllocateCnNssi
677      * @param execution
678      */
679     void prepareAllocateTnBHNssi(DelegateExecution execution) {
680
681         //todo:
682         SliceTaskParamsAdapter sliceParams =
683                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
684         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
685
686         NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
687
688         AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
689         allocateTnNssi.setNssiId(sliceTaskInfo.suggestNssiId)
690         allocateTnNssi.scriptName = sliceTaskInfo.getScriptName()
691         //todo: AllocateTnNssi
692         //todo: endPointId -> set into tn
693         List<TransportSliceNetwork> transportSliceNetworks = new ArrayList<>()
694         TransportSliceNetwork transportSliceNetwork = new TransportSliceNetwork()
695         List<ConnectionLink> connectionLinks = new ArrayList<>()
696         ConnectionLink connectionLink = new ConnectionLink()
697         connectionLink.setTransportEndpointA(sliceParams.anSliceTaskInfo.endPointId)
698         connectionLink.setTransportEndpointB(sliceParams.cnSliceTaskInfo.endPointId)
699         connectionLinks.add(connectionLink)
700         transportSliceNetwork.setConnectionLinks(connectionLinks)
701         transportSliceNetworks.add(transportSliceNetwork)
702         allocateTnNssi.setTransportSliceNetworks(transportSliceNetworks)
703
704         allocateTnNssi.setNetworkSliceInfos()
705         allocateTnNssi.setSliceProfile(sliceTaskInfo.sliceProfile.trans2TnProfile())
706         allocateTnNssi.getSliceProfile().setDomainType(sliceTaskInfo.subnetType.subnetType)
707         NsiInfo nsiInfo = new NsiInfo()
708         nsiInfo.setNsiId(sliceParams.suggestNsiId)
709         nsiInfo.setNsiName(sliceParams.suggestNsiName)
710         allocateTnNssi.setNsiInfo(nsiInfo)
711
712         //allocateTnNssi.networkSliceInfos
713
714         EsrInfo esrInfo = new EsrInfo()
715         esrInfo.setVendor(sliceTaskInfo.getVendor())
716         esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
717
718         String globalSubscriberId = execution.getVariable("globalSubscriberId")
719         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
720
721         ServiceInfo serviceInfo = new ServiceInfo()
722         serviceInfo.globalSubscriberId = globalSubscriberId
723         serviceInfo.subscriptionServiceType = subscriptionServiceType
724         serviceInfo.nsiId = sliceParams.suggestNsiId
725         serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
726         serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
727         serviceInfo.nssiId = sliceTaskInfo.suggestNssiId
728         serviceInfo.sST = sliceTaskInfo.sliceProfile.sST ?: sliceParams.serviceProfile.get("sST")
729         serviceInfo.nssiName = "nssi_tn" + execution.getVariable("sliceServiceInstanceName")
730
731         nbiRequest.setServiceInfo(serviceInfo)
732         nbiRequest.setEsrInfo(esrInfo)
733         nbiRequest.setAllocateTnNssi(allocateTnNssi)
734
735         execution.setVariable("TnBHAllocateNssiNbiRequest", nbiRequest)
736         execution.setVariable("tnBHSliceTaskInfo", sliceTaskInfo)
737         execution.setVariable("tnBHSubnetType", SubnetType.TN_BH)
738     }
739
740     /**
741      * Update relationship between
742      * 1. NSI and NSSI
743      * 2. Slice Profile and Service Profile
744      * 3. SliceProfile and NSSI
745      * 4. sliceProfile and endpoint
746      *
747      * @param execution
748      */
749     public void updateAnRelationship(DelegateExecution execution) {
750         //todo:
751         SliceTaskParamsAdapter sliceParams =
752                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
753
754         NssiResponse result = execution.getVariable("anNssiAllocateResult") as NssiResponse
755         String nssiId = result.getNssiId()
756         String nsiId = sliceParams.getSuggestNsiId()
757         String sliceProfileInstanceId = sliceParams.anSliceTaskInfo.sliceInstanceId
758         String serviceProfileInstanceId = sliceParams.serviceId
759         String epId = sliceParams.anSliceTaskInfo.endPointId
760         //nsi id
761         //todo: aai -> nssi -> relationship -> endPointId -> set into tn
762         //String endPointId = getEndpointIdFromAAI(execution, nssiId)
763         //execution.setVariable("endPointIdAn", endPointId)
764         updateRelationship(execution, nsiId, nssiId)
765
766         updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
767
768         updateRelationship(execution, sliceProfileInstanceId, nssiId)
769
770         updateEPRelationship(execution, nssiId, epId)
771
772         updateEPRelationship(execution, sliceProfileInstanceId, epId)
773
774         sliceParams.anSliceTaskInfo.suggestNssiId = nssiId
775         execution.setVariable("sliceTaskParams", sliceParams)
776     }
777
778
779     /**
780      * Update relationship between
781      * 1. NSI and NSSI
782      * 2. Slice Profile and Service Profile
783      * 3. SliceProfile and NSSI
784      *
785      * @param execution
786      */
787     public void updateCnRelationship(DelegateExecution execution) {
788         //todo:
789         SliceTaskParamsAdapter sliceParams =
790                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
791
792         NssiResponse result = execution.getVariable("cnNssiAllocateResult") as NssiResponse
793         String nssiId = result.getNssiId()
794         String nsiId = sliceParams.getSuggestNsiId()
795         String sliceProfileInstanceId = sliceParams.cnSliceTaskInfo.sliceInstanceId
796         String serviceProfileInstanceId = sliceParams.serviceId
797         String epId = sliceParams.cnSliceTaskInfo.endPointId
798         //nsi id
799         //todo: aai -> nssi -> relationship -> endPointId -> set into tn
800 //        String endPointId = getEndpointIdFromAAI(execution, nssiId)
801 //        execution.setVariable("endPointIdCn", endPointId)
802
803         updateRelationship(execution, nsiId, nssiId)
804
805         updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
806
807         updateRelationship(execution, sliceProfileInstanceId, nssiId)
808
809         updateEPRelationship(execution, nssiId, epId)
810
811         updateEPRelationship(execution, sliceProfileInstanceId, epId)
812
813         sliceParams.cnSliceTaskInfo.suggestNssiId = nssiId
814         execution.setVariable("sliceTaskParams", sliceParams)
815     }
816
817     /**
818      * get endpoint Id from AAI by nssi id
819      * @param execution
820      * @param nssiId
821      * @return
822      */
823     private String getEndpointIdFromAAI(DelegateExecution execution, String nssiId) {
824         logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
825         //todo: allottedResourceId
826
827         SliceTaskParamsAdapter sliceParams =
828                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
829
830         //sliceParams.setServiceId(nsiServiceInstanceID)
831         AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
832                 .customer(execution.getVariable("globalSubscriberId"))
833                 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
834                 .serviceInstance(nssiId))
835
836         String endpointId = null
837
838         try {
839             AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
840             Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
841             if (!si.isPresent()) {
842                 String msg = "NSSI in the option doesn't exist. " + nssiId
843                 logger.debug(msg)
844                 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
845             } else {
846                 ServiceInstance nssiInstance = si.get()
847                 //todo: handle relationship and return endPointId
848                 if (nssiInstance.relationshipList == null) {
849                     String msg = "relationshipList of " + nssiId + " is null"
850                     logger.debug(msg)
851                     return null
852                 }
853                 for (Relationship relationship : nssiInstance.relationshipList.getRelationship()) {
854                     if (relationship.relationshipLabel){
855                         endpointId = relationship //todo
856                     }
857                 }
858
859                 return endpointId
860             }
861
862         }catch(BpmnError e) {
863             throw e
864         }catch (Exception ex){
865             String msg = "Exception: " + ex
866             logger.debug(msg)
867             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
868         }
869         logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
870     }
871
872     /**
873      * Update relationship between
874      * 1. NSI and NSSI
875      * 2. Slice Profile and Service Profile
876      * 3. SliceProfile and NSSI
877      *
878      * @param execution
879      */
880     public void updateTnBHRelationship(DelegateExecution execution) {
881         SliceTaskParamsAdapter sliceParams =
882                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
883
884         NssiResponse result = execution.getVariable("tnBHNssiAllocateResult") as NssiResponse
885         String nssiId = result.getNssiId()
886         String nsiId = sliceParams.getSuggestNsiId()
887         String sliceProfileInstanceId = sliceParams.tnBHSliceTaskInfo.sliceInstanceId
888         String serviceProfileInstanceId = sliceParams.serviceId
889         //nsi id
890
891         updateRelationship(execution, nsiId, nssiId)
892
893         updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
894
895         updateRelationship(execution,sliceProfileInstanceId, nssiId)
896
897         sliceParams.tnBHSliceTaskInfo.suggestNssiId = nssiId
898         execution.setVariable("sliceTaskParams", sliceParams)
899     }
900
901     /**
902      * sourceId -> targetId
903      * @param execution
904      * @param sourceId
905      * @param targetId
906      */
907     void updateRelationship(DelegateExecution execution, String sourceId, String targetId) {
908         //relation ship
909         Relationship relationship = new Relationship()
910
911         AAIResourceUri targetInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
912                 .customer(execution.getVariable("globalSubscriberId"))
913                 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
914                 .serviceInstance(targetId))
915
916         logger.debug("Creating relationship, targetInstanceUri: " + targetInstanceUri)
917
918         relationship.setRelatedLink(targetInstanceUri.build().toString())
919
920         AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
921                 .customer(execution.getVariable("globalSubscriberId"))
922                 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
923                 .serviceInstance(sourceId))
924                 .relationshipAPI()
925         client.create(sourceInstanceUri, relationship)
926     }
927
928     /**
929      * update endpoint relationship
930      * @param execution
931      * @param sourceId
932      * @param targetId
933      */
934     void updateEPRelationship(DelegateExecution execution, String sourceId, String endpointId) {
935         //relation ship
936         Relationship relationship = new Relationship()
937
938         AAIResourceUri endpointUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(endpointId))
939
940         logger.debug("Creating relationship, endpoint Uri: " + endpointUri + ",endpointId: " + endpointId)
941
942         relationship.setRelatedLink(endpointUri.build().toString())
943
944         AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
945                 .customer(execution.getVariable("globalSubscriberId"))
946                 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
947                 .serviceInstance(sourceId))
948                 .relationshipAPI()
949         client.create(sourceInstanceUri, relationship)
950     }
951
952     static def createSliceProfileInstance(SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo, String sliceProfileName, String oStatus) {
953         // create slice profile
954         ServiceInstance rspi = new ServiceInstance()
955         rspi.setServiceInstanceName(sliceProfileName)
956         rspi.setServiceType(sliceTaskInfo.sliceProfile.getSST())
957         rspi.setServiceRole("slice-profile")
958         rspi.setOrchestrationStatus(oStatus)
959         rspi.setServiceInstanceLocationId(sliceTaskInfo.sliceProfile.getPLMNIdList())
960         rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
961         rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
962         rspi.setWorkloadContext(sliceTaskInfo.subnetType.subnetType)
963         rspi.setEnvironmentContext(sliceTaskInfo.sliceProfile.getSNSSAIList())
964         rspi.setServiceFunction(sliceTaskInfo.sliceProfile.getResourceSharingLevel())
965
966         //timestamp format YYYY-MM-DD hh:mm:ss
967         rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
968         return rspi
969     }
970
971     public void createTNEndPoints(DelegateExecution execution) {
972         String type = "endpoint"
973         String function = "transport_EP"
974         int prefixLength = 24
975         String addressFamily = "ipv4"
976         //BH RAN end point update
977         //set BH end point
978         String sliceParams = execution.getVariable("sliceParams")
979         List<String> BH_endPoints = jsonUtil.StringArrayToList(jsonUtil.getJsonValue(sliceParams, "endPoints"))
980         logger.debug("BH end points list : "+BH_endPoints)
981         if(BH_endPoints.empty) {
982             String msg = "End point info is empty"
983             logger.debug(msg)
984             exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
985         }
986         String bh_routeId = UUID.randomUUID().toString()
987         execution.setVariable("tranportEp_ID_bh", bh_routeId)
988         String role = "CU"
989         String CU_IpAddress = jsonUtil.getJsonValue(bh_endpoint, "IpAddress")
990         String LogicalLinkId = jsonUtil.getJsonValue(bh_endpoint, "LogicalLinkId")
991         String nextHopInfo = jsonUtil.getJsonValue(bh_endpoint, "nextHopInfo")
992         NetworkRoute bh_ep = new NetworkRoute()
993         bh_ep.setRouteId(bh_routeId)
994         bh_ep.setFunction(function)
995         bh_ep.setRole(role)
996         bh_ep.setType(type)
997         bh_ep.setIpAddress(CU_IpAddress)
998         bh_ep.setLogicalInterfaceId(LogicalLinkId)
999         bh_ep.setNextHop(nextHopInfo)
1000         bh_ep.setPrefixLength(prefixLength)
1001         bh_ep.setAddressFamily(addressFamily)
1002         //FH RAN end points update
1003         //RU
1004         String RU_routeId = UUID.randomUUID().toString()
1005         execution.setVariable("tranportEp_ID_RU", RU_routeId)
1006         role = "RU"
1007         NetworkRoute RU_ep = new NetworkRoute()
1008         RU_ep.setRouteId(RU_routeId)
1009         RU_ep.setFunction(function)
1010         RU_ep.setRole(role)
1011         RU_ep.setType(type)
1012         RU_ep.setIpAddress("192.168.100.4")
1013         RU_ep.setLogicalInterfaceId("1234")
1014         RU_ep.setNextHop("Host1")
1015         RU_ep.setPrefixLength(prefixLength)
1016         RU_ep.setAddressFamily(addressFamily)
1017         //DU Ingress
1018         String DUIN_routeId = UUID.randomUUID().toString()
1019         execution.setVariable("tranportEp_ID_DUIN", DUIN_routeId)
1020         role = "DU"
1021         NetworkRoute DU_ep = new NetworkRoute()
1022         DU_ep.setRouteId(DUIN_routeId)
1023         DU_ep.setFunction(function)
1024         DU_ep.setRole(role)
1025         DU_ep.setType(type)
1026         DU_ep.setIpAddress("192.168.100.5")
1027         DU_ep.setLogicalInterfaceId("1234")
1028         DU_ep.setNextHop("Host2")
1029         DU_ep.setPrefixLength(prefixLength)
1030         DU_ep.setAddressFamily(addressFamily)
1031         //MH RAN end point update
1032         //DUEG
1033         String DUEG_routeId = UUID.randomUUID().toString()
1034         execution.setVariable("tranportEp_ID_DUEG", DUEG_routeId)
1035         NetworkRoute DUEG_ep = new NetworkRoute()
1036         DUEG_ep.setRouteId(DUEG_routeId)
1037         DUEG_ep.setFunction(function)
1038         DUEG_ep.setRole(role)
1039         DUEG_ep.setType(type)
1040         DUEG_ep.setIpAddress("192.168.100.5")
1041         DUEG_ep.setLogicalInterfaceId("1234")
1042         DUEG_ep.setPrefixLength(prefixLength)
1043         DUEG_ep.setAddressFamily(addressFamily)
1044         DUEG_ep.setNextHop("Host3")
1045         //CUIN
1046         String CUIN_routeId = UUID.randomUUID().toString()
1047         execution.setVariable("tranportEp_ID_CUIN", CUIN_routeId)
1048         NetworkRoute CUIN_ep = new NetworkRoute()
1049         CUIN_ep.setRouteId(CUIN_routeId)
1050         CUIN_ep.setFunction(function)
1051         CUIN_ep.setRole(role)
1052         CUIN_ep.setType(type)
1053         CUIN_ep.setIpAddress("192.168.100.6")
1054         CUIN_ep.setLogicalInterfaceId("1234")
1055         CUIN_ep.setNextHop("Host4")
1056         CUIN_ep.setPrefixLength(prefixLength)
1057         CUIN_ep.setAddressFamily(addressFamily)
1058         try {
1059             AAIResourcesClient client = new AAIResourcesClient()
1060             logger.debug("creating bh endpoint . ID : "+bh_routeId+" node details : "+bh_ep.toString())
1061             AAIResourceUri networkRouteUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(bh_routeId))
1062             client.create(networkRouteUri, bh_ep)
1063             logger.debug("creating RU endpoint . ID : "+RU_routeId+" node details : "+RU_ep.toString())
1064             networkRouteUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(RU_routeId))
1065             client.create(networkRouteUri, RU_ep)
1066             logger.debug("creating DUIN endpoint . ID : "+DUIN_routeId+" node details : "+DU_ep.toString())
1067             networkRouteUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(DUIN_routeId))
1068             client.create(networkRouteUri, DU_ep)
1069             logger.debug("creating DUEG endpoint . ID : "+DUEG_routeId+" node details : "+DUEG_ep.toString())
1070             networkRouteUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(DUEG_routeId))
1071             client.create(networkRouteUri, DUEG_ep)
1072             logger.debug("creating CUIN endpoint . ID : "+CUIN_routeId+" node details : "+CUIN_ep.toString())
1073             networkRouteUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(CUIN_routeId))
1074             client.create(networkRouteUri, CUIN_ep)
1075             //relationship b/w bh_ep and RAN NSSI
1076             def AN_NSSI = execution.getVariable("RANServiceInstanceId")
1077             Relationship relationship = new Relationship()
1078             String relatedLink = "aai/v21/network/network-routes/network-route/${bh_routeId}"
1079             relationship.setRelatedLink(relatedLink)
1080             relationship.setRelatedTo("network-route")
1081             relationship.setRelationshipLabel("org.onap.relationships.inventory.ComposedOf")
1082             anNssmfUtils.createRelationShipInAAI(execution, relationship, AN_NSSI)
1083             def ANNF_serviceInstanceId = execution.getVariable("RANNFServiceInstanceId")
1084             relatedLink = "aai/v21/network/network-routes/network-route/${RU_routeId}"
1085             relationship.setRelatedLink(relatedLink)
1086             anNssmfUtils.createRelationShipInAAI(execution, relationship, ANNF_serviceInstanceId)
1087             relatedLink = "aai/v21/network/network-routes/network-route/${DUIN_routeId}"
1088             relationship.setRelatedLink(relatedLink)
1089             anNssmfUtils.createRelationShipInAAI(execution, relationship, ANNF_serviceInstanceId)
1090             relatedLink = "aai/v21/network/network-routes/network-route/${DUEG_routeId}"
1091             relationship.setRelatedLink(relatedLink)
1092             anNssmfUtils.createRelationShipInAAI(execution, relationship, ANNF_serviceInstanceId)
1093             relatedLink = "aai/v21/network/network-routes/network-route/${CUIN_routeId}"
1094             relationship.setRelatedLink(relatedLink)
1095             anNssmfUtils.createRelationShipInAAI(execution, relationship, ANNF_serviceInstanceId)
1096         } catch (BpmnError e) {
1097             throw e
1098         } catch (Exception ex) {
1099             String msg = "Exception in createEndPointsInAai " + ex.getMessage()
1100             logger.info(msg)
1101             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
1102         }
1103     }
1104
1105     /**
1106      * create TN Slice Profile Instance
1107      * @param execution
1108      */
1109     void createTnFHSliceProfileInstance(DelegateExecution execution) {
1110         String globalSubscriberId = execution.getVariable("globalSubscriberId")
1111         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
1112
1113         String oStatus = "deactivated"
1114
1115         SliceTaskParamsAdapter sliceParams =
1116                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
1117
1118         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnFHSliceTaskInfo
1119         String serviceInstanceId = UUID.randomUUID().toString()
1120
1121         sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
1122         String sliceProfileName = "tn_fh" + sliceParams.serviceName
1123         //execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
1124
1125         // create slice profile
1126         ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, sliceProfileName, oStatus)
1127
1128         //timestamp format YYYY-MM-DD hh:mm:ss
1129         rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
1130
1131         execution.setVariable("communicationServiceInstance", rspi)
1132
1133         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
1134                 .customer(globalSubscriberId)
1135                 .serviceSubscription(subscriptionServiceType)
1136                 .serviceInstance(serviceInstanceId))
1137         client.create(uri, rspi)
1138
1139         execution.setVariable("sliceTaskParams", sliceParams)
1140     }
1141
1142     /**
1143      * create Tn Slice Profile
1144      * @param execution
1145      */
1146     void createTnFHSliceProfile(DelegateExecution execution) {
1147
1148         String globalSubscriberId = execution.getVariable("globalSubscriberId")
1149         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
1150
1151         SliceTaskParamsAdapter sliceParams =
1152                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
1153
1154         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnFHSliceTaskInfo
1155
1156         SliceProfileAdapter tnSliceProfile = sliceTaskInfo.sliceProfile
1157         String profileId = UUID.randomUUID().toString()
1158         tnSliceProfile.setSliceProfileId(profileId)
1159
1160         SliceProfile sliceProfile = new SliceProfile()
1161         sliceProfile.setProfileId(profileId)
1162         sliceProfile.setLatency(tnSliceProfile.latency)
1163         sliceProfile.setMaxBandwidth(tnSliceProfile.maxBandwidth)
1164         sliceProfile.setJitter(tnSliceProfile.jitter)
1165
1166         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
1167                 .customer(globalSubscriberId)
1168                 .serviceSubscription(subscriptionServiceType)
1169                 .serviceInstance(sliceTaskInfo.sliceInstanceId)
1170                 .sliceProfile(profileId))
1171         client.create(uri, sliceProfile)
1172
1173         execution.setVariable("sliceTaskParams", sliceParams)
1174     }
1175
1176     /**
1177      * prepare AllocateCnNssi
1178      * @param execution
1179      */
1180     void prepareAllocateTnFHNssi(DelegateExecution execution) {
1181
1182         //todo:
1183         SliceTaskParamsAdapter sliceParams =
1184                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
1185         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.getTnFHSliceTaskInfo()
1186
1187         NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
1188
1189         AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
1190         allocateTnNssi.setNssiId(sliceTaskInfo.getSuggestNssiId())
1191         //todo: AllocateTnNssi
1192         //todo: endPointId -> set into tn
1193         List<TransportSliceNetwork> transportSliceNetworks = new ArrayList<>()
1194         TransportSliceNetwork transportSliceNetwork = new TransportSliceNetwork()
1195         List<ConnectionLink> connectionLinks = new ArrayList<>()
1196         ConnectionLink connectionLink = new ConnectionLink()
1197         connectionLink.setTransportEndpointA(execution.getVariable("tranportEp_ID_RU") as String)
1198         connectionLink.setTransportEndpointB(execution.getVariable("tranportEp_ID_DUIN") as String)
1199         connectionLinks.add(connectionLink)
1200         transportSliceNetwork.setConnectionLinks(connectionLinks)
1201         transportSliceNetworks.add(transportSliceNetwork)
1202         allocateTnNssi.setTransportSliceNetworks(transportSliceNetworks)
1203
1204         allocateTnNssi.setSliceProfile(sliceTaskInfo.getSliceProfile().trans2TnProfile())
1205         NsiInfo nsiInfo = new NsiInfo()
1206         nsiInfo.setNsiId(sliceParams.getSuggestNsiId())
1207         nsiInfo.setNsiName(sliceParams.getSuggestNsiName())
1208         allocateTnNssi.setNsiInfo(nsiInfo)
1209
1210         EsrInfo esrInfo = new EsrInfo()
1211         esrInfo.setVendor(sliceTaskInfo.getVendor())
1212         esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
1213
1214         String globalSubscriberId = execution.getVariable("globalSubscriberId") as String
1215         String subscriptionServiceType = execution.getVariable("subscriptionServiceType") as String
1216
1217         ServiceInfo serviceInfo = ServiceInfo.builder()
1218                 .globalSubscriberId(globalSubscriberId)
1219                 .subscriptionServiceType(subscriptionServiceType)
1220                 .nsiId(sliceParams.getSuggestNsiId())
1221                 .serviceInvariantUuid(sliceTaskInfo.getNSSTInfo().getInvariantUUID())
1222                 .setServiceUuid(sliceTaskInfo.getNSSTInfo().getUUID())
1223                 .nssiId(sliceTaskInfo.getSuggestNssiId())
1224                 .sST(sliceTaskInfo.getSliceProfile().getSST() ?: sliceParams.getServiceProfile().get("sST"))
1225                 .nssiName("nssi_tn_fh_" + execution.getVariable("sliceServiceInstanceName") as String)
1226                 .build()
1227
1228         nbiRequest.setServiceInfo(serviceInfo)
1229         nbiRequest.setEsrInfo(esrInfo)
1230         nbiRequest.setAllocateTnNssi(allocateTnNssi)
1231
1232         execution.setVariable("TnFHAllocateNssiNbiRequest", nbiRequest)
1233         execution.setVariable("tnFHSliceTaskInfo", sliceTaskInfo)
1234         execution.setVariable("tnFHSubnetType", SubnetType.TN_BH)
1235     }
1236
1237     /**
1238      * Update relationship between
1239      * 1. NSI and NSSI
1240      * 2. Slice Profile and Service Profile
1241      * 3. SliceProfile and NSSI
1242      *
1243      * @param execution
1244      */
1245     public void updateTnFHRelationship(DelegateExecution execution) {
1246         SliceTaskParamsAdapter sliceParams =
1247                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
1248
1249         NssiResponse result = execution.getVariable("tnFHNssiAllocateResult") as NssiResponse
1250         String nssiId = result.getNssiId()
1251         String nsiId = sliceParams.getSuggestNsiId()
1252         String sliceProfileInstanceId = sliceParams.tnFHSliceTaskInfo.sliceInstanceId
1253         String serviceProfileInstanceId = sliceParams.serviceId
1254
1255         updateRelationship(execution, nsiId, nssiId)
1256
1257         updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
1258
1259         updateRelationship(execution,sliceProfileInstanceId, nssiId)
1260
1261         sliceParams.tnFHSliceTaskInfo.suggestNssiId = nssiId
1262         execution.setVariable("sliceTaskParams", sliceParams)
1263     }
1264
1265     /**
1266      * create TN Slice Profile Instance
1267      * @param execution
1268      */
1269     void createTnMHSliceProfileInstance(DelegateExecution execution) {
1270         String globalSubscriberId = execution.getVariable("globalSubscriberId")
1271         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
1272
1273         String oStatus = "deactivated"
1274
1275         SliceTaskParamsAdapter sliceParams =
1276                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
1277
1278         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnMHSliceTaskInfo
1279         String serviceInstanceId = UUID.randomUUID().toString()
1280
1281         sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
1282         String sliceProfileName = "tn_mh_" + sliceParams.serviceName
1283         ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, sliceProfileName, oStatus)
1284
1285         rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
1286
1287         execution.setVariable("communicationServiceInstance", rspi)
1288
1289         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
1290                 .customer(globalSubscriberId)
1291                 .serviceSubscription(subscriptionServiceType)
1292                 .serviceInstance(serviceInstanceId))
1293         client.create(uri, rspi)
1294
1295         execution.setVariable("sliceTaskParams", sliceParams)
1296     }
1297
1298     /**
1299      * create Tn Slice Profile
1300      * @param execution
1301      */
1302     void createTnMHSliceProfile(DelegateExecution execution) {
1303
1304         String globalSubscriberId = execution.getVariable("globalSubscriberId")
1305         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
1306
1307         SliceTaskParamsAdapter sliceParams =
1308                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
1309
1310         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnMHSliceTaskInfo
1311
1312         SliceProfileAdapter tnSliceProfile = sliceTaskInfo.sliceProfile
1313         String profileId = UUID.randomUUID().toString()
1314         tnSliceProfile.setSliceProfileId(profileId)
1315
1316         SliceProfile sliceProfile = new SliceProfile()
1317         sliceProfile.setProfileId(profileId)
1318         sliceProfile.setLatency(tnSliceProfile.latency)
1319         sliceProfile.setMaxBandwidth(tnSliceProfile.maxBandwidth)
1320         sliceProfile.setJitter(tnSliceProfile.jitter)
1321
1322         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
1323                 .customer(globalSubscriberId)
1324                 .serviceSubscription(subscriptionServiceType)
1325                 .serviceInstance(sliceTaskInfo.sliceInstanceId)
1326                 .sliceProfile(profileId))
1327         client.create(uri, sliceProfile)
1328
1329         execution.setVariable("sliceTaskParams", sliceParams)
1330     }
1331
1332     /**
1333      * prepare AllocateCnNssi
1334      * @param execution
1335      */
1336     void prepareAllocateTnMHNssi(DelegateExecution execution) {
1337
1338         SliceTaskParamsAdapter sliceParams =
1339                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
1340         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.getTnMHSliceTaskInfo()
1341
1342         NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
1343
1344         AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
1345         allocateTnNssi.setNssiId(sliceTaskInfo.getSuggestNssiId())
1346         List<TransportSliceNetwork> transportSliceNetworks = new ArrayList<>()
1347         TransportSliceNetwork transportSliceNetwork = new TransportSliceNetwork()
1348         List<ConnectionLink> connectionLinks = new ArrayList<>()
1349         ConnectionLink connectionLink = new ConnectionLink()
1350         connectionLink.setTransportEndpointA(execution.getVariable("tranportEp_ID_DUEG") as String)
1351         connectionLink.setTransportEndpointB(execution.getVariable("tranportEp_ID_CUIN") as String)
1352         connectionLinks.add(connectionLink)
1353         transportSliceNetwork.setConnectionLinks(connectionLinks)
1354         transportSliceNetworks.add(transportSliceNetwork)
1355         allocateTnNssi.setTransportSliceNetworks(transportSliceNetworks)
1356
1357         allocateTnNssi.setSliceProfile(sliceTaskInfo.getSliceProfile().trans2TnProfile())
1358         NsiInfo nsiInfo = new NsiInfo()
1359         nsiInfo.setNsiId(sliceParams.getSuggestNsiId())
1360         nsiInfo.setNsiName(sliceParams.getSuggestNsiName())
1361         allocateTnNssi.setNsiInfo(nsiInfo)
1362
1363         EsrInfo esrInfo = new EsrInfo()
1364         esrInfo.setVendor(sliceTaskInfo.getVendor())
1365         esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
1366
1367         String globalSubscriberId = execution.getVariable("globalSubscriberId") as String
1368         String subscriptionServiceType = execution.getVariable("subscriptionServiceType") as String
1369
1370         ServiceInfo serviceInfo = ServiceInfo.builder()
1371                 .globalSubscriberId(globalSubscriberId)
1372                 .subscriptionServiceType(subscriptionServiceType)
1373                 .nsiId(sliceParams.getSuggestNsiId())
1374                 .serviceInvariantUuid(sliceTaskInfo.getNSSTInfo().getInvariantUUID())
1375                 .serviceUuid(sliceTaskInfo.getNSSTInfo().getUUID())
1376                 .nssiId(sliceTaskInfo.getSuggestNssiId())
1377                 .sST(sliceTaskInfo.getSliceProfile().getSST() ?: sliceParams.getServiceProfile().get("sST"))
1378                 .nssiName("nssi_tn_bh_" + execution.getVariable("sliceServiceInstanceName") as String)
1379                 .build()
1380
1381         nbiRequest.setServiceInfo(serviceInfo)
1382         nbiRequest.setEsrInfo(esrInfo)
1383         nbiRequest.setAllocateTnNssi(allocateTnNssi)
1384
1385         execution.setVariable("TnMHAllocateNssiNbiRequest", nbiRequest)
1386         execution.setVariable("tnMHSliceTaskInfo", sliceTaskInfo)
1387         execution.setVariable("tnMHSubnetType", SubnetType.TN_BH)
1388     }
1389
1390     /**
1391      * Update relationship between
1392      * 1. NSI and NSSI
1393      * 2. Slice Profile and Service Profile
1394      * 3. SliceProfile and NSSI
1395      *
1396      * @param execution
1397      */
1398     public void updateTnMHRelationship(DelegateExecution execution) {
1399         SliceTaskParamsAdapter sliceParams =
1400                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
1401
1402         NssiResponse result = execution.getVariable("tnMHNssiAllocateResult") as NssiResponse
1403         String nssiId = result.getNssiId()
1404         String nsiId = sliceParams.getSuggestNsiId()
1405         String sliceProfileInstanceId = sliceParams.tnMHSliceTaskInfo.sliceInstanceId
1406         String serviceProfileInstanceId = sliceParams.serviceId
1407
1408         updateRelationship(execution, nsiId, nssiId)
1409
1410         updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
1411
1412         updateRelationship(execution,sliceProfileInstanceId, nssiId)
1413
1414         sliceParams.tnMHSliceTaskInfo.suggestNssiId = nssiId
1415         execution.setVariable("sliceTaskParams", sliceParams)
1416     }
1417 }