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.ResponseDescriptor
45 import org.onap.so.beans.nsmf.ServiceInfo
46 import org.onap.so.beans.nsmf.SliceTaskInfo
47 import org.onap.so.beans.nsmf.SliceTaskParamsAdapter
48 import org.onap.so.beans.nsmf.TnSliceProfile
49 import org.onap.so.bpmn.common.scripts.ExceptionUtil
50 import org.onap.so.bpmn.core.json.JsonUtils
51 import org.slf4j.Logger
52 import org.slf4j.LoggerFactory
53 import static org.apache.commons.lang3.StringUtils.isBlank
55 class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
57 private static final Logger logger = LoggerFactory.getLogger(DoAllocateNSIandNSSI.class);
59 ExceptionUtil exceptionUtil = new ExceptionUtil()
61 JsonUtils jsonUtil = new JsonUtils()
63 AAIResourcesClient client = getAAIClient()
66 * Pre Process the BPMN Flow Request
68 * generate the nsOperationKey
69 * generate the nsParameters
72 void preProcessRequest (DelegateExecution execution) {
74 logger.trace("Enter preProcessRequest()")
75 Map<String, Object> nssiMap = new HashMap<>()
76 execution.setVariable("nssiMap", nssiMap)
77 boolean isMoreNSSTtoProcess = true
78 execution.setVariable("isMoreNSSTtoProcess", isMoreNSSTtoProcess)
79 List<String> nsstSequence = new ArrayList<>(Arrays.asList("cn"))
80 execution.setVariable("nsstSequence", nsstSequence)
81 logger.trace("Exit preProcessRequest")
88 void retriveSliceOption(DelegateExecution execution) {
89 logger.trace("Enter retriveSliceOption() of DoAllocateNSIandNSSI")
91 boolean isNSIOptionAvailable
93 SliceTaskParamsAdapter sliceParams =
94 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
96 if(isBlank(sliceParams.getSuggestNsiId())) {
97 isNSIOptionAvailable = false
100 isNSIOptionAvailable = true
101 execution.setVariable('nsiServiceInstanceId', sliceParams.getSuggestNsiId())
102 execution.setVariable('nsiServiceInstanceName', sliceParams.getSuggestNsiName())
104 execution.setVariable("isNSIOptionAvailable", isNSIOptionAvailable)
105 logger.trace("Exit retriveSliceOption() of DoAllocateNSIandNSSI")
110 * create nsi instance in aai
113 void createNSIinAAI(DelegateExecution execution) {
114 logger.debug("Enter CreateNSIinAAI in DoAllocateNSIandNSSI()")
116 String sliceInstanceId = UUID.randomUUID().toString()
117 SliceTaskParamsAdapter sliceParams =
118 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
120 //set new nsiId to sliceParams suggestNsiId
121 sliceParams.setSuggestNsiId(sliceInstanceId)
123 ServiceInstance nsi = new ServiceInstance()
126 String sliceInstanceName = "nsi_"+execution.getVariable("sliceServiceInstanceName")
127 String serviceType = execution.getVariable("serviceType")
128 String serviceStatus = "deactivated"
129 String modelInvariantUuid = sliceParams.getNSTInfo().invariantUUID
130 String modelUuid = sliceParams.getNSTInfo().UUID
132 String uuiRequest = execution.getVariable("uuiRequest")
133 String serviceInstanceLocationid = jsonUtil.getJsonValue(uuiRequest, "service.parameters.requestInputs.plmnIdList")
134 String serviceRole = "nsi"
136 execution.setVariable("sliceInstanceId", sliceInstanceId)
137 nsi.setServiceInstanceId(sliceInstanceId)
138 nsi.setServiceInstanceName(sliceInstanceName)
139 nsi.setServiceType(serviceType)
140 nsi.setOrchestrationStatus(serviceStatus)
141 nsi.setModelInvariantId(modelInvariantUuid)
142 nsi.setModelVersionId(modelUuid)
143 nsi.setServiceInstanceLocationId(serviceInstanceLocationid)
144 nsi.setServiceRole(serviceRole)
148 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceInstanceId))
149 client.create(nsiServiceUri, nsi)
151 execution.setVariable("nsiServiceUri", nsiServiceUri)
153 } catch (BpmnError e) {
155 } catch (Exception ex) {
156 msg = "Exception in DoCreateSliceServiceInstance.instantiateSliceService. " + ex.getMessage()
158 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
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)
205 if (!si.ifPresent()) {
206 String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
208 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
211 AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceParams.suggestNsiId).allottedResource(allottedResourceId))
213 client.connect(allottedResourceUri, nsiServiceUri)
215 execution.setVariable("sliceTaskParams", sliceParams)
216 }catch(BpmnError e) {
218 }catch (Exception ex){
219 String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
221 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
223 logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
227 * create RAN Slice Profile Instance
230 void createAnSliceProfileInstance(DelegateExecution execution) {
232 String globalSubscriberId = execution.getVariable("globalSubscriberId")
233 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
234 String serviceInstanceId = UUID.randomUUID().toString()
235 execution.setVariable("ranSliceProfileInstanceId", serviceInstanceId) //todo:
237 String serviceType = ""
238 String serviceRole = "slice-profile"
239 String oStatus = "deactivated"
241 SliceTaskParamsAdapter sliceParams =
242 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
243 SliceTaskInfo<AnSliceProfile> sliceTaskInfo = sliceParams.anSliceTaskInfo
244 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
246 // create slice profile
247 ServiceInstance rspi = new ServiceInstance()
248 rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
249 rspi.setServiceType(serviceType)
250 rspi.setServiceRole(serviceRole)
251 rspi.setOrchestrationStatus(oStatus)
252 rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
253 rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
254 rspi.setInputParameters(uuiRequest)
255 rspi.setWorkloadContext(useInterval)
256 rspi.setEnvironmentContext(sNSSAI_id)
258 //timestamp format YYYY-MM-DD hh:mm:ss
259 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
261 execution.setVariable("communicationServiceInstance", rspi)
263 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(serviceInstanceId))
264 client.create(uri, rspi)
266 execution.setVariable("sliceTaskParams", sliceParams)
270 * create An Slice Profile
273 void createAnSliceProfile(DelegateExecution execution) {
275 String globalSubscriberId = execution.getVariable("globalSubscriberId")
276 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
277 //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
279 SliceTaskParamsAdapter sliceParams =
280 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
281 SliceTaskInfo<AnSliceProfile> sliceTaskInfo = sliceParams.anSliceTaskInfo
282 AnSliceProfile anSliceProfile = sliceTaskInfo.sliceProfile
284 String profileId = UUID.randomUUID().toString()
285 anSliceProfile.setSliceProfileId(profileId)
287 SliceProfile sliceProfile = new SliceProfile()
288 sliceProfile.setProfileId(profileId)
289 sliceProfile.setCoverageAreaTAList(anSliceProfile.coverageAreaTAList as String)
291 AAIResourceUri uri = AAIUriFactory.createResourceUri(
292 AAIFluentTypeBuilder.business().customer(globalSubscriberId)
293 .serviceSubscription(subscriptionServiceType)
294 .serviceInstance(sliceTaskInfo.sliceInstanceId)
295 .sliceProfile(profileId)
297 client.create(uri, sliceProfile)
298 execution.setVariable("sliceTaskParams", sliceParams)
302 * prepare AllocateAnNssi
305 void prepareAllocateAnNssi(DelegateExecution execution) {
308 SliceTaskParamsAdapter sliceParams =
309 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
310 SliceTaskInfo<AnSliceProfile> sliceTaskInfo = sliceParams.anSliceTaskInfo
312 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
314 AllocateAnNssi allocateAnNssi = new AllocateAnNssi()
315 allocateAnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
316 allocateAnNssi.nssiId = sliceTaskInfo.NSSTInfo.UUID
317 allocateAnNssi.nssiName = sliceTaskInfo.NSSTInfo.name
318 allocateAnNssi.sliceProfile = sliceTaskInfo.sliceProfile
319 allocateAnNssi.nsiInfo.nsiId = sliceParams.suggestNsiId
321 EsrInfo esrInfo = new EsrInfo()
322 //todo: vendor and network
323 esrInfo.setVendor(sliceTaskInfo.getVendor())
324 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
326 String globalSubscriberId = execution.getVariable("globalSubscriberId")
327 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
330 ServiceInfo serviceInfo = new ServiceInfo()
331 serviceInfo.globalSubscriberId = globalSubscriberId
332 serviceInfo.subscriptionServiceType = subscriptionServiceType
333 serviceInfo.nsiId = sliceParams.suggestNsiId
334 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
335 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
337 nbiRequest.setServiceInfo(serviceInfo)
338 nbiRequest.setEsrInfo(esrInfo)
339 nbiRequest.setAllocateAnNssi(allocateAnNssi)
341 execution.setVariable("AnAllocateNssiNbiRequest", nbiRequest)
342 execution.setVariable("anBHSliceTaskInfo", sliceTaskInfo)
343 execution.setVariable("anSubnetType", SubnetType.AN_NF)
348 * create RAN Slice Profile Instance
351 void createCnSliceProfileInstance(DelegateExecution execution) {
353 String globalSubscriberId = execution.getVariable("globalSubscriberId")
354 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
355 String serviceInstanceId = UUID.randomUUID().toString()
356 execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
358 String serviceType = ""
359 String serviceRole = "slice-profile"
360 String oStatus = "deactivated"
362 SliceTaskParamsAdapter sliceParams =
363 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
364 SliceTaskInfo<CnSliceProfile> sliceTaskInfo = sliceParams.cnSliceTaskInfo
365 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
367 // create slice profile
368 ServiceInstance rspi = new ServiceInstance()
369 rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
370 rspi.setServiceType(serviceType)
371 rspi.setServiceRole(serviceRole)
372 rspi.setOrchestrationStatus(oStatus)
373 rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
374 rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
375 rspi.setInputParameters(uuiRequest)
376 rspi.setWorkloadContext(useInterval)
377 rspi.setEnvironmentContext(sNSSAI_id)
379 //timestamp format YYYY-MM-DD hh:mm:ss
380 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
382 execution.setVariable("communicationServiceInstance", rspi)
384 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(serviceInstanceId))
385 client.create(uri, rspi)
386 execution.setVariable("sliceTaskParams", sliceParams)
390 * create Cn Slice Profile
393 void createCnSliceProfile(DelegateExecution execution) {
395 String globalSubscriberId = execution.getVariable("globalSubscriberId")
396 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
397 //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
399 SliceTaskParamsAdapter sliceParams =
400 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
402 SliceTaskInfo<CnSliceProfile> sliceTaskInfo = sliceParams.cnSliceTaskInfo
403 CnSliceProfile cnSliceProfile = sliceTaskInfo.sliceProfile
405 String profileId = UUID.randomUUID().toString()
406 cnSliceProfile.setSliceProfileId(profileId)
408 SliceProfile sliceProfile = new SliceProfile()
409 sliceProfile.setProfileId(profileId)
410 sliceProfile.setCoverageAreaTAList(cnSliceProfile.coverageAreaTAList as String)
412 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(sliceTaskInfo.sliceInstanceId).sliceProfile(profileId))
413 client.create(uri, sliceProfile)
414 execution.setVariable("sliceTaskParams", sliceParams)
418 * prepare AllocateCnNssi
421 void prepareAllocateCnNssi(DelegateExecution execution) {
424 SliceTaskParamsAdapter sliceParams =
425 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
426 SliceTaskInfo<CnSliceProfile> sliceTaskInfo = sliceParams.cnSliceTaskInfo
428 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
430 AllocateCnNssi allocateCnNssi = new AllocateCnNssi()
431 allocateCnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
432 allocateCnNssi.nssiId = sliceTaskInfo.suggestNssiId
433 allocateCnNssi.nssiName = sliceTaskInfo.NSSTInfo.name
434 allocateCnNssi.sliceProfile = sliceTaskInfo.sliceProfile
435 allocateCnNssi.nsiInfo.nsiId = sliceParams.suggestNsiId
437 EsrInfo esrInfo = new EsrInfo()
438 //todo: vendor and network
439 esrInfo.setVendor(sliceTaskInfo.getVendor())
440 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
442 String globalSubscriberId = execution.getVariable("globalSubscriberId")
443 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
446 ServiceInfo serviceInfo = new ServiceInfo()
447 serviceInfo.globalSubscriberId = globalSubscriberId
448 serviceInfo.subscriptionServiceType = subscriptionServiceType
449 serviceInfo.nsiId = sliceParams.suggestNsiId
450 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
451 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
452 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId //if shared
454 nbiRequest.setServiceInfo(serviceInfo)
455 nbiRequest.setEsrInfo(esrInfo)
456 nbiRequest.setAllocateCnNssi(allocateCnNssi)
458 execution.setVariable("CnAllocateNssiNbiRequest", nbiRequest)
459 execution.setVariable("cnSliceTaskInfo", sliceTaskInfo)
460 execution.setVariable("cnSubnetType", SubnetType.CN)
465 * create TN Slice Profile Instance
468 void createTnBHSliceProfileInstance(DelegateExecution execution) {
469 String globalSubscriberId = execution.getVariable("globalSubscriberId")
470 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
472 String serviceType = ""
473 String serviceRole = "slice-profile"
474 String oStatus = "deactivated"
476 SliceTaskParamsAdapter sliceParams =
477 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
479 SliceTaskInfo<TnSliceProfile> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
480 String serviceInstanceId = UUID.randomUUID().toString()
482 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
483 //execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
485 // create slice profile
486 ServiceInstance rspi = new ServiceInstance()
487 rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
488 rspi.setServiceType(serviceType)
489 rspi.setServiceRole(serviceRole)
490 rspi.setOrchestrationStatus(oStatus)
491 rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
492 rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
493 rspi.setInputParameters(uuiRequest)
494 rspi.setWorkloadContext(useInterval)
495 rspi.setEnvironmentContext(sNSSAI_id)
497 //timestamp format YYYY-MM-DD hh:mm:ss
498 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
500 execution.setVariable("communicationServiceInstance", rspi)
502 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(serviceInstanceId))
503 client.create(uri, rspi)
505 execution.setVariable("sliceTaskParams", sliceParams)
509 * create Tn Slice Profile
512 void createTnBHSliceProfile(DelegateExecution execution) {
514 String globalSubscriberId = execution.getVariable("globalSubscriberId")
515 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
517 SliceTaskParamsAdapter sliceParams =
518 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
520 SliceTaskInfo<TnSliceProfile> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
522 TnSliceProfile tnSliceProfile = sliceTaskInfo.sliceProfile
523 String profileId = UUID.randomUUID().toString()
524 tnSliceProfile.setSliceProfileId(profileId)
526 SliceProfile sliceProfile = new SliceProfile()
527 sliceProfile.setProfileId(profileId)
529 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(sliceTaskInfo.sliceInstanceId).sliceProfile(profileId))
530 client.create(uri, sliceProfile)
532 execution.setVariable("sliceTaskParams", sliceParams)
536 * prepare AllocateCnNssi
539 void prepareAllocateTnBHNssi(DelegateExecution execution) {
542 SliceTaskParamsAdapter sliceParams =
543 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
544 SliceTaskInfo<TnSliceProfile> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
546 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
548 AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
549 //todo: AllocateTnNssi
550 //todo: endpointId -> set into tn
551 allocateTnNssi.setTransportSliceNetworks()
552 allocateTnNssi.setNetworkSliceInfos()
555 //allocateTnNssi.networkSliceInfos
557 EsrInfo esrInfo = new EsrInfo()
558 esrInfo.setVendor(sliceTaskInfo.getVendor())
559 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
561 String globalSubscriberId = execution.getVariable("globalSubscriberId")
562 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
564 ServiceInfo serviceInfo = new ServiceInfo()
565 serviceInfo.globalSubscriberId = globalSubscriberId
566 serviceInfo.subscriptionServiceType = subscriptionServiceType
567 serviceInfo.nsiId = sliceParams.suggestNsiId
568 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
569 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
570 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId
572 nbiRequest.setServiceInfo(serviceInfo)
573 nbiRequest.setEsrInfo(esrInfo)
574 nbiRequest.setAllocateTnNssi(allocateTnNssi)
576 execution.setVariable("TnBHAllocateNssiNbiRequest", nbiRequest)
577 execution.setVariable("tnBHSliceTaskInfo", sliceTaskInfo)
578 execution.setVariable("tnBHSubnetType", SubnetType.TN_BH)
582 * Update relationship between
584 * 2. Slice Profile and Service Profile
585 * 3. SliceProfile and NSSI
586 * 4. sliceProfile and endpoint
590 public void updateAnRelationship(DelegateExecution execution) {
592 SliceTaskParamsAdapter sliceParams =
593 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
595 ResponseDescriptor result = execution.getVariable("anNssiAllocateResult") as ResponseDescriptor
596 String nssiId = result.getNssiId()
597 String nsiId = sliceParams.getSuggestNsiId()
598 String sliceProfileInstanceId = sliceParams.anSliceTaskInfo.sliceInstanceId
599 String serviceProfileInstanceId = sliceParams.serviceId
601 //todo: aai -> nssi -> relationship -> endpointId -> set into tn
602 String endPointId = getEndpointIdFromAAI(execution, nssiId)
603 execution.setVariable("endPointIdAn", endPointId)
605 updateRelationship(execution, nsiId, nssiId)
607 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
609 updateRelationship(execution, sliceProfileInstanceId, nssiId)
611 sliceParams.anSliceTaskInfo.suggestNssiId = nssiId
612 execution.setVariable("sliceTaskParams", sliceParams)
617 * Update relationship between
619 * 2. Slice Profile and Service Profile
620 * 3. SliceProfile and NSSI
624 public void updateCnRelationship(DelegateExecution execution) {
626 SliceTaskParamsAdapter sliceParams =
627 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
629 NssiResponse result = execution.getVariable("cnNssiAllocateResult") as NssiResponse
630 String nssiId = result.getNssiId()
631 String nsiId = sliceParams.getSuggestNsiId()
632 String sliceProfileInstanceId = sliceParams.cnSliceTaskInfo.sliceInstanceId
633 String serviceProfileInstanceId = sliceParams.serviceId
635 //todo: aai -> nssi -> relationship -> endpointId -> set into tn
636 String endPointId = getEndpointIdFromAAI(execution, nssiId)
637 execution.setVariable("endPointIdCn", endPointId)
639 updateRelationship(execution, nsiId, nssiId)
641 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
643 updateRelationship(execution,sliceProfileInstanceId, nssiId)
645 sliceParams.cnSliceTaskInfo.suggestNssiId = nssiId
646 execution.setVariable("sliceTaskParams", sliceParams)
650 * get endpoint Id from AAI by nssi id
655 private String getEndpointIdFromAAI(DelegateExecution execution, String nssiId) {
656 logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
657 //todo: allottedResourceId
659 SliceTaskParamsAdapter sliceParams =
660 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
662 //sliceParams.setServiceId(nsiServiceInstanceID)
663 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(nssiId))
665 String endpointId = null
668 AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
669 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
671 if (!si.ifPresent()) {
672 String msg = "NSSI in the option doesn't exist. " + nssiId
674 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
677 if (si.ifPresent()) {
678 ServiceInstance nssiInstance = si.get()
679 //todo: handle relationship and return endpointId
680 for (Relationship relationship : nssiInstance.relationshipList.getRelationship()) {
681 if (relationship.relationshipLabel){
682 endpointId = relationship //todo
689 }catch(BpmnError e) {
691 }catch (Exception ex){
692 String msg = "NSSI suggested in the option doesn't exist. " + nssiId
694 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
696 logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
700 * Update relationship between
702 * 2. Slice Profile and Service Profile
703 * 3. SliceProfile and NSSI
707 public void updateTnBHRelationship(DelegateExecution execution) {
708 SliceTaskParamsAdapter sliceParams =
709 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
711 NssiResponse result = execution.getVariable("tnBHNssiAllocateResult") as NssiResponse
712 String nssiId = result.getNssiId()
713 String nsiId = sliceParams.getSuggestNsiId()
714 String sliceProfileInstanceId = sliceParams.tnBHSliceTaskInfo.sliceInstanceId
715 String serviceProfileInstanceId = sliceParams.serviceId
718 updateRelationship(execution, nsiId, nssiId)
720 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
722 updateRelationship(execution,sliceProfileInstanceId, nssiId)
724 sliceParams.tnBHSliceTaskInfo.suggestNssiId = nssiId
725 execution.setVariable("sliceTaskParams", sliceParams)
729 * sourceId -> targetId
734 void updateRelationship(DelegateExecution execution, String sourceId, String targetId) {
736 Relationship relationship = new Relationship()
738 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(targetId))
740 logger.info("Creating Allotted resource relationship, nsiServiceUri: " + nsiServiceUri)
742 relationship.setRelatedLink(nsiServiceUri.build().toString())
744 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sourceId).relationshipAPI())
745 client.create(uri, relationship)