924b42fe9f1ba61a01705d4f2733775c61e1382e
[so.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2019 Huawei Technologies Co., Ltd. All rights reserved.
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.apache.commons.lang3.StringUtils
24 import org.camunda.bpm.engine.delegate.BpmnError
25 import org.camunda.bpm.engine.delegate.DelegateExecution
26 import org.onap.aai.domain.yang.Relationship
27 import org.onap.aai.domain.yang.ServiceInstance
28 import org.onap.aai.domain.yang.SliceProfile
29 import org.onap.aaiclient.client.aai.AAIObjectType
30 import org.onap.aaiclient.client.aai.AAIResourcesClient
31 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
32 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
33 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
34 import org.onap.so.beans.nsmf.*
35 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
36 import org.onap.so.bpmn.common.scripts.ExceptionUtil
37 import org.onap.so.bpmn.common.scripts.NssmfAdapterUtils
38 import org.onap.so.bpmn.core.json.JsonUtils
39 import org.slf4j.Logger
40 import org.slf4j.LoggerFactory
41
42 import javax.ws.rs.NotFoundException
43
44 class DoAllocateNSIandNSSIV2 extends AbstractServiceTaskProcessor{
45
46     private static final Logger logger = LoggerFactory.getLogger( DoAllocateNSIandNSSIV2.class);
47
48     ExceptionUtil exceptionUtil = new ExceptionUtil()
49
50     JsonUtils jsonUtil = new JsonUtils()
51
52     private NssmfAdapterUtils nssmfAdapterUtils = new NssmfAdapterUtils(httpClientFactory, jsonUtil)
53
54     AAIResourcesClient client = getAAIClient()
55
56     /**
57      * Pre Process the BPMN Flow Request
58      * Inclouds:
59      * generate the nsOperationKey
60      * generate the nsParameters
61      */
62
63     void preProcessRequest (DelegateExecution execution) {
64         String msg = ""
65         logger.trace("Enter preProcessRequest()")
66         Map<String, Object> nssiMap = new HashMap<>()
67         execution.setVariable("nssiMap", nssiMap)
68         boolean isMoreNSSTtoProcess = true
69         execution.setVariable("isMoreNSSTtoProcess", isMoreNSSTtoProcess)
70         List<String> nsstSequence = new ArrayList<>(Arrays.asList("cn"))
71         execution.setVariable("nsstSequence", nsstSequence)
72         logger.trace("Exit preProcessRequest")
73     }
74
75     /**
76      * Process NSI options
77      * @param execution
78      */
79     void retriveSliceOption(DelegateExecution execution) {
80         logger.trace("Enter retriveSliceOption() of DoAllocateNSIandNSSI")
81
82         boolean isNSIOptionAvailable
83
84         SliceTaskParamsAdapter sliceParams =
85                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
86 //        try
87 //        {
88 //            Map<String, Object> nstSolution = execution.getVariable("nstSolution") as Map
89 //            String modelUuid = nstSolution.get("UUID")
90 //            String modelInvariantUuid = nstSolution.get("invariantUUID")
91 //            String serviceModelInfo = """{
92 //            "modelInvariantUuid":"${modelInvariantUuid}",
93 //            "modelUuid":"${modelUuid}",
94 //            "modelVersion":""
95 //             }"""
96 //            execution.setVariable("serviceModelInfo", serviceModelInfo)
97 //
98 //            execution.setVariable("sliceParams", sliceParams)
99 //        }catch (Exception ex) {
100 //            logger.debug( "Unable to get the task information from request DB: " + ex)
101 //            exceptionUtil.buildAndThrowWorkflowException(execution, 401, "Unable to get task information from request DB.")
102 //        }
103
104         if(StringUtils.isBlank(sliceParams.getSuggestNsiId())) {
105             isNSIOptionAvailable = false
106         }
107         else {
108             isNSIOptionAvailable = true
109             execution.setVariable('nsiServiceInstanceId', sliceParams.getSuggestNsiId())
110             execution.setVariable('nsiServiceInstanceName', sliceParams.getSuggestNsiName())
111         }
112         execution.setVariable("isNSIOptionAvailable", isNSIOptionAvailable)
113         logger.trace("Exit retriveSliceOption() of DoAllocateNSIandNSSI")
114     }
115
116
117     /**
118      * create nsi instance in aai
119      * @param execution
120      */
121     void createNSIinAAI(DelegateExecution execution) {
122         logger.debug("Enter CreateNSIinAAI in DoAllocateNSIandNSSI()")
123
124         String sliceInstanceId = UUID.randomUUID().toString()
125         SliceTaskParamsAdapter sliceParams =
126                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
127
128         sliceParams.setServiceId(sliceInstanceId)
129
130         ServiceInstance nsi = new ServiceInstance()
131
132
133         String sliceInstanceName = "nsi_"+execution.getVariable("sliceServiceInstanceName")
134         String serviceType = execution.getVariable("serviceType")
135         String serviceStatus = "deactivated"
136         String modelInvariantUuid = sliceParams.getNSTInfo().invariantUUID
137         String modelUuid = sliceParams.getNSTInfo().UUID
138
139         String uuiRequest = execution.getVariable("uuiRequest")
140         String serviceInstanceLocationid = jsonUtil.getJsonValue(uuiRequest, "service.parameters.requestInputs.plmnIdList")
141         String serviceRole = "nsi"
142
143         execution.setVariable("sliceInstanceId", sliceInstanceId)
144         nsi.setServiceInstanceId(sliceInstanceId)
145         nsi.setServiceInstanceName(sliceInstanceName)
146         nsi.setServiceType(serviceType)
147         nsi.setOrchestrationStatus(serviceStatus)
148         nsi.setModelInvariantId(modelInvariantUuid)
149         nsi.setModelVersionId(modelUuid)
150         nsi.setServiceInstanceLocationId(serviceInstanceLocationid)
151         nsi.setServiceRole(serviceRole)
152         String msg
153         try {
154
155             AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
156                     execution.getVariable("globalSubscriberId"),
157                     execution.getVariable("subscriptionServiceType"),
158                     sliceInstanceId)
159             client.create(nsiServiceUri, nsi)
160
161             execution.setVariable("nsiServiceUri", nsiServiceUri.build().toString())
162
163         } catch (BpmnError e) {
164             throw e
165         } catch (Exception ex) {
166             msg = "Exception in DoCreateSliceServiceInstance.instantiateSliceService. " + ex.getMessage()
167             logger.info(msg)
168             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
169         }
170
171         logger.debug("Exit CreateNSIinAAI in DoAllocateNSIandNSSI()")
172     }
173
174
175     /**
176      * create relationship between nsi and service profile instance
177      * @param execution
178      */
179     void createRelationship(DelegateExecution execution) {
180         //relation ship
181         Relationship relationship = new Relationship()
182         String nsiServiceUri = execution.getVariable("nsiServiceUri") as String
183         logger.info("Creating Allotted resource relationship, nsiServiceUri: " + nsiServiceUri)
184
185         relationship.setRelatedLink(nsiServiceUri)
186
187         AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(
188                 AAIObjectType.ALLOTTED_RESOURCE,
189                 execution.getVariable("globalSubscriberId"),
190                 execution.getVariable("subscriptionServiceType"),
191                 execution.getVariable("sliceServiceInstanceId"),
192                 execution.getVariable("allottedResourceId"))
193                 .relationshipAPI()
194         client.create(allottedResourceUri, relationship)
195     }
196
197     /**
198      *
199      * @param execution
200      */
201     void updateRelationship(DelegateExecution execution) {
202         logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
203         String allottedResourceId = execution.getVariable("allottedResourceId")
204         //Need to check whether nsi exist : Begin
205
206         SliceTaskParamsAdapter sliceParams =
207                 execution.getVariable("sliceParams") as SliceTaskParamsAdapter
208
209         String nsiServiceInstanceID = sliceParams.getSuggestNsiId()
210         sliceParams.setServiceId(nsiServiceInstanceID)
211
212         AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
213                 execution.getVariable("globalSubscriberId"),
214                 execution.getVariable("subscriptionServiceType"),
215                 nsiServiceInstanceID)
216
217         try {
218             AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
219             Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
220             //todo: if exists
221             if (!si.ifPresent()) {
222                 String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
223                 logger.debug(msg)
224                 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
225             }
226
227             AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIObjectType.ALLOTTED_RESOURCE,
228                     execution.getVariable("globalSubscriberId"),
229                     execution.getVariable("subscriptionServiceType"),
230                     execution.getVariable("sliceServiceInstanceId"),
231                     allottedResourceId)
232
233             client.connect(allottedResourceUri, nsiServiceUri)
234
235             execution.setVariable("sliceParams", sliceParams)
236         }catch(BpmnError e) {
237             throw e
238         }catch (Exception ex){
239             String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
240             logger.debug(msg)
241             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
242         }
243         logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
244     }
245
246     /**
247      * create RAN Slice Profile Instance
248      * @param execution
249      */
250     void createAnSliceProfileInstance(DelegateExecution execution) {
251
252         String globalSubscriberId = execution.getVariable("globalSubscriberId")
253         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
254         String serviceInstanceId = UUID.randomUUID().toString()
255         execution.setVariable("ranSliceProfileInstanceId", serviceInstanceId) //todo:
256
257         String serviceType = ""
258         String serviceRole = "slice-profile"
259         String oStatus = "deactivated"
260
261         SliceTaskParamsAdapter sliceParams =
262                 execution.getVariable("sliceParams") as SliceTaskParamsAdapter
263         SliceTaskInfo<AnSliceProfile> sliceTaskInfo = sliceParams.anSliceTaskInfo
264         sliceTaskInfo.setServiceInstanceId(serviceInstanceId)
265
266         // create slice profile
267         ServiceInstance rspi = new ServiceInstance()
268         rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
269         rspi.setServiceType(serviceType)
270         rspi.setServiceRole(serviceRole)
271         rspi.setOrchestrationStatus(oStatus)
272         rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
273         rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
274         rspi.setInputParameters(uuiRequest)
275         rspi.setWorkloadContext(useInterval)
276         rspi.setEnvironmentContext(sNSSAI_id)
277
278         //timestamp format YYYY-MM-DD hh:mm:ss
279         rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
280
281         execution.setVariable("communicationServiceInstance", rspi)
282
283         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
284                 globalSubscriberId,
285                 subscriptionServiceType,
286                 serviceInstanceId)
287         client.create(uri, rspi)
288
289         execution.setVariable("sliceParams", sliceParams)
290     }
291
292     /**
293      * create An Slice Profile
294      * @param execution
295      */
296     void createAnSliceProfile(DelegateExecution execution) {
297
298         String globalSubscriberId = execution.getVariable("globalSubscriberId")
299         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
300         //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
301
302         SliceTaskParamsAdapter sliceParams =
303                 execution.getVariable("sliceParams") as SliceTaskParamsAdapter
304         SliceTaskInfo<AnSliceProfile> sliceTaskInfo = sliceParams.anSliceTaskInfo
305         AnSliceProfile anSliceProfile = sliceTaskInfo.sliceProfile
306
307         String profileId = UUID.randomUUID().toString()
308         anSliceProfile.setSliceProfileId(profileId)
309
310         SliceProfile sliceProfile = new SliceProfile()
311         sliceProfile.setProfileId(profileId)
312         sliceProfile.setCoverageAreaTAList(anSliceProfile.coverageAreaTAList as String)
313         //todo:...
314         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SLICE_PROFILE,
315                 globalSubscriberId,
316                 subscriptionServiceType,
317                 sliceTaskInfo.serviceInstanceId,
318                 profileId
319         )
320         client.create(uri, sliceProfile)
321         execution.setVariable("sliceParams", sliceParams)
322     }
323
324     /**
325      * prepare AllocateAnNssi
326      * @param execution
327      */
328     void prepareAllocateAnNssi(DelegateExecution execution) {
329
330         //todo:
331         SliceTaskParamsAdapter sliceParams =
332                 execution.getVariable("sliceParams") as SliceTaskParamsAdapter
333         SliceTaskInfo<AnSliceProfile> sliceTaskInfo = sliceParams.anSliceTaskInfo
334
335         NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
336
337         AllocateAnNssi allocateAnNssi = new AllocateAnNssi()
338         allocateAnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
339         allocateAnNssi.nssiId = sliceTaskInfo.NSSTInfo.UUID
340         allocateAnNssi.nssiName = sliceTaskInfo.NSSTInfo.name
341         allocateAnNssi.sliceProfile = sliceTaskInfo.sliceProfile
342         allocateAnNssi.nsiInfo.nsiId = sliceParams
343
344         EsrInfo esrInfo = new EsrInfo()
345         //todo: vendor and network
346         esrInfo.setVendor(sliceTaskInfo.getVendor())
347         esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
348
349         String globalSubscriberId = execution.getVariable("globalSubscriberId")
350         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
351
352         //todo: service info
353         ServiceInfo serviceInfo = new ServiceInfo()
354         serviceInfo.globalSubscriberId = globalSubscriberId
355         serviceInfo.subscriptionServiceType = subscriptionServiceType
356         serviceInfo.nsiId = sliceParams.serviceId
357         serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
358         serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
359
360         nbiRequest.setServiceInfo(serviceInfo)
361         nbiRequest.setEsrInfo(esrInfo)
362         nbiRequest.setAllocateAnNssi(allocateAnNssi)
363
364         execution.setVariable("AnAllocateNssiNbiRequest", nbiRequest)
365         execution.setVariable("anBHSliceTaskInfo", sliceTaskInfo)
366     }
367
368
369     /**
370      * create RAN Slice Profile Instance
371      * @param execution
372      */
373     void createCnSliceProfileInstance(DelegateExecution execution) {
374
375         String globalSubscriberId = execution.getVariable("globalSubscriberId")
376         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
377         String serviceInstanceId = UUID.randomUUID().toString()
378         execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
379
380         String serviceType = ""
381         String serviceRole = "slice-profile"
382         String oStatus = "deactivated"
383
384         SliceTaskParamsAdapter sliceParams =
385                 execution.getVariable("sliceParams") as SliceTaskParamsAdapter
386         SliceTaskInfo<CnSliceProfile> sliceTaskInfo = sliceParams.cnSliceTaskInfo
387         sliceTaskInfo.setServiceInstanceId(serviceInstanceId)
388
389         // create slice profile
390         ServiceInstance rspi = new ServiceInstance()
391         rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
392         rspi.setServiceType(serviceType)
393         rspi.setServiceRole(serviceRole)
394         rspi.setOrchestrationStatus(oStatus)
395         rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
396         rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
397         rspi.setInputParameters(uuiRequest)
398         rspi.setWorkloadContext(useInterval)
399         rspi.setEnvironmentContext(sNSSAI_id)
400
401         //timestamp format YYYY-MM-DD hh:mm:ss
402         rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
403
404         execution.setVariable("communicationServiceInstance", rspi)
405
406         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
407                 globalSubscriberId,
408                 subscriptionServiceType,
409                 serviceInstanceId)
410         client.create(uri, rspi)
411         execution.setVariable("sliceParams", sliceParams)
412     }
413
414     /**
415      * create An Slice Profile
416      * @param execution
417      */
418     void createCnSliceProfile(DelegateExecution execution) {
419
420         String globalSubscriberId = execution.getVariable("globalSubscriberId")
421         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
422         //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
423
424         SliceTaskParamsAdapter sliceParams =
425                 execution.getVariable("sliceParams") as SliceTaskParamsAdapter
426
427         SliceTaskInfo<CnSliceProfile> sliceTaskInfo = sliceParams.cnSliceTaskInfo
428         CnSliceProfile cnSliceProfile = sliceTaskInfo.sliceProfile
429
430         String profileId = UUID.randomUUID().toString()
431         cnSliceProfile.setSliceProfileId(profileId)
432
433         SliceProfile sliceProfile = new SliceProfile()
434         sliceProfile.setProfileId(profileId)
435         sliceProfile.setCoverageAreaTAList(cnSliceProfile.coverageAreaTAList as String)
436         //todo:...
437         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SLICE_PROFILE,
438                 globalSubscriberId,
439                 subscriptionServiceType,
440                 sliceTaskInfo.serviceInstanceId,
441                 profileId
442         )
443         client.create(uri, sliceProfile)
444         execution.setVariable("sliceParams", sliceParams)
445     }
446
447     /**
448      * prepare AllocateCnNssi
449      * @param execution
450      */
451     void prepareAllocateCnNssi(DelegateExecution execution) {
452
453         //todo:
454         SliceTaskParamsAdapter sliceParams =
455                 execution.getVariable("sliceParams") as SliceTaskParamsAdapter
456         SliceTaskInfo<CnSliceProfile> sliceTaskInfo = sliceParams.cnSliceTaskInfo
457
458         NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
459
460         AllocateCnNssi allocateCnNssi = new AllocateCnNssi()
461         allocateCnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
462         allocateCnNssi.nssiId = sliceTaskInfo.NSSTInfo.UUID
463         allocateCnNssi.nssiName = sliceTaskInfo.NSSTInfo.name
464         allocateCnNssi.sliceProfile = sliceTaskInfo.sliceProfile
465         allocateCnNssi.nsiInfo.nsiId = sliceParams
466
467         EsrInfo esrInfo = new EsrInfo()
468         //todo: vendor and network
469         esrInfo.setVendor(sliceTaskInfo.getVendor())
470         esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
471
472         String globalSubscriberId = execution.getVariable("globalSubscriberId")
473         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
474
475         //todo: service info
476         ServiceInfo serviceInfo = new ServiceInfo()
477         serviceInfo.globalSubscriberId = globalSubscriberId
478         serviceInfo.subscriptionServiceType = subscriptionServiceType
479         serviceInfo.nsiId = sliceParams.serviceId
480         serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
481         serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
482
483         nbiRequest.setServiceInfo(serviceInfo)
484         nbiRequest.setEsrInfo(esrInfo)
485         nbiRequest.setAllocateCnNssi(allocateCnNssi)
486
487         execution.setVariable("CnAllocateNssiNbiRequest", nbiRequest)
488         execution.setVariable("cnSliceTaskInfo", sliceTaskInfo)
489     }
490
491
492     /**
493      * create TN Slice Profile Instance
494      * @param execution
495      */
496     void createTnBHSliceProfileInstance(DelegateExecution execution) {
497         String globalSubscriberId = execution.getVariable("globalSubscriberId")
498         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
499
500         String serviceType = ""
501         String serviceRole = "slice-profile"
502         String oStatus = "deactivated"
503
504         SliceTaskParamsAdapter sliceParams =
505                 execution.getVariable("sliceParams") as SliceTaskParamsAdapter
506
507         SliceTaskInfo<TnSliceProfile> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
508         String serviceInstanceId = UUID.randomUUID().toString()
509
510         sliceTaskInfo.setServiceInstanceId(serviceInstanceId)
511         //execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
512
513         // create slice profile
514         ServiceInstance rspi = new ServiceInstance()
515         rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
516         rspi.setServiceType(serviceType)
517         rspi.setServiceRole(serviceRole)
518         rspi.setOrchestrationStatus(oStatus)
519         rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
520         rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
521         rspi.setInputParameters(uuiRequest)
522         rspi.setWorkloadContext(useInterval)
523         rspi.setEnvironmentContext(sNSSAI_id)
524
525         //timestamp format YYYY-MM-DD hh:mm:ss
526         rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
527
528         execution.setVariable("communicationServiceInstance", rspi)
529
530         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
531                 globalSubscriberId,
532                 subscriptionServiceType,
533                 serviceInstanceId)
534         client.create(uri, rspi)
535
536         execution.setVariable("sliceParams", sliceParams)
537     }
538
539     /**
540      * create An Slice Profile
541      * @param execution
542      */
543     void createTnBHSliceProfile(DelegateExecution execution) {
544
545         String globalSubscriberId = execution.getVariable("globalSubscriberId")
546         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
547         String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
548
549         SliceTaskParamsAdapter sliceParams =
550                 execution.getVariable("sliceParams") as SliceTaskParamsAdapter
551
552         SliceTaskInfo<TnSliceProfile> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
553
554         TnSliceProfile tnSliceProfile = sliceTaskInfo.sliceProfile
555         String profileId = UUID.randomUUID().toString()
556         tnSliceProfile.setSliceProfileId(profileId)
557
558         SliceProfile sliceProfile = new SliceProfile()
559         sliceProfile.setProfileId(profileId)
560         //todo:...
561         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SLICE_PROFILE,
562                 globalSubscriberId,
563                 subscriptionServiceType,
564                 serviceInstanceId,
565                 profileId
566         )
567         client.create(uri, sliceProfile)
568
569         execution.setVariable("sliceParams", sliceParams)
570     }
571
572     /**
573      * prepare AllocateCnNssi
574      * @param execution
575      */
576     void prepareAllocateTnBHNssi(DelegateExecution execution) {
577
578         //todo:
579         SliceTaskParamsAdapter sliceParams =
580                 execution.getVariable("sliceParams") as SliceTaskParamsAdapter
581         SliceTaskInfo<TnSliceProfile> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
582
583         NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
584
585         AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
586         //todo: AllocateTnNssi
587         //allocateTnNssi.networkSliceInfos
588
589         EsrInfo esrInfo = new EsrInfo()
590         //todo: vendor and network
591         esrInfo.setVendor(sliceTaskInfo.getVendor())
592         esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
593
594         String globalSubscriberId = execution.getVariable("globalSubscriberId")
595         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
596
597         //todo: service info
598         ServiceInfo serviceInfo = new ServiceInfo()
599         serviceInfo.globalSubscriberId = globalSubscriberId
600         serviceInfo.subscriptionServiceType = subscriptionServiceType
601         serviceInfo.nsiId = sliceParams.serviceId
602         serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
603         serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
604
605         nbiRequest.setServiceInfo(serviceInfo)
606         nbiRequest.setEsrInfo(esrInfo)
607         nbiRequest.setAllocateTnNssi(allocateTnNssi)
608
609         execution.setVariable("TnBHAllocateNssiNbiRequest", nbiRequest)
610         execution.setVariable("tnBHSliceTaskInfo", sliceTaskInfo)
611     }
612
613 }