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