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