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.NsiInfo
 
  24 import org.onap.so.beans.nsmf.SliceProfileAdapter
 
  25 import org.onap.so.beans.nsmf.oof.SubnetType
 
  26 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
 
  27 import javax.ws.rs.NotFoundException
 
  28 import org.camunda.bpm.engine.delegate.BpmnError
 
  29 import org.camunda.bpm.engine.delegate.DelegateExecution
 
  30 import org.onap.aai.domain.yang.Relationship
 
  31 import org.onap.aai.domain.yang.ServiceInstance
 
  32 import org.onap.aai.domain.yang.SliceProfile
 
  33 import org.onap.aaiclient.client.aai.AAIResourcesClient
 
  34 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
 
  35 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
 
  36 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
 
  37 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder
 
  38 import org.onap.so.beans.nsmf.AllocateAnNssi
 
  39 import org.onap.so.beans.nsmf.AllocateCnNssi
 
  40 import org.onap.so.beans.nsmf.AllocateTnNssi
 
  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.bpmn.common.scripts.ExceptionUtil
 
  48 import org.onap.so.bpmn.core.json.JsonUtils
 
  49 import org.slf4j.Logger
 
  50 import org.slf4j.LoggerFactory
 
  51 import static org.apache.commons.lang3.StringUtils.isBlank
 
  53 class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
 
  55     private static final Logger logger = LoggerFactory.getLogger(DoAllocateNSIandNSSI.class);
 
  57     ExceptionUtil exceptionUtil = new ExceptionUtil()
 
  59     JsonUtils jsonUtil = new JsonUtils()
 
  61     AAIResourcesClient client = getAAIClient()
 
  64      * Pre Process the BPMN Flow Request
 
  66      * generate the nsOperationKey
 
  67      * generate the nsParameters
 
  70     void preProcessRequest (DelegateExecution execution) {
 
  72         logger.trace("Enter preProcessRequest()")
 
  73         Map<String, Object> nssiMap = new HashMap<>()
 
  74         execution.setVariable("nssiMap", nssiMap)
 
  75         boolean isMoreNSSTtoProcess = true
 
  76         execution.setVariable("isMoreNSSTtoProcess", isMoreNSSTtoProcess)
 
  77         List<String> nsstSequence = new ArrayList<>(Arrays.asList("cn"))
 
  78         execution.setVariable("nsstSequence", nsstSequence)
 
  79         logger.trace("Exit preProcessRequest")
 
  86     void retriveSliceOption(DelegateExecution execution) {
 
  87         logger.trace("Enter retriveSliceOption() of DoAllocateNSIandNSSI")
 
  89         boolean isNSIOptionAvailable
 
  91         SliceTaskParamsAdapter sliceParams =
 
  92                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
  94         if(isBlank(sliceParams.getSuggestNsiId())) {
 
  95             isNSIOptionAvailable = false
 
  98             isNSIOptionAvailable = true
 
  99             execution.setVariable('nsiServiceInstanceId', sliceParams.getSuggestNsiId())
 
 100             execution.setVariable('nsiServiceInstanceName', sliceParams.getSuggestNsiName())
 
 102         execution.setVariable("isNSIOptionAvailable", isNSIOptionAvailable)
 
 103         logger.trace("Exit retriveSliceOption() of DoAllocateNSIandNSSI")
 
 108      * create nsi instance in aai
 
 111     void createNSIinAAI(DelegateExecution execution) {
 
 112         logger.debug("Enter CreateNSIinAAI in DoAllocateNSIandNSSI()")
 
 114         String sliceInstanceId = UUID.randomUUID().toString()
 
 115         SliceTaskParamsAdapter sliceParams =
 
 116                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 118         //set new nsiId to sliceParams suggestNsiId
 
 119         sliceParams.setSuggestNsiId(sliceInstanceId)
 
 121         ServiceInstance nsi = new ServiceInstance()
 
 124         String sliceInstanceName = "nsi_"+execution.getVariable("sliceServiceInstanceName")
 
 125         String serviceType = execution.getVariable("serviceType")
 
 126         String serviceStatus = "deactivated"
 
 127         String modelInvariantUuid = sliceParams.getNSTInfo().invariantUUID
 
 128         String modelUuid = sliceParams.getNSTInfo().UUID
 
 130         String uuiRequest = execution.getVariable("uuiRequest")
 
 131         String serviceInstanceLocationid = jsonUtil.getJsonValue(uuiRequest, "service.parameters.requestInputs.plmnIdList")
 
 132         String serviceRole = "nsi"
 
 134         execution.setVariable("sliceInstanceId", sliceInstanceId)
 
 135         nsi.setServiceInstanceId(sliceInstanceId)
 
 136         nsi.setServiceInstanceName(sliceInstanceName)
 
 137         nsi.setServiceType(serviceType)
 
 138         nsi.setOrchestrationStatus(serviceStatus)
 
 139         nsi.setModelInvariantId(modelInvariantUuid)
 
 140         nsi.setModelVersionId(modelUuid)
 
 141         nsi.setServiceInstanceLocationId(serviceInstanceLocationid)
 
 142         nsi.setServiceRole(serviceRole)
 
 146             AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
 
 147                     .customer(execution.getVariable("globalSubscriberId"))
 
 148                     .serviceSubscription(execution.getVariable("subscriptionServiceType"))
 
 149                     .serviceInstance(sliceInstanceId))
 
 150             client.create(nsiServiceUri, nsi)
 
 152             execution.setVariable("nsiServiceUri", nsiServiceUri)
 
 154         } catch (BpmnError e) {
 
 156         } catch (Exception ex) {
 
 157             msg = "Exception in DoAllocateNSIandNSSI.createNSIinAAI: " + ex.getMessage()
 
 159             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 161         execution.setVariable("sliceTaskParams", sliceParams)
 
 163         logger.debug("Exit CreateNSIinAAI in DoAllocateNSIandNSSI()")
 
 168      * create relationship between nsi and service profile instance
 
 171     void createRelationship(DelegateExecution execution) {
 
 173         logger.debug("Enter createRelationship in DoAllocateNSIandNSSI")
 
 174         //String allottedResourceId = execution.getVariable("allottedResourceId")
 
 175         //SliceTaskParamsAdapter sliceParams =
 
 176         //        execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 180             AAIResourceUri nsiServiceUri = execution.getVariable("nsiServiceUri") as AAIResourceUri
 
 181             logger.debug("Creating Allotted resource relationship, nsiServiceUri: " + nsiServiceUri.toString())
 
 183             //AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceParams.suggestNsiId).allottedResource(allottedResourceId))
 
 185             AAIResourceUri allottedResourceUri = execution.getVariable("allottedResourceUri") as AAIResourceUri
 
 186             logger.debug("Creating Allotted resource relationship, allottedResourceUri: " + allottedResourceUri.toString())
 
 188             client.connect(allottedResourceUri, nsiServiceUri)
 
 189         } catch (BpmnError e) {
 
 191         } catch (Exception ex) {
 
 192             msg = "Exception in DoAllocateNSIandNSSI.createRelationship. " + ex.getMessage()
 
 194             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 196         logger.debug("Exit createRelationship in DoAllocateNSIandNSSI")
 
 203     void updateRelationship(DelegateExecution execution) {
 
 204         logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
 
 205         //todo: allottedResourceId
 
 206         String allottedResourceId = execution.getVariable("allottedResourceId")
 
 207         //Need to check whether nsi exist : Begin
 
 209         SliceTaskParamsAdapter sliceParams =
 
 210                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 212         String nsiServiceInstanceID = sliceParams.getSuggestNsiId()
 
 213         //sliceParams.setServiceId(nsiServiceInstanceID)
 
 215         AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
 
 216                 .customer(execution.getVariable("globalSubscriberId"))
 
 217                 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
 
 218                 .serviceInstance(nsiServiceInstanceID))
 
 221             AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
 
 222             Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
 
 223             if (!si.isPresent()) {
 
 224                 String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
 
 226                 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 229             //AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceParams.suggestNsiId).allottedResource(allottedResourceId))
 
 230             AAIResourceUri allottedResourceUri = execution.getVariable("allottedResourceUri") as AAIResourceUri
 
 231             logger.debug("updateRelationship Allotted resource relationship, allottedResourceUri: " + allottedResourceUri.toString())
 
 232             client.connect(allottedResourceUri, nsiServiceUri)
 
 234             execution.setVariable("sliceTaskParams", sliceParams)
 
 235         }catch(BpmnError e) {
 
 237         }catch (Exception ex){
 
 238             String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
 
 240             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 242         logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
 
 246      * create RAN Slice Profile Instance
 
 249     void createAnSliceProfileInstance(DelegateExecution execution) {
 
 251         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 252         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 253         String serviceInstanceId = UUID.randomUUID().toString()
 
 254         execution.setVariable("ranSliceProfileInstanceId", serviceInstanceId) //todo:
 
 256         String oStatus = "deactivated"
 
 258         SliceTaskParamsAdapter sliceParams =
 
 259                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 260         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
 
 261         sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
 
 263         // create slice profile
 
 264         ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, oStatus)
 
 266         //timestamp format YYYY-MM-DD hh:mm:ss
 
 267         rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
 
 269         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
 
 270                 .customer(globalSubscriberId)
 
 271                 .serviceSubscription(subscriptionServiceType)
 
 272                 .serviceInstance(serviceInstanceId))
 
 273         client.create(uri, rspi)
 
 275         execution.setVariable("sliceTaskParams", sliceParams)
 
 279      * create An Slice Profile
 
 282     void createAnSliceProfile(DelegateExecution execution) {
 
 284         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 285         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 286         //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
 
 288         SliceTaskParamsAdapter sliceParams =
 
 289                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 290         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
 
 291         SliceProfileAdapter anSliceProfile = sliceTaskInfo.sliceProfile
 
 293         String profileId = UUID.randomUUID().toString()
 
 294         anSliceProfile.setSliceProfileId(profileId)
 
 296         SliceProfile sliceProfile = new SliceProfile()
 
 297         sliceProfile.setProfileId(profileId)
 
 298         sliceProfile.setCoverageAreaTAList(anSliceProfile.coverageAreaTAList)
 
 300         AAIResourceUri uri = AAIUriFactory.createResourceUri(
 
 301             AAIFluentTypeBuilder.business().customer(globalSubscriberId)
 
 302             .serviceSubscription(subscriptionServiceType)
 
 303             .serviceInstance(sliceTaskInfo.sliceInstanceId)
 
 304             .sliceProfile(profileId)
 
 306         client.create(uri, sliceProfile)
 
 307         execution.setVariable("sliceTaskParams", sliceParams)
 
 311      * prepare AllocateAnNssi
 
 314     void prepareAllocateAnNssi(DelegateExecution execution) {
 
 317         SliceTaskParamsAdapter sliceParams =
 
 318                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 319         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
 
 321         NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
 
 323         AllocateAnNssi allocateAnNssi = new AllocateAnNssi()
 
 324         allocateAnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2AnProfile()
 
 325         allocateAnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
 
 326         allocateAnNssi.nssiId = sliceTaskInfo.suggestNssiId
 
 327         allocateAnNssi.nssiName = sliceTaskInfo.NSSTInfo.name
 
 328         NsiInfo nsiInfo = new NsiInfo()
 
 329         nsiInfo.nsiId = sliceParams.suggestNsiId
 
 330         allocateAnNssi.nsiInfo = nsiInfo
 
 332         EsrInfo esrInfo = new EsrInfo()
 
 333         //todo: vendor and network
 
 334         esrInfo.setVendor(sliceTaskInfo.getVendor())
 
 335         esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
 
 337         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 338         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 341         ServiceInfo serviceInfo = new ServiceInfo()
 
 342         serviceInfo.globalSubscriberId = globalSubscriberId
 
 343         serviceInfo.subscriptionServiceType = subscriptionServiceType
 
 344         serviceInfo.nsiId = sliceParams.suggestNsiId
 
 345         serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
 
 346         serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
 
 348         nbiRequest.setServiceInfo(serviceInfo)
 
 349         nbiRequest.setEsrInfo(esrInfo)
 
 350         nbiRequest.setAllocateAnNssi(allocateAnNssi)
 
 352         execution.setVariable("AnAllocateNssiNbiRequest", nbiRequest)
 
 353         execution.setVariable("anSliceTaskInfo", sliceTaskInfo)
 
 354         execution.setVariable("anSubnetType", SubnetType.AN)
 
 359      * create RAN Slice Profile Instance
 
 362     void createCnSliceProfileInstance(DelegateExecution execution) {
 
 364         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 365         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 366         String serviceInstanceId = UUID.randomUUID().toString()
 
 367         execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
 
 369         String oStatus = "deactivated"
 
 371         SliceTaskParamsAdapter sliceParams =
 
 372                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 373         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
 
 374         sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
 
 376         // create slice profile
 
 377         ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, oStatus)
 
 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()
 
 385                 .customer(globalSubscriberId)
 
 386                 .serviceSubscription(subscriptionServiceType)
 
 387                 .serviceInstance(serviceInstanceId))
 
 388         client.create(uri, rspi)
 
 389         execution.setVariable("sliceTaskParams", sliceParams)
 
 393      * create Cn Slice Profile
 
 396     void createCnSliceProfile(DelegateExecution execution) {
 
 398         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 399         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 400         //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
 
 402         SliceTaskParamsAdapter sliceParams =
 
 403                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 405         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
 
 406         SliceProfileAdapter cnSliceProfile = sliceTaskInfo.sliceProfile
 
 408         String profileId = UUID.randomUUID().toString()
 
 409         cnSliceProfile.setSliceProfileId(profileId)
 
 411         SliceProfile sliceProfile = new SliceProfile()
 
 412         sliceProfile.setProfileId(profileId)
 
 413         sliceProfile.setCoverageAreaTAList(cnSliceProfile.coverageAreaTAList as String)
 
 415         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
 
 416                 .customer(globalSubscriberId)
 
 417                 .serviceSubscription(subscriptionServiceType)
 
 418                 .serviceInstance(sliceTaskInfo.sliceInstanceId)
 
 419                 .sliceProfile(profileId))
 
 420         client.create(uri, sliceProfile)
 
 421         execution.setVariable("sliceTaskParams", sliceParams)
 
 425      * prepare AllocateCnNssi
 
 428     void prepareAllocateCnNssi(DelegateExecution execution) {
 
 431         SliceTaskParamsAdapter sliceParams =
 
 432                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 433         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
 
 435         NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
 
 437         AllocateCnNssi allocateCnNssi = new AllocateCnNssi()
 
 438         allocateCnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
 
 439         allocateCnNssi.nssiId = sliceTaskInfo.suggestNssiId
 
 440         allocateCnNssi.nssiName = sliceTaskInfo.NSSTInfo.name
 
 441         allocateCnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2CnProfile()
 
 442         NsiInfo nsiInfo = new NsiInfo()
 
 443         nsiInfo.nsiId = sliceParams.suggestNsiId
 
 444         allocateCnNssi.nsiInfo = nsiInfo
 
 446         EsrInfo esrInfo = new EsrInfo()
 
 447         //todo: vendor and network
 
 448         esrInfo.setVendor(sliceTaskInfo.getVendor())
 
 449         esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
 
 451         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 452         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 455         ServiceInfo serviceInfo = new ServiceInfo()
 
 456         serviceInfo.globalSubscriberId = globalSubscriberId
 
 457         serviceInfo.subscriptionServiceType = subscriptionServiceType
 
 458         serviceInfo.nsiId = sliceParams.suggestNsiId
 
 459         serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
 
 460         serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
 
 461         serviceInfo.nssiId = sliceTaskInfo.suggestNssiId //if shared
 
 463         nbiRequest.setServiceInfo(serviceInfo)
 
 464         nbiRequest.setEsrInfo(esrInfo)
 
 465         nbiRequest.setAllocateCnNssi(allocateCnNssi)
 
 467         execution.setVariable("CnAllocateNssiNbiRequest", nbiRequest)
 
 468         execution.setVariable("cnSliceTaskInfo", sliceTaskInfo)
 
 469         execution.setVariable("cnSubnetType", SubnetType.CN)
 
 474      * create TN Slice Profile Instance
 
 477     void createTnBHSliceProfileInstance(DelegateExecution execution) {
 
 478         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 479         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 481         String oStatus = "deactivated"
 
 483         SliceTaskParamsAdapter sliceParams =
 
 484                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 486         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
 
 487         String serviceInstanceId = UUID.randomUUID().toString()
 
 489         sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
 
 490         //execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
 
 492         // create slice profile
 
 493         ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, oStatus)
 
 495         //timestamp format YYYY-MM-DD hh:mm:ss
 
 496         rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
 
 498         execution.setVariable("communicationServiceInstance", rspi)
 
 500         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
 
 501                 .customer(globalSubscriberId)
 
 502                 .serviceSubscription(subscriptionServiceType)
 
 503                 .serviceInstance(serviceInstanceId))
 
 504         client.create(uri, rspi)
 
 506         execution.setVariable("sliceTaskParams", sliceParams)
 
 510      * create Tn Slice Profile
 
 513     void createTnBHSliceProfile(DelegateExecution execution) {
 
 515         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 516         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 518         SliceTaskParamsAdapter sliceParams =
 
 519                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 521         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
 
 523         SliceProfileAdapter tnSliceProfile = sliceTaskInfo.sliceProfile
 
 524         String profileId = UUID.randomUUID().toString()
 
 525         tnSliceProfile.setSliceProfileId(profileId)
 
 527         SliceProfile sliceProfile = new SliceProfile()
 
 528         sliceProfile.setProfileId(profileId)
 
 530         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
 
 531                 .customer(globalSubscriberId)
 
 532                 .serviceSubscription(subscriptionServiceType)
 
 533                 .serviceInstance(sliceTaskInfo.sliceInstanceId)
 
 534                 .sliceProfile(profileId))
 
 535         client.create(uri, sliceProfile)
 
 537         execution.setVariable("sliceTaskParams", sliceParams)
 
 541      * prepare AllocateCnNssi
 
 544     void prepareAllocateTnBHNssi(DelegateExecution execution) {
 
 547         SliceTaskParamsAdapter sliceParams =
 
 548                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 549         SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
 
 551         NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
 
 553         AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
 
 554         //todo: AllocateTnNssi
 
 555         //todo: endpointId -> set into tn
 
 556         allocateTnNssi.setTransportSliceNetworks()
 
 557         allocateTnNssi.setNetworkSliceInfos()
 
 558         allocateTnNssi.setSliceProfile(sliceTaskInfo.sliceProfile.trans2TnProfile())
 
 559         NsiInfo nsiInfo = new NsiInfo()
 
 560         nsiInfo.setNsiId(sliceParams.suggestNsiId)
 
 561         nsiInfo.setNsiName(sliceParams.suggestNsiName)
 
 562         allocateTnNssi.setNsiInfo(nsiInfo)
 
 564         //allocateTnNssi.networkSliceInfos
 
 566         EsrInfo esrInfo = new EsrInfo()
 
 567         esrInfo.setVendor(sliceTaskInfo.getVendor())
 
 568         esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
 
 570         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 571         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 573         ServiceInfo serviceInfo = new ServiceInfo()
 
 574         serviceInfo.globalSubscriberId = globalSubscriberId
 
 575         serviceInfo.subscriptionServiceType = subscriptionServiceType
 
 576         serviceInfo.nsiId = sliceParams.suggestNsiId
 
 577         serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
 
 578         serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
 
 579         serviceInfo.nssiId = sliceTaskInfo.suggestNssiId
 
 581         nbiRequest.setServiceInfo(serviceInfo)
 
 582         nbiRequest.setEsrInfo(esrInfo)
 
 583         nbiRequest.setAllocateTnNssi(allocateTnNssi)
 
 585         execution.setVariable("TnBHAllocateNssiNbiRequest", nbiRequest)
 
 586         execution.setVariable("tnBHSliceTaskInfo", sliceTaskInfo)
 
 587         execution.setVariable("tnBHSubnetType", SubnetType.TN_BH)
 
 591      * Update relationship between
 
 593      * 2. Slice Profile and Service Profile
 
 594      * 3. SliceProfile and NSSI
 
 595      * 4. sliceProfile and endpoint
 
 599     public void updateAnRelationship(DelegateExecution execution) {
 
 601         SliceTaskParamsAdapter sliceParams =
 
 602                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 604         NssiResponse result = execution.getVariable("anNssiAllocateResult") as NssiResponse
 
 605         String nssiId = result.getNssiId()
 
 606         String nsiId = sliceParams.getSuggestNsiId()
 
 607         String sliceProfileInstanceId = sliceParams.anSliceTaskInfo.sliceInstanceId
 
 608         String serviceProfileInstanceId = sliceParams.serviceId
 
 610         //todo: aai -> nssi -> relationship -> endpointId -> set into tn
 
 611         String endPointId = getEndpointIdFromAAI(execution, nssiId)
 
 612         execution.setVariable("endPointIdAn", endPointId)
 
 614         updateRelationship(execution, nsiId, nssiId)
 
 616         updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
 
 618         updateRelationship(execution, sliceProfileInstanceId, nssiId)
 
 620         sliceParams.anSliceTaskInfo.suggestNssiId = nssiId
 
 621         execution.setVariable("sliceTaskParams", sliceParams)
 
 626      * Update relationship between
 
 628      * 2. Slice Profile and Service Profile
 
 629      * 3. SliceProfile and NSSI
 
 633     public void updateCnRelationship(DelegateExecution execution) {
 
 635         SliceTaskParamsAdapter sliceParams =
 
 636                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 638         NssiResponse result = execution.getVariable("cnNssiAllocateResult") as NssiResponse
 
 639         String nssiId = result.getNssiId()
 
 640         String nsiId = sliceParams.getSuggestNsiId()
 
 641         String sliceProfileInstanceId = sliceParams.cnSliceTaskInfo.sliceInstanceId
 
 642         String serviceProfileInstanceId = sliceParams.serviceId
 
 644         //todo: aai -> nssi -> relationship -> endpointId -> set into tn
 
 645         String endPointId = getEndpointIdFromAAI(execution, nssiId)
 
 646         execution.setVariable("endPointIdCn", endPointId)
 
 648         updateRelationship(execution, nsiId, nssiId)
 
 650         updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
 
 652         updateRelationship(execution,sliceProfileInstanceId, nssiId)
 
 654         sliceParams.cnSliceTaskInfo.suggestNssiId = nssiId
 
 655         execution.setVariable("sliceTaskParams", sliceParams)
 
 659      * get endpoint Id from AAI by nssi id
 
 664     private String getEndpointIdFromAAI(DelegateExecution execution, String nssiId) {
 
 665         logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
 
 666         //todo: allottedResourceId
 
 668         SliceTaskParamsAdapter sliceParams =
 
 669                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 671         //sliceParams.setServiceId(nsiServiceInstanceID)
 
 672         AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
 
 673                 .customer(execution.getVariable("globalSubscriberId"))
 
 674                 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
 
 675                 .serviceInstance(nssiId))
 
 677         String endpointId = null
 
 680             AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
 
 681             Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
 
 682             if (!si.isPresent()) {
 
 683                 String msg = "NSSI in the option doesn't exist. " + nssiId
 
 685                 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 687                 ServiceInstance nssiInstance = si.get()
 
 688                 //todo: handle relationship and return endpointId
 
 689                 if (nssiInstance.relationshipList == null) {
 
 690                     String msg = "relationshipList of " + nssiId + " is null"
 
 694                 for (Relationship relationship : nssiInstance.relationshipList.getRelationship()) {
 
 695                     if (relationship.relationshipLabel){
 
 696                         endpointId = relationship //todo
 
 703         }catch(BpmnError e) {
 
 705         }catch (Exception ex){
 
 706             String msg = "Exception: " + ex
 
 708             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 710         logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
 
 714      * Update relationship between
 
 716      * 2. Slice Profile and Service Profile
 
 717      * 3. SliceProfile and NSSI
 
 721     public void updateTnBHRelationship(DelegateExecution execution) {
 
 722         SliceTaskParamsAdapter sliceParams =
 
 723                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 725         NssiResponse result = execution.getVariable("tnBHNssiAllocateResult") as NssiResponse
 
 726         String nssiId = result.getNssiId()
 
 727         String nsiId = sliceParams.getSuggestNsiId()
 
 728         String sliceProfileInstanceId = sliceParams.tnBHSliceTaskInfo.sliceInstanceId
 
 729         String serviceProfileInstanceId = sliceParams.serviceId
 
 732         updateRelationship(execution, nsiId, nssiId)
 
 734         updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
 
 736         updateRelationship(execution,sliceProfileInstanceId, nssiId)
 
 738         sliceParams.tnBHSliceTaskInfo.suggestNssiId = nssiId
 
 739         execution.setVariable("sliceTaskParams", sliceParams)
 
 743      * sourceId -> targetId
 
 748     void updateRelationship(DelegateExecution execution, String sourceId, String targetId) {
 
 750         Relationship relationship = new Relationship()
 
 752         AAIResourceUri targetInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
 
 753                 .customer(execution.getVariable("globalSubscriberId"))
 
 754                 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
 
 755                 .serviceInstance(targetId))
 
 757         logger.info("Creating relationship, targetInstanceUri: " + targetInstanceUri)
 
 759         relationship.setRelatedLink(targetInstanceUri.build().toString())
 
 761         AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
 
 762                 .customer(execution.getVariable("globalSubscriberId"))
 
 763                 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
 
 764                 .serviceInstance(sourceId))
 
 766         client.create(sourceInstanceUri, relationship)
 
 769     static def createSliceProfileInstance(SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo, String oStatus) {
 
 770         // create slice profile
 
 771         ServiceInstance rspi = new ServiceInstance()
 
 772         rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
 
 773         rspi.setServiceType(sliceTaskInfo.sliceProfile.getSST())
 
 774         rspi.setServiceRole("slice-profile")
 
 775         rspi.setOrchestrationStatus(oStatus)
 
 776         rspi.setServiceInstanceLocationId(sliceTaskInfo.sliceProfile.getPLMNIdList())
 
 777         rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
 
 778         rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
 
 779         rspi.setWorkloadContext(sliceTaskInfo.subnetType.subnetType)
 
 780         rspi.setEnvironmentContext(sliceTaskInfo.sliceProfile.getSNSSAIList())
 
 782         //timestamp format YYYY-MM-DD hh:mm:ss
 
 783         rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))