2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 # Copyright (c) 2020, CMCC Technologies Co., Ltd.
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
11 # http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.onap.so.bpmn.infrastructure.scripts
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
54 class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
56 private static final Logger logger = LoggerFactory.getLogger(DoAllocateNSIandNSSI.class);
58 ExceptionUtil exceptionUtil = new ExceptionUtil()
60 JsonUtils jsonUtil = new JsonUtils()
62 AAIResourcesClient client = getAAIClient()
65 * Pre Process the BPMN Flow Request
67 * generate the nsOperationKey
68 * generate the nsParameters
71 void preProcessRequest (DelegateExecution execution) {
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")
87 void retriveSliceOption(DelegateExecution execution) {
88 logger.trace("Enter retriveSliceOption() of DoAllocateNSIandNSSI")
90 boolean isNSIOptionAvailable
92 SliceTaskParamsAdapter sliceParams =
93 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
95 if(isBlank(sliceParams.getSuggestNsiId())) {
96 isNSIOptionAvailable = false
99 isNSIOptionAvailable = true
100 execution.setVariable('nsiServiceInstanceId', sliceParams.getSuggestNsiId())
101 execution.setVariable('nsiServiceInstanceName', sliceParams.getSuggestNsiName())
103 execution.setVariable("isNSIOptionAvailable", isNSIOptionAvailable)
104 logger.trace("Exit retriveSliceOption() of DoAllocateNSIandNSSI")
109 * create nsi instance in aai
112 void createNSIinAAI(DelegateExecution execution) {
113 logger.debug("Enter CreateNSIinAAI in DoAllocateNSIandNSSI()")
115 String sliceInstanceId = UUID.randomUUID().toString()
116 SliceTaskParamsAdapter sliceParams =
117 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
119 //set new nsiId to sliceParams suggestNsiId
120 sliceParams.setSuggestNsiId(sliceInstanceId)
122 ServiceInstance nsi = new ServiceInstance()
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
131 String uuiRequest = execution.getVariable("uuiRequest")
132 String serviceInstanceLocationid = jsonUtil.getJsonValue(uuiRequest, "service.parameters.requestInputs.plmnIdList")
133 String serviceRole = "nsi"
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)
147 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceInstanceId))
148 client.create(nsiServiceUri, nsi)
150 execution.setVariable("nsiServiceUri", nsiServiceUri)
152 } catch (BpmnError e) {
154 } catch (Exception ex) {
155 msg = "Exception in DoCreateSliceServiceInstance.instantiateSliceService. " + ex.getMessage()
157 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
159 execution.setVariable("sliceTaskParams", sliceParams)
161 logger.debug("Exit CreateNSIinAAI in DoAllocateNSIandNSSI()")
166 * create relationship between nsi and service profile instance
169 void createRelationship(DelegateExecution execution) {
171 String allottedResourceId = execution.getVariable("allottedResourceId")
172 SliceTaskParamsAdapter sliceParams =
173 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
175 AAIResourceUri nsiServiceUri = execution.getVariable("nsiServiceUri") as AAIResourceUri
176 logger.info("Creating Allotted resource relationship, nsiServiceUri: " + nsiServiceUri)
178 AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceParams.suggestNsiId).allottedResource(allottedResourceId))
180 client.connect(allottedResourceUri, nsiServiceUri)
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
193 SliceTaskParamsAdapter sliceParams =
194 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
196 String nsiServiceInstanceID = sliceParams.getSuggestNsiId()
197 //sliceParams.setServiceId(nsiServiceInstanceID)
199 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(nsiServiceInstanceID))
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
207 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
210 AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceParams.suggestNsiId).allottedResource(allottedResourceId))
212 client.connect(allottedResourceUri, nsiServiceUri)
214 execution.setVariable("sliceTaskParams", sliceParams)
215 }catch(BpmnError e) {
217 }catch (Exception ex){
218 String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
220 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
222 logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
226 * create RAN Slice Profile Instance
229 void createAnSliceProfileInstance(DelegateExecution execution) {
231 String globalSubscriberId = execution.getVariable("globalSubscriberId")
232 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
233 String serviceInstanceId = UUID.randomUUID().toString()
234 execution.setVariable("ranSliceProfileInstanceId", serviceInstanceId) //todo:
236 String serviceType = ""
237 String serviceRole = "slice-profile"
238 String oStatus = "deactivated"
240 SliceTaskParamsAdapter sliceParams =
241 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
242 SliceTaskInfo<AnSliceProfile> sliceTaskInfo = sliceParams.anSliceTaskInfo
243 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
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"))
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()))
260 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(serviceInstanceId))
261 client.create(uri, rspi)
263 execution.setVariable("sliceTaskParams", sliceParams)
267 * create An Slice Profile
270 void createAnSliceProfile(DelegateExecution execution) {
272 String globalSubscriberId = execution.getVariable("globalSubscriberId")
273 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
274 //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
276 SliceTaskParamsAdapter sliceParams =
277 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
278 SliceTaskInfo<AnSliceProfile> sliceTaskInfo = sliceParams.anSliceTaskInfo
279 AnSliceProfile anSliceProfile = sliceTaskInfo.sliceProfile
281 String profileId = UUID.randomUUID().toString()
282 anSliceProfile.setSliceProfileId(profileId)
284 SliceProfile sliceProfile = new SliceProfile()
285 sliceProfile.setProfileId(profileId)
286 sliceProfile.setCoverageAreaTAList(anSliceProfile.coverageAreaTAList as String)
288 AAIResourceUri uri = AAIUriFactory.createResourceUri(
289 AAIFluentTypeBuilder.business().customer(globalSubscriberId)
290 .serviceSubscription(subscriptionServiceType)
291 .serviceInstance(sliceTaskInfo.sliceInstanceId)
292 .sliceProfile(profileId)
294 client.create(uri, sliceProfile)
295 execution.setVariable("sliceTaskParams", sliceParams)
299 * prepare AllocateAnNssi
302 void prepareAllocateAnNssi(DelegateExecution execution) {
305 SliceTaskParamsAdapter sliceParams =
306 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
307 SliceTaskInfo<AnSliceProfile> sliceTaskInfo = sliceParams.anSliceTaskInfo
309 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
311 AllocateAnNssi allocateAnNssi = new AllocateAnNssi()
312 allocateAnNssi.sliceProfile = sliceTaskInfo.sliceProfile
314 EsrInfo esrInfo = new EsrInfo()
315 //todo: vendor and network
316 esrInfo.setVendor(sliceTaskInfo.getVendor())
317 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
319 String globalSubscriberId = execution.getVariable("globalSubscriberId")
320 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
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
330 nbiRequest.setServiceInfo(serviceInfo)
331 nbiRequest.setEsrInfo(esrInfo)
332 nbiRequest.setAllocateAnNssi(allocateAnNssi)
334 execution.setVariable("AnAllocateNssiNbiRequest", nbiRequest)
335 execution.setVariable("anSliceTaskInfo", sliceTaskInfo)
336 execution.setVariable("anSubnetType", SubnetType.AN_NF)
341 * create RAN Slice Profile Instance
344 void createCnSliceProfileInstance(DelegateExecution execution) {
346 String globalSubscriberId = execution.getVariable("globalSubscriberId")
347 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
348 String serviceInstanceId = UUID.randomUUID().toString()
349 execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
351 String serviceType = ""
352 String serviceRole = "slice-profile"
353 String oStatus = "deactivated"
355 SliceTaskParamsAdapter sliceParams =
356 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
357 SliceTaskInfo<CnSliceProfile> sliceTaskInfo = sliceParams.cnSliceTaskInfo
358 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
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)
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()))
375 execution.setVariable("communicationServiceInstance", rspi)
377 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(serviceInstanceId))
378 client.create(uri, rspi)
379 execution.setVariable("sliceTaskParams", sliceParams)
383 * create Cn Slice Profile
386 void createCnSliceProfile(DelegateExecution execution) {
388 String globalSubscriberId = execution.getVariable("globalSubscriberId")
389 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
390 //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
392 SliceTaskParamsAdapter sliceParams =
393 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
395 SliceTaskInfo<CnSliceProfile> sliceTaskInfo = sliceParams.cnSliceTaskInfo
396 CnSliceProfile cnSliceProfile = sliceTaskInfo.sliceProfile
398 String profileId = UUID.randomUUID().toString()
399 cnSliceProfile.setSliceProfileId(profileId)
401 SliceProfile sliceProfile = new SliceProfile()
402 sliceProfile.setProfileId(profileId)
403 sliceProfile.setCoverageAreaTAList(cnSliceProfile.coverageAreaTAList as String)
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)
411 * prepare AllocateCnNssi
414 void prepareAllocateCnNssi(DelegateExecution execution) {
417 SliceTaskParamsAdapter sliceParams =
418 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
419 SliceTaskInfo<CnSliceProfile> sliceTaskInfo = sliceParams.cnSliceTaskInfo
421 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
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
430 EsrInfo esrInfo = new EsrInfo()
431 //todo: vendor and network
432 esrInfo.setVendor(sliceTaskInfo.getVendor())
433 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
435 String globalSubscriberId = execution.getVariable("globalSubscriberId")
436 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
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
447 nbiRequest.setServiceInfo(serviceInfo)
448 nbiRequest.setEsrInfo(esrInfo)
449 nbiRequest.setAllocateCnNssi(allocateCnNssi)
451 execution.setVariable("CnAllocateNssiNbiRequest", nbiRequest)
452 execution.setVariable("cnSliceTaskInfo", sliceTaskInfo)
453 execution.setVariable("cnSubnetType", SubnetType.CN)
458 * create TN Slice Profile Instance
461 void createTnBHSliceProfileInstance(DelegateExecution execution) {
462 String globalSubscriberId = execution.getVariable("globalSubscriberId")
463 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
465 String serviceType = ""
466 String serviceRole = "slice-profile"
467 String oStatus = "deactivated"
469 SliceTaskParamsAdapter sliceParams =
470 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
472 SliceTaskInfo<TnSliceProfile> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
473 String serviceInstanceId = UUID.randomUUID().toString()
475 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
476 //execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
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)
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()))
493 execution.setVariable("communicationServiceInstance", rspi)
495 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(serviceInstanceId))
496 client.create(uri, rspi)
498 execution.setVariable("sliceTaskParams", sliceParams)
502 * create Tn Slice Profile
505 void createTnBHSliceProfile(DelegateExecution execution) {
507 String globalSubscriberId = execution.getVariable("globalSubscriberId")
508 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
510 SliceTaskParamsAdapter sliceParams =
511 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
513 SliceTaskInfo<TnSliceProfile> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
515 TnSliceProfile tnSliceProfile = sliceTaskInfo.sliceProfile
516 String profileId = UUID.randomUUID().toString()
517 tnSliceProfile.setSliceProfileId(profileId)
519 SliceProfile sliceProfile = new SliceProfile()
520 sliceProfile.setProfileId(profileId)
522 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(sliceTaskInfo.sliceInstanceId).sliceProfile(profileId))
523 client.create(uri, sliceProfile)
525 execution.setVariable("sliceTaskParams", sliceParams)
529 * prepare AllocateCnNssi
532 void prepareAllocateTnBHNssi(DelegateExecution execution) {
535 SliceTaskParamsAdapter sliceParams =
536 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
537 SliceTaskInfo<TnSliceProfile> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
539 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
541 AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
542 //todo: AllocateTnNssi
543 //todo: endpointId -> set into tn
544 allocateTnNssi.setTransportSliceNetworks()
545 allocateTnNssi.setNetworkSliceInfos()
548 //allocateTnNssi.networkSliceInfos
550 EsrInfo esrInfo = new EsrInfo()
551 esrInfo.setVendor(sliceTaskInfo.getVendor())
552 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
554 String globalSubscriberId = execution.getVariable("globalSubscriberId")
555 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
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
565 nbiRequest.setServiceInfo(serviceInfo)
566 nbiRequest.setEsrInfo(esrInfo)
567 nbiRequest.setAllocateTnNssi(allocateTnNssi)
569 execution.setVariable("TnBHAllocateNssiNbiRequest", nbiRequest)
570 execution.setVariable("tnBHSliceTaskInfo", sliceTaskInfo)
571 execution.setVariable("tnBHSubnetType", SubnetType.TN_BH)
575 * Update relationship between
577 * 2. Slice Profile and Service Profile
578 * 3. SliceProfile and NSSI
579 * 4. sliceProfile and endpoint
583 public void updateAnRelationship(DelegateExecution execution) {
585 SliceTaskParamsAdapter sliceParams =
586 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
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
594 //todo: aai -> nssi -> relationship -> endpointId -> set into tn
595 String endPointId = getEndpointIdFromAAI(execution, nssiId)
596 execution.setVariable("endPointIdAn", endPointId)
598 updateRelationship(execution, nsiId, nssiId)
600 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
602 updateRelationship(execution, sliceProfileInstanceId, nssiId)
604 sliceParams.anSliceTaskInfo.suggestNssiId = nssiId
605 execution.setVariable("sliceTaskParams", sliceParams)
610 * Update relationship between
612 * 2. Slice Profile and Service Profile
613 * 3. SliceProfile and NSSI
617 public void updateCnRelationship(DelegateExecution execution) {
619 SliceTaskParamsAdapter sliceParams =
620 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
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
628 //todo: aai -> nssi -> relationship -> endpointId -> set into tn
629 String endPointId = getEndpointIdFromAAI(execution, nssiId)
630 execution.setVariable("endPointIdCn", endPointId)
632 updateRelationship(execution, nsiId, nssiId)
634 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
636 updateRelationship(execution,sliceProfileInstanceId, nssiId)
638 sliceParams.cnSliceTaskInfo.suggestNssiId = nssiId
639 execution.setVariable("sliceTaskParams", sliceParams)
643 * get endpoint Id from AAI by nssi id
648 private String getEndpointIdFromAAI(DelegateExecution execution, String nssiId) {
649 logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
650 //todo: allottedResourceId
652 SliceTaskParamsAdapter sliceParams =
653 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
655 //sliceParams.setServiceId(nsiServiceInstanceID)
656 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(nssiId))
658 String endpointId = null
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
666 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
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"
675 for (Relationship relationship : nssiInstance.relationshipList.getRelationship()) {
676 if (relationship.relationshipLabel){
677 endpointId = relationship //todo
684 }catch(BpmnError e) {
686 }catch (Exception ex){
687 String msg = "Exception: " + ex
689 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
691 logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
695 * Update relationship between
697 * 2. Slice Profile and Service Profile
698 * 3. SliceProfile and NSSI
702 public void updateTnBHRelationship(DelegateExecution execution) {
703 SliceTaskParamsAdapter sliceParams =
704 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
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
713 updateRelationship(execution, nsiId, nssiId)
715 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
717 updateRelationship(execution,sliceProfileInstanceId, nssiId)
719 sliceParams.tnBHSliceTaskInfo.suggestNssiId = nssiId
720 execution.setVariable("sliceTaskParams", sliceParams)
724 * sourceId -> targetId
729 void updateRelationship(DelegateExecution execution, String sourceId, String targetId) {
731 Relationship relationship = new Relationship()
733 AAIResourceUri targetInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(targetId))
735 logger.info("Creating relationship, targetInstanceUri: " + targetInstanceUri)
737 relationship.setRelatedLink(targetInstanceUri.build().toString())
739 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sourceId)).relationshipAPI()
740 client.create(sourceInstanceUri, relationship)