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