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.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
 
  52 import javax.ws.rs.NotFoundException
 
  54 import static org.apache.commons.lang3.StringUtils.isBlank
 
  56 class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
 
  58     private static final Logger logger = LoggerFactory.getLogger(DoAllocateNSIandNSSI.class);
 
  60     ExceptionUtil exceptionUtil = new ExceptionUtil()
 
  62     JsonUtils jsonUtil = new JsonUtils()
 
  64     AAIResourcesClient client = getAAIClient()
 
  67      * Pre Process the BPMN Flow Request
 
  69      * generate the nsOperationKey
 
  70      * generate the nsParameters
 
  73     void preProcessRequest (DelegateExecution execution) {
 
  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")
 
  89     void retriveSliceOption(DelegateExecution execution) {
 
  90         logger.trace("Enter retriveSliceOption() of DoAllocateNSIandNSSI")
 
  92         boolean isNSIOptionAvailable
 
  94         SliceTaskParamsAdapter sliceParams =
 
  95                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
  97         if(isBlank(sliceParams.getSuggestNsiId())) {
 
  98             isNSIOptionAvailable = false
 
 101             isNSIOptionAvailable = true
 
 102             execution.setVariable('nsiServiceInstanceId', sliceParams.getSuggestNsiId())
 
 103             execution.setVariable('nsiServiceInstanceName', sliceParams.getSuggestNsiName())
 
 105         execution.setVariable("isNSIOptionAvailable", isNSIOptionAvailable)
 
 106         logger.trace("Exit retriveSliceOption() of DoAllocateNSIandNSSI")
 
 111      * create nsi instance in aai
 
 114     void createNSIinAAI(DelegateExecution execution) {
 
 115         logger.debug("Enter CreateNSIinAAI in DoAllocateNSIandNSSI()")
 
 117         String sliceInstanceId = UUID.randomUUID().toString()
 
 118         SliceTaskParamsAdapter sliceParams =
 
 119                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 121         //set new nsiId to sliceParams suggestNsiId
 
 122         sliceParams.setSuggestNsiId(sliceInstanceId)
 
 124         ServiceInstance nsi = new ServiceInstance()
 
 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
 
 133         String uuiRequest = execution.getVariable("uuiRequest")
 
 134         String serviceInstanceLocationid = jsonUtil.getJsonValue(uuiRequest, "service.parameters.requestInputs.plmnIdList")
 
 135         String serviceRole = "nsi"
 
 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)
 
 149             AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
 
 150                     execution.getVariable("globalSubscriberId"),
 
 151                     execution.getVariable("subscriptionServiceType"),
 
 153             client.create(nsiServiceUri, nsi)
 
 155             execution.setVariable("nsiServiceUri", nsiServiceUri)
 
 157         } catch (BpmnError e) {
 
 159         } catch (Exception ex) {
 
 160             msg = "Exception in DoCreateSliceServiceInstance.instantiateSliceService. " + ex.getMessage()
 
 162             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 165         logger.debug("Exit CreateNSIinAAI in DoAllocateNSIandNSSI()")
 
 170      * create relationship between nsi and service profile instance
 
 173     void createRelationship(DelegateExecution execution) {
 
 175         String allottedResourceId = execution.getVariable("allottedResourceId")
 
 176         SliceTaskParamsAdapter sliceParams =
 
 177                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 179         AAIResourceUri nsiServiceUri = execution.getVariable("nsiServiceUri") as AAIResourceUri
 
 180         logger.info("Creating Allotted resource relationship, nsiServiceUri: " + nsiServiceUri)
 
 182         AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(
 
 183                 AAIObjectType.ALLOTTED_RESOURCE,
 
 184                 execution.getVariable("globalSubscriberId"),
 
 185                 execution.getVariable("subscriptionServiceType"),
 
 186                 sliceParams.suggestNsiId,
 
 189         client.connect(allottedResourceUri, nsiServiceUri)
 
 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
 
 202         SliceTaskParamsAdapter sliceParams =
 
 203                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 205         String nsiServiceInstanceID = sliceParams.getSuggestNsiId()
 
 206         //sliceParams.setServiceId(nsiServiceInstanceID)
 
 208         AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
 
 209                 execution.getVariable("globalSubscriberId"),
 
 210                 execution.getVariable("subscriptionServiceType"),
 
 211                 nsiServiceInstanceID)
 
 214             AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
 
 215             Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
 
 217             if (!si.ifPresent()) {
 
 218                 String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
 
 220                 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 223             AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(
 
 224                     AAIObjectType.ALLOTTED_RESOURCE,
 
 225                     execution.getVariable("globalSubscriberId"),
 
 226                     execution.getVariable("subscriptionServiceType"),
 
 227                     sliceParams.suggestNsiId, //nsiId
 
 230             client.connect(allottedResourceUri, nsiServiceUri)
 
 232             execution.setVariable("sliceTaskParams", sliceParams)
 
 233         }catch(BpmnError e) {
 
 235         }catch (Exception ex){
 
 236             String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
 
 238             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 240         logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
 
 244      * create RAN Slice Profile Instance
 
 247     void createAnSliceProfileInstance(DelegateExecution execution) {
 
 249         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 250         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 251         String serviceInstanceId = UUID.randomUUID().toString()
 
 252         execution.setVariable("ranSliceProfileInstanceId", serviceInstanceId) //todo:
 
 254         String serviceType = ""
 
 255         String serviceRole = "slice-profile"
 
 256         String oStatus = "deactivated"
 
 258         SliceTaskParamsAdapter sliceParams =
 
 259                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 260         SliceTaskInfo<AnSliceProfile> sliceTaskInfo = sliceParams.anSliceTaskInfo
 
 261         sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
 
 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)
 
 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()))
 
 278         execution.setVariable("communicationServiceInstance", rspi)
 
 280         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
 
 282                 subscriptionServiceType,
 
 284         client.create(uri, rspi)
 
 286         execution.setVariable("sliceTaskParams", sliceParams)
 
 290      * create An Slice Profile
 
 293     void createAnSliceProfile(DelegateExecution execution) {
 
 295         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 296         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 297         //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
 
 299         SliceTaskParamsAdapter sliceParams =
 
 300                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 301         SliceTaskInfo<AnSliceProfile> sliceTaskInfo = sliceParams.anSliceTaskInfo
 
 302         AnSliceProfile anSliceProfile = sliceTaskInfo.sliceProfile
 
 304         String profileId = UUID.randomUUID().toString()
 
 305         anSliceProfile.setSliceProfileId(profileId)
 
 307         SliceProfile sliceProfile = new SliceProfile()
 
 308         sliceProfile.setProfileId(profileId)
 
 309         sliceProfile.setCoverageAreaTAList(anSliceProfile.coverageAreaTAList as String)
 
 311         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SLICE_PROFILE,
 
 313                 subscriptionServiceType,
 
 314                 sliceTaskInfo.sliceInstanceId,
 
 317         client.create(uri, sliceProfile)
 
 318         execution.setVariable("sliceTaskParams", sliceParams)
 
 322      * prepare AllocateAnNssi
 
 325     void prepareAllocateAnNssi(DelegateExecution execution) {
 
 328         SliceTaskParamsAdapter sliceParams =
 
 329                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 330         SliceTaskInfo<AnSliceProfile> sliceTaskInfo = sliceParams.anSliceTaskInfo
 
 332         NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
 
 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
 
 341         EsrInfo esrInfo = new EsrInfo()
 
 342         //todo: vendor and network
 
 343         esrInfo.setVendor(sliceTaskInfo.getVendor())
 
 344         esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
 
 346         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 347         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 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
 
 357         nbiRequest.setServiceInfo(serviceInfo)
 
 358         nbiRequest.setEsrInfo(esrInfo)
 
 359         nbiRequest.setAllocateAnNssi(allocateAnNssi)
 
 361         execution.setVariable("AnAllocateNssiNbiRequest", nbiRequest)
 
 362         execution.setVariable("anBHSliceTaskInfo", sliceTaskInfo)
 
 367      * create RAN Slice Profile Instance
 
 370     void createCnSliceProfileInstance(DelegateExecution execution) {
 
 372         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 373         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 374         String serviceInstanceId = UUID.randomUUID().toString()
 
 375         execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
 
 377         String serviceType = ""
 
 378         String serviceRole = "slice-profile"
 
 379         String oStatus = "deactivated"
 
 381         SliceTaskParamsAdapter sliceParams =
 
 382                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 383         SliceTaskInfo<CnSliceProfile> sliceTaskInfo = sliceParams.cnSliceTaskInfo
 
 384         sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
 
 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)
 
 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()))
 
 401         execution.setVariable("communicationServiceInstance", rspi)
 
 403         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
 
 405                 subscriptionServiceType,
 
 407         client.create(uri, rspi)
 
 408         execution.setVariable("sliceTaskParams", sliceParams)
 
 412      * create An Slice Profile
 
 415     void createCnSliceProfile(DelegateExecution execution) {
 
 417         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 418         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 419         //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
 
 421         SliceTaskParamsAdapter sliceParams =
 
 422                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 424         SliceTaskInfo<CnSliceProfile> sliceTaskInfo = sliceParams.cnSliceTaskInfo
 
 425         CnSliceProfile cnSliceProfile = sliceTaskInfo.sliceProfile
 
 427         String profileId = UUID.randomUUID().toString()
 
 428         cnSliceProfile.setSliceProfileId(profileId)
 
 430         SliceProfile sliceProfile = new SliceProfile()
 
 431         sliceProfile.setProfileId(profileId)
 
 432         sliceProfile.setCoverageAreaTAList(cnSliceProfile.coverageAreaTAList as String)
 
 434         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SLICE_PROFILE,
 
 436                 subscriptionServiceType,
 
 437                 sliceTaskInfo.sliceInstanceId,
 
 440         client.create(uri, sliceProfile)
 
 441         execution.setVariable("sliceTaskParams", sliceParams)
 
 445      * prepare AllocateCnNssi
 
 448     void prepareAllocateCnNssi(DelegateExecution execution) {
 
 451         SliceTaskParamsAdapter sliceParams =
 
 452                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 453         SliceTaskInfo<CnSliceProfile> sliceTaskInfo = sliceParams.cnSliceTaskInfo
 
 455         NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
 
 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
 
 464         EsrInfo esrInfo = new EsrInfo()
 
 465         //todo: vendor and network
 
 466         esrInfo.setVendor(sliceTaskInfo.getVendor())
 
 467         esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
 
 469         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 470         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 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
 
 480         nbiRequest.setServiceInfo(serviceInfo)
 
 481         nbiRequest.setEsrInfo(esrInfo)
 
 482         nbiRequest.setAllocateCnNssi(allocateCnNssi)
 
 484         execution.setVariable("CnAllocateNssiNbiRequest", nbiRequest)
 
 485         execution.setVariable("cnSliceTaskInfo", sliceTaskInfo)
 
 490      * create TN Slice Profile Instance
 
 493     void createTnBHSliceProfileInstance(DelegateExecution execution) {
 
 494         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 495         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 497         String serviceType = ""
 
 498         String serviceRole = "slice-profile"
 
 499         String oStatus = "deactivated"
 
 501         SliceTaskParamsAdapter sliceParams =
 
 502                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 504         SliceTaskInfo<TnSliceProfile> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
 
 505         String serviceInstanceId = UUID.randomUUID().toString()
 
 507         sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
 
 508         //execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
 
 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)
 
 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()))
 
 525         execution.setVariable("communicationServiceInstance", rspi)
 
 527         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
 
 529                 subscriptionServiceType,
 
 531         client.create(uri, rspi)
 
 533         execution.setVariable("sliceTaskParams", sliceParams)
 
 537      * create An Slice Profile
 
 540     void createTnBHSliceProfile(DelegateExecution execution) {
 
 542         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 543         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 545         SliceTaskParamsAdapter sliceParams =
 
 546                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 548         SliceTaskInfo<TnSliceProfile> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
 
 550         TnSliceProfile tnSliceProfile = sliceTaskInfo.sliceProfile
 
 551         String profileId = UUID.randomUUID().toString()
 
 552         tnSliceProfile.setSliceProfileId(profileId)
 
 554         SliceProfile sliceProfile = new SliceProfile()
 
 555         sliceProfile.setProfileId(profileId)
 
 557         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SLICE_PROFILE,
 
 559                 subscriptionServiceType,
 
 560                 sliceTaskInfo.sliceInstanceId,
 
 563         client.create(uri, sliceProfile)
 
 565         execution.setVariable("sliceTaskParams", sliceParams)
 
 569      * prepare AllocateCnNssi
 
 572     void prepareAllocateTnBHNssi(DelegateExecution execution) {
 
 575         SliceTaskParamsAdapter sliceParams =
 
 576                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 577         SliceTaskInfo<TnSliceProfile> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
 
 579         NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
 
 581         AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
 
 582         //todo: AllocateTnNssi
 
 583         allocateTnNssi.setTransportSliceNetworks()
 
 584         allocateTnNssi.setNetworkSliceInfos()
 
 587         //allocateTnNssi.networkSliceInfos
 
 589         EsrInfo esrInfo = new EsrInfo()
 
 590         esrInfo.setVendor(sliceTaskInfo.getVendor())
 
 591         esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
 
 593         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 594         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 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
 
 603         nbiRequest.setServiceInfo(serviceInfo)
 
 604         nbiRequest.setEsrInfo(esrInfo)
 
 605         nbiRequest.setAllocateTnNssi(allocateTnNssi)
 
 607         execution.setVariable("TnBHAllocateNssiNbiRequest", nbiRequest)
 
 608         execution.setVariable("tnBHSliceTaskInfo", sliceTaskInfo)
 
 612      * Update relationship between
 
 614      * 2. Slice Profile and Service Profile
 
 615      * 3. SliceProfile and NSSI
 
 616      * 4. sliceProfile and endpoint
 
 620     public void updateAnRelationship(DelegateExecution execution) {
 
 622         SliceTaskParamsAdapter sliceParams =
 
 623                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 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
 
 633         updateRelationship(execution, nsiId, nssiId)
 
 635         updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
 
 637         updateRelationship(execution, sliceProfileInstanceId, nssiId)
 
 639         updateRelationship(execution, sliceProfileInstanceId, endPointId)
 
 645      * Update relationship between
 
 647      * 2. Slice Profile and Service Profile
 
 648      * 3. SliceProfile and NSSI
 
 652     public void updateCnRelationship(DelegateExecution execution) {
 
 654         SliceTaskParamsAdapter sliceParams =
 
 655                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 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
 
 664         updateRelationship(execution, nsiId, nssiId)
 
 666         updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
 
 668         updateRelationship(execution,sliceProfileInstanceId, nssiId)
 
 674      * Update relationship between
 
 676      * 2. Slice Profile and Service Profile
 
 677      * 3. SliceProfile and NSSI
 
 681     public void updateTnBHRelationship(DelegateExecution execution) {
 
 682         SliceTaskParamsAdapter sliceParams =
 
 683                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 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
 
 692         updateRelationship(execution, nsiId, nssiId)
 
 694         updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
 
 696         updateRelationship(execution,sliceProfileInstanceId, nssiId)
 
 700      * sourceId -> targetId
 
 705     void updateRelationship(DelegateExecution execution, String sourceId, String targetId) {
 
 707         Relationship relationship = new Relationship()
 
 709         AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
 
 710                 execution.getVariable("globalSubscriberId"),
 
 711                 execution.getVariable("subscriptionServiceType"),
 
 714         logger.info("Creating Allotted resource relationship, nsiServiceUri: " + nsiServiceUri)
 
 716         relationship.setRelatedLink(nsiServiceUri.build().toString())
 
 718         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
 
 719                 execution.getVariable("globalSubscriberId"),
 
 720                 execution.getVariable("subscriptionServiceType"),
 
 721                 sourceId).relationshipAPI()
 
 722         client.create(uri, relationship)