Merge "do not retrieve relationship-list for platform"
[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.so.beans.nsmf.SliceProfileAdapter
24 import org.onap.so.beans.nsmf.oof.SubnetType
25 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
26 import javax.ws.rs.NotFoundException
27 import org.camunda.bpm.engine.delegate.BpmnError
28 import org.camunda.bpm.engine.delegate.DelegateExecution
29 import org.onap.aai.domain.yang.Relationship
30 import org.onap.aai.domain.yang.ServiceInstance
31 import org.onap.aai.domain.yang.SliceProfile
32 import org.onap.aaiclient.client.aai.AAIResourcesClient
33 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
34 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
35 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
36 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder
37 import org.onap.so.beans.nsmf.AllocateAnNssi
38 import org.onap.so.beans.nsmf.AllocateCnNssi
39 import org.onap.so.beans.nsmf.AllocateTnNssi
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.ServiceInfo
44 import org.onap.so.beans.nsmf.SliceTaskInfo
45 import org.onap.so.beans.nsmf.SliceTaskParamsAdapter
46 import org.onap.so.bpmn.common.scripts.ExceptionUtil
47 import org.onap.so.bpmn.core.json.JsonUtils
48 import org.slf4j.Logger
49 import org.slf4j.LoggerFactory
50 import static org.apache.commons.lang3.StringUtils.isBlank
51
52 class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
53
54     private static final Logger logger = LoggerFactory.getLogger(DoAllocateNSIandNSSI.class);
55
56     ExceptionUtil exceptionUtil = new ExceptionUtil()
57
58     JsonUtils jsonUtil = new JsonUtils()
59
60     AAIResourcesClient client = getAAIClient()
61
62     /**
63      * Pre Process the BPMN Flow Request
64      * Inclouds:
65      * generate the nsOperationKey
66      * generate the nsParameters
67      */
68
69     void preProcessRequest (DelegateExecution execution) {
70         String msg = ""
71         logger.trace("Enter preProcessRequest()")
72         Map<String, Object> nssiMap = new HashMap<>()
73         execution.setVariable("nssiMap", nssiMap)
74         boolean isMoreNSSTtoProcess = true
75         execution.setVariable("isMoreNSSTtoProcess", isMoreNSSTtoProcess)
76         List<String> nsstSequence = new ArrayList<>(Arrays.asList("cn"))
77         execution.setVariable("nsstSequence", nsstSequence)
78         logger.trace("Exit preProcessRequest")
79     }
80
81     /**
82      * Process NSI options
83      * @param execution
84      */
85     void retriveSliceOption(DelegateExecution execution) {
86         logger.trace("Enter retriveSliceOption() of DoAllocateNSIandNSSI")
87
88         boolean isNSIOptionAvailable
89
90         SliceTaskParamsAdapter sliceParams =
91                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
92
93         if(isBlank(sliceParams.getSuggestNsiId())) {
94             isNSIOptionAvailable = false
95         }
96         else {
97             isNSIOptionAvailable = true
98             execution.setVariable('nsiServiceInstanceId', sliceParams.getSuggestNsiId())
99             execution.setVariable('nsiServiceInstanceName', sliceParams.getSuggestNsiName())
100         }
101         execution.setVariable("isNSIOptionAvailable", isNSIOptionAvailable)
102         logger.trace("Exit retriveSliceOption() of DoAllocateNSIandNSSI")
103     }
104
105
106     /**
107      * create nsi instance in aai
108      * @param execution
109      */
110     void createNSIinAAI(DelegateExecution execution) {
111         logger.debug("Enter CreateNSIinAAI in DoAllocateNSIandNSSI()")
112
113         String sliceInstanceId = UUID.randomUUID().toString()
114         SliceTaskParamsAdapter sliceParams =
115                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
116
117         //set new nsiId to sliceParams suggestNsiId
118         sliceParams.setSuggestNsiId(sliceInstanceId)
119
120         ServiceInstance nsi = new ServiceInstance()
121
122
123         String sliceInstanceName = "nsi_"+execution.getVariable("sliceServiceInstanceName")
124         String serviceType = execution.getVariable("serviceType")
125         String serviceStatus = "deactivated"
126         String modelInvariantUuid = sliceParams.getNSTInfo().invariantUUID
127         String modelUuid = sliceParams.getNSTInfo().UUID
128
129         String uuiRequest = execution.getVariable("uuiRequest")
130         String serviceInstanceLocationid = jsonUtil.getJsonValue(uuiRequest, "service.parameters.requestInputs.plmnIdList")
131         String serviceRole = "nsi"
132
133         execution.setVariable("sliceInstanceId", sliceInstanceId)
134         nsi.setServiceInstanceId(sliceInstanceId)
135         nsi.setServiceInstanceName(sliceInstanceName)
136         nsi.setServiceType(serviceType)
137         nsi.setOrchestrationStatus(serviceStatus)
138         nsi.setModelInvariantId(modelInvariantUuid)
139         nsi.setModelVersionId(modelUuid)
140         nsi.setServiceInstanceLocationId(serviceInstanceLocationid)
141         nsi.setServiceRole(serviceRole)
142         String msg
143         try {
144
145             AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceInstanceId))
146             client.create(nsiServiceUri, nsi)
147
148             execution.setVariable("nsiServiceUri", nsiServiceUri)
149
150         } catch (BpmnError e) {
151             throw e
152         } catch (Exception ex) {
153             msg = "Exception in DoCreateSliceServiceInstance.instantiateSliceService. " + ex.getMessage()
154             logger.info(msg)
155             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
156         }
157         execution.setVariable("sliceTaskParams", sliceParams)
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             if (!si.isPresent()) {
203                 String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
204                 logger.debug(msg)
205                 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
206             }
207
208             AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceParams.suggestNsiId).allottedResource(allottedResourceId))
209
210             client.connect(allottedResourceUri, nsiServiceUri)
211
212             execution.setVariable("sliceTaskParams", sliceParams)
213         }catch(BpmnError e) {
214             throw e
215         }catch (Exception ex){
216             String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
217             logger.debug(msg)
218             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
219         }
220         logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
221     }
222
223     /**
224      * create RAN Slice Profile Instance
225      * @param execution
226      */
227     void createAnSliceProfileInstance(DelegateExecution execution) {
228
229         String globalSubscriberId = execution.getVariable("globalSubscriberId")
230         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
231         String serviceInstanceId = UUID.randomUUID().toString()
232         execution.setVariable("ranSliceProfileInstanceId", serviceInstanceId) //todo:
233
234         String serviceType = ""
235         String serviceRole = "slice-profile"
236         String oStatus = "deactivated"
237
238         SliceTaskParamsAdapter sliceParams =
239                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
240         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
241         sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
242
243         // create slice profile
244         ServiceInstance rspi = new ServiceInstance()
245         rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
246         rspi.setServiceType(serviceType)
247         rspi.setServiceRole(serviceRole)
248         rspi.setOrchestrationStatus(oStatus)
249         rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
250         rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
251         rspi.setInputParameters(execution.getVariable("uuiRequest"))
252         rspi.setWorkloadContext(execution.getVariable("useInterval"))
253         rspi.setEnvironmentContext(execution.getVariable("sNSSAI_id"))
254
255         //timestamp format YYYY-MM-DD hh:mm:ss
256         rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
257
258         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(serviceInstanceId))
259         client.create(uri, rspi)
260
261         execution.setVariable("sliceTaskParams", sliceParams)
262     }
263
264     /**
265      * create An Slice Profile
266      * @param execution
267      */
268     void createAnSliceProfile(DelegateExecution execution) {
269
270         String globalSubscriberId = execution.getVariable("globalSubscriberId")
271         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
272         //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
273
274         SliceTaskParamsAdapter sliceParams =
275                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
276         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
277         SliceProfileAdapter anSliceProfile = sliceTaskInfo.sliceProfile
278
279         String profileId = UUID.randomUUID().toString()
280         anSliceProfile.setSliceProfileId(profileId)
281
282         SliceProfile sliceProfile = new SliceProfile()
283         sliceProfile.setProfileId(profileId)
284         sliceProfile.setCoverageAreaTAList(anSliceProfile.coverageAreaTAList)
285         //todo:...
286         AAIResourceUri uri = AAIUriFactory.createResourceUri(
287             AAIFluentTypeBuilder.business().customer(globalSubscriberId)
288             .serviceSubscription(subscriptionServiceType)
289             .serviceInstance(sliceTaskInfo.sliceInstanceId)
290             .sliceProfile(profileId)
291         )
292         client.create(uri, sliceProfile)
293         execution.setVariable("sliceTaskParams", sliceParams)
294     }
295
296     /**
297      * prepare AllocateAnNssi
298      * @param execution
299      */
300     void prepareAllocateAnNssi(DelegateExecution execution) {
301
302         //todo:
303         SliceTaskParamsAdapter sliceParams =
304                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
305         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
306
307         NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
308
309         AllocateAnNssi allocateAnNssi = new AllocateAnNssi()
310         allocateAnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2AnProfile()
311         allocateAnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
312         allocateAnNssi.nssiId = sliceTaskInfo.suggestNssiId
313         allocateAnNssi.nssiName = sliceTaskInfo.NSSTInfo.name
314         allocateAnNssi.nsiInfo.nsiId = sliceParams.suggestNsiId
315
316         EsrInfo esrInfo = new EsrInfo()
317         //todo: vendor and network
318         esrInfo.setVendor(sliceTaskInfo.getVendor())
319         esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
320
321         String globalSubscriberId = execution.getVariable("globalSubscriberId")
322         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
323
324         //todo: service info
325         ServiceInfo serviceInfo = new ServiceInfo()
326         serviceInfo.globalSubscriberId = globalSubscriberId
327         serviceInfo.subscriptionServiceType = subscriptionServiceType
328         serviceInfo.nsiId = sliceParams.suggestNsiId
329         serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
330         serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
331
332         nbiRequest.setServiceInfo(serviceInfo)
333         nbiRequest.setEsrInfo(esrInfo)
334         nbiRequest.setAllocateAnNssi(allocateAnNssi)
335
336         execution.setVariable("AnAllocateNssiNbiRequest", nbiRequest)
337         execution.setVariable("anSliceTaskInfo", sliceTaskInfo)
338         execution.setVariable("anSubnetType", SubnetType.AN)
339     }
340
341
342     /**
343      * create RAN Slice Profile Instance
344      * @param execution
345      */
346     void createCnSliceProfileInstance(DelegateExecution execution) {
347
348         String globalSubscriberId = execution.getVariable("globalSubscriberId")
349         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
350         String serviceInstanceId = UUID.randomUUID().toString()
351         execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
352
353         String serviceType = ""
354         String serviceRole = "slice-profile"
355         String oStatus = "deactivated"
356
357         SliceTaskParamsAdapter sliceParams =
358                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
359         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
360         sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
361
362         // create slice profile
363         ServiceInstance rspi = new ServiceInstance()
364         rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
365         rspi.setServiceType(serviceType)
366         rspi.setServiceRole(serviceRole)
367         rspi.setOrchestrationStatus(oStatus)
368         rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
369         rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
370         rspi.setInputParameters(uuiRequest)
371         rspi.setWorkloadContext(useInterval)
372         rspi.setEnvironmentContext(sNSSAI_id)
373
374         //timestamp format YYYY-MM-DD hh:mm:ss
375         rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
376
377         execution.setVariable("communicationServiceInstance", rspi)
378
379         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(serviceInstanceId))
380         client.create(uri, rspi)
381         execution.setVariable("sliceTaskParams", sliceParams)
382     }
383
384     /**
385      * create Cn Slice Profile
386      * @param execution
387      */
388     void createCnSliceProfile(DelegateExecution execution) {
389
390         String globalSubscriberId = execution.getVariable("globalSubscriberId")
391         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
392         //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
393
394         SliceTaskParamsAdapter sliceParams =
395                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
396
397         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
398         SliceProfileAdapter cnSliceProfile = sliceTaskInfo.sliceProfile
399
400         String profileId = UUID.randomUUID().toString()
401         cnSliceProfile.setSliceProfileId(profileId)
402
403         SliceProfile sliceProfile = new SliceProfile()
404         sliceProfile.setProfileId(profileId)
405         sliceProfile.setCoverageAreaTAList(cnSliceProfile.coverageAreaTAList as String)
406         //todo:...
407         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(sliceTaskInfo.sliceInstanceId).sliceProfile(profileId))
408         client.create(uri, sliceProfile)
409         execution.setVariable("sliceTaskParams", sliceParams)
410     }
411
412     /**
413      * prepare AllocateCnNssi
414      * @param execution
415      */
416     void prepareAllocateCnNssi(DelegateExecution execution) {
417
418         //todo:
419         SliceTaskParamsAdapter sliceParams =
420                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
421         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
422
423         NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
424
425         AllocateCnNssi allocateCnNssi = new AllocateCnNssi()
426         allocateCnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
427         allocateCnNssi.nssiId = sliceTaskInfo.suggestNssiId
428         allocateCnNssi.nssiName = sliceTaskInfo.NSSTInfo.name
429         allocateCnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2CnProfile()
430         allocateCnNssi.nsiInfo.nsiId = sliceParams.suggestNsiId
431
432         EsrInfo esrInfo = new EsrInfo()
433         //todo: vendor and network
434         esrInfo.setVendor(sliceTaskInfo.getVendor())
435         esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
436
437         String globalSubscriberId = execution.getVariable("globalSubscriberId")
438         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
439
440         //todo: service info
441         ServiceInfo serviceInfo = new ServiceInfo()
442         serviceInfo.globalSubscriberId = globalSubscriberId
443         serviceInfo.subscriptionServiceType = subscriptionServiceType
444         serviceInfo.nsiId = sliceParams.suggestNsiId
445         serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
446         serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
447         serviceInfo.nssiId = sliceTaskInfo.suggestNssiId //if shared
448
449         nbiRequest.setServiceInfo(serviceInfo)
450         nbiRequest.setEsrInfo(esrInfo)
451         nbiRequest.setAllocateCnNssi(allocateCnNssi)
452
453         execution.setVariable("CnAllocateNssiNbiRequest", nbiRequest)
454         execution.setVariable("cnSliceTaskInfo", sliceTaskInfo)
455         execution.setVariable("cnSubnetType", SubnetType.CN)
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<SliceProfileAdapter> 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 Tn 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<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
516
517         SliceProfileAdapter 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<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
540
541         NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
542
543         AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
544         //todo: AllocateTnNssi
545         //todo: endpointId -> set into tn
546         allocateTnNssi.setTransportSliceNetworks()
547         allocateTnNssi.setNetworkSliceInfos()
548
549
550
551         //allocateTnNssi.networkSliceInfos
552
553         EsrInfo esrInfo = new EsrInfo()
554         esrInfo.setVendor(sliceTaskInfo.getVendor())
555         esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
556
557         String globalSubscriberId = execution.getVariable("globalSubscriberId")
558         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
559
560         ServiceInfo serviceInfo = new ServiceInfo()
561         serviceInfo.globalSubscriberId = globalSubscriberId
562         serviceInfo.subscriptionServiceType = subscriptionServiceType
563         serviceInfo.nsiId = sliceParams.suggestNsiId
564         serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
565         serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
566         serviceInfo.nssiId = sliceTaskInfo.suggestNssiId
567
568         nbiRequest.setServiceInfo(serviceInfo)
569         nbiRequest.setEsrInfo(esrInfo)
570         nbiRequest.setAllocateTnNssi(allocateTnNssi)
571
572         execution.setVariable("TnBHAllocateNssiNbiRequest", nbiRequest)
573         execution.setVariable("tnBHSliceTaskInfo", sliceTaskInfo)
574         execution.setVariable("tnBHSubnetType", SubnetType.TN_BH)
575     }
576
577     /**
578      * Update relationship between
579      * 1. NSI and NSSI
580      * 2. Slice Profile and Service Profile
581      * 3. SliceProfile and NSSI
582      * 4. sliceProfile and endpoint
583      *
584      * @param execution
585      */
586     public void updateAnRelationship(DelegateExecution execution) {
587         //todo:
588         SliceTaskParamsAdapter sliceParams =
589                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
590
591         NssiResponse result = execution.getVariable("anNssiAllocateResult") as NssiResponse
592         String nssiId = result.getNssiId()
593         String nsiId = sliceParams.getSuggestNsiId()
594         String sliceProfileInstanceId = sliceParams.anSliceTaskInfo.sliceInstanceId
595         String serviceProfileInstanceId = sliceParams.serviceId
596         //nsi id
597         //todo: aai -> nssi -> relationship -> endpointId -> set into tn
598         String endPointId = getEndpointIdFromAAI(execution, nssiId)
599         execution.setVariable("endPointIdAn", endPointId)
600
601         updateRelationship(execution, nsiId, nssiId)
602
603         updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
604
605         updateRelationship(execution, sliceProfileInstanceId, nssiId)
606
607         sliceParams.anSliceTaskInfo.suggestNssiId = nssiId
608         execution.setVariable("sliceTaskParams", sliceParams)
609     }
610
611
612     /**
613      * Update relationship between
614      * 1. NSI and NSSI
615      * 2. Slice Profile and Service Profile
616      * 3. SliceProfile and NSSI
617      *
618      * @param execution
619      */
620     public void updateCnRelationship(DelegateExecution execution) {
621         //todo:
622         SliceTaskParamsAdapter sliceParams =
623                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
624
625         NssiResponse result = execution.getVariable("cnNssiAllocateResult") as NssiResponse
626         String nssiId = result.getNssiId()
627         String nsiId = sliceParams.getSuggestNsiId()
628         String sliceProfileInstanceId = sliceParams.cnSliceTaskInfo.sliceInstanceId
629         String serviceProfileInstanceId = sliceParams.serviceId
630         //nsi id
631         //todo: aai -> nssi -> relationship -> endpointId -> set into tn
632         String endPointId = getEndpointIdFromAAI(execution, nssiId)
633         execution.setVariable("endPointIdCn", endPointId)
634
635         updateRelationship(execution, nsiId, nssiId)
636
637         updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
638
639         updateRelationship(execution,sliceProfileInstanceId, nssiId)
640
641         sliceParams.cnSliceTaskInfo.suggestNssiId = nssiId
642         execution.setVariable("sliceTaskParams", sliceParams)
643     }
644
645     /**
646      * get endpoint Id from AAI by nssi id
647      * @param execution
648      * @param nssiId
649      * @return
650      */
651     private String getEndpointIdFromAAI(DelegateExecution execution, String nssiId) {
652         logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
653         //todo: allottedResourceId
654
655         SliceTaskParamsAdapter sliceParams =
656                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
657
658         //sliceParams.setServiceId(nsiServiceInstanceID)
659         AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(nssiId))
660
661         String endpointId = null
662
663         try {
664             AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
665             Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
666             if (!si.isPresent()) {
667                 String msg = "NSSI in the option doesn't exist. " + nssiId
668                 logger.debug(msg)
669                 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
670             } else {
671                 ServiceInstance nssiInstance = si.get()
672                 //todo: handle relationship and return endpointId
673                 if (nssiInstance.relationshipList == null) {
674                     String msg = "relationshipList of " + nssiId + " is null"
675                     logger.debug(msg)
676                     return null
677                 }
678                 for (Relationship relationship : nssiInstance.relationshipList.getRelationship()) {
679                     if (relationship.relationshipLabel){
680                         endpointId = relationship //todo
681                     }
682                 }
683
684                 return endpointId
685             }
686
687         }catch(BpmnError e) {
688             throw e
689         }catch (Exception ex){
690             String msg = "Exception: " + ex
691             logger.debug(msg)
692             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
693         }
694         logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
695     }
696
697     /**
698      * Update relationship between
699      * 1. NSI and NSSI
700      * 2. Slice Profile and Service Profile
701      * 3. SliceProfile and NSSI
702      *
703      * @param execution
704      */
705     public void updateTnBHRelationship(DelegateExecution execution) {
706         SliceTaskParamsAdapter sliceParams =
707                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
708
709         NssiResponse result = execution.getVariable("tnBHNssiAllocateResult") as NssiResponse
710         String nssiId = result.getNssiId()
711         String nsiId = sliceParams.getSuggestNsiId()
712         String sliceProfileInstanceId = sliceParams.tnBHSliceTaskInfo.sliceInstanceId
713         String serviceProfileInstanceId = sliceParams.serviceId
714         //nsi id
715
716         updateRelationship(execution, nsiId, nssiId)
717
718         updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
719
720         updateRelationship(execution,sliceProfileInstanceId, nssiId)
721
722         sliceParams.tnBHSliceTaskInfo.suggestNssiId = nssiId
723         execution.setVariable("sliceTaskParams", sliceParams)
724     }
725
726     /**
727      * sourceId -> targetId
728      * @param execution
729      * @param sourceId
730      * @param targetId
731      */
732     void updateRelationship(DelegateExecution execution, String sourceId, String targetId) {
733         //relation ship
734         Relationship relationship = new Relationship()
735
736         AAIResourceUri targetInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(targetId))
737
738         logger.info("Creating relationship, targetInstanceUri: " + targetInstanceUri)
739
740         relationship.setRelatedLink(targetInstanceUri.build().toString())
741
742         AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sourceId)).relationshipAPI()
743         client.create(sourceInstanceUri, relationship)
744     }
745
746 }