2  * ============LICENSE_START=======================================================
 
   4  * ================================================================================
 
   5  # Copyright (c) 2020, CMCC Technologies Co., Ltd.
 
   7  # Licensed under the Apache License, Version 2.0 (the "License")
 
   8  # you may not use this file except in compliance with the License.
 
   9  # You may obtain a copy of the License at
 
  11  #       http://www.apache.org/licenses/LICENSE-2.0
 
  13  # Unless required by applicable law or agreed to in writing, software
 
  14  # distributed under the License is distributed on an "AS IS" BASIS,
 
  15  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  16  # See the License for the specific language governing permissions and
 
  17  # limitations under the License.
 
  18  * ============LICENSE_END=========================================================
 
  21 package org.onap.so.bpmn.infrastructure.scripts
 
  23 import org.onap.so.beans.nsmf.oof.SubnetType
 
  24 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
 
  25 import javax.ws.rs.NotFoundException
 
  26 import org.camunda.bpm.engine.delegate.BpmnError
 
  27 import org.camunda.bpm.engine.delegate.DelegateExecution
 
  28 import org.onap.aai.domain.yang.Relationship
 
  29 import org.onap.aai.domain.yang.ServiceInstance
 
  30 import org.onap.aai.domain.yang.SliceProfile
 
  31 import org.onap.aaiclient.client.aai.AAIResourcesClient
 
  32 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
 
  33 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
 
  34 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
 
  35 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder
 
  36 import org.onap.so.beans.nsmf.AllocateAnNssi
 
  37 import org.onap.so.beans.nsmf.AllocateCnNssi
 
  38 import org.onap.so.beans.nsmf.AllocateTnNssi
 
  39 import org.onap.so.beans.nsmf.AnSliceProfile
 
  40 import org.onap.so.beans.nsmf.CnSliceProfile
 
  41 import org.onap.so.beans.nsmf.EsrInfo
 
  42 import org.onap.so.beans.nsmf.NssiResponse
 
  43 import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest
 
  44 import org.onap.so.beans.nsmf.ServiceInfo
 
  45 import org.onap.so.beans.nsmf.SliceTaskInfo
 
  46 import org.onap.so.beans.nsmf.SliceTaskParamsAdapter
 
  47 import org.onap.so.beans.nsmf.TnSliceProfile
 
  48 import org.onap.so.bpmn.common.scripts.ExceptionUtil
 
  49 import org.onap.so.bpmn.core.json.JsonUtils
 
  50 import org.slf4j.Logger
 
  51 import org.slf4j.LoggerFactory
 
  52 import static org.apache.commons.lang3.StringUtils.isBlank
 
  54 class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
 
  56     private static final Logger logger = LoggerFactory.getLogger(DoAllocateNSIandNSSI.class);
 
  58     ExceptionUtil exceptionUtil = new ExceptionUtil()
 
  60     JsonUtils jsonUtil = new JsonUtils()
 
  62     AAIResourcesClient client = getAAIClient()
 
  65      * Pre Process the BPMN Flow Request
 
  67      * generate the nsOperationKey
 
  68      * generate the nsParameters
 
  71     void preProcessRequest (DelegateExecution execution) {
 
  73         logger.trace("Enter preProcessRequest()")
 
  74         Map<String, Object> nssiMap = new HashMap<>()
 
  75         execution.setVariable("nssiMap", nssiMap)
 
  76         boolean isMoreNSSTtoProcess = true
 
  77         execution.setVariable("isMoreNSSTtoProcess", isMoreNSSTtoProcess)
 
  78         List<String> nsstSequence = new ArrayList<>(Arrays.asList("cn"))
 
  79         execution.setVariable("nsstSequence", nsstSequence)
 
  80         logger.trace("Exit preProcessRequest")
 
  87     void retriveSliceOption(DelegateExecution execution) {
 
  88         logger.trace("Enter retriveSliceOption() of DoAllocateNSIandNSSI")
 
  90         boolean isNSIOptionAvailable
 
  92         SliceTaskParamsAdapter sliceParams =
 
  93                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
  95         if(isBlank(sliceParams.getSuggestNsiId())) {
 
  96             isNSIOptionAvailable = false
 
  99             isNSIOptionAvailable = true
 
 100             execution.setVariable('nsiServiceInstanceId', sliceParams.getSuggestNsiId())
 
 101             execution.setVariable('nsiServiceInstanceName', sliceParams.getSuggestNsiName())
 
 103         execution.setVariable("isNSIOptionAvailable", isNSIOptionAvailable)
 
 104         logger.trace("Exit retriveSliceOption() of DoAllocateNSIandNSSI")
 
 109      * create nsi instance in aai
 
 112     void createNSIinAAI(DelegateExecution execution) {
 
 113         logger.debug("Enter CreateNSIinAAI in DoAllocateNSIandNSSI()")
 
 115         String sliceInstanceId = UUID.randomUUID().toString()
 
 116         SliceTaskParamsAdapter sliceParams =
 
 117                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 119         //set new nsiId to sliceParams suggestNsiId
 
 120         sliceParams.setSuggestNsiId(sliceInstanceId)
 
 122         ServiceInstance nsi = new ServiceInstance()
 
 125         String sliceInstanceName = "nsi_"+execution.getVariable("sliceServiceInstanceName")
 
 126         String serviceType = execution.getVariable("serviceType")
 
 127         String serviceStatus = "deactivated"
 
 128         String modelInvariantUuid = sliceParams.getNSTInfo().invariantUUID
 
 129         String modelUuid = sliceParams.getNSTInfo().UUID
 
 131         String uuiRequest = execution.getVariable("uuiRequest")
 
 132         String serviceInstanceLocationid = jsonUtil.getJsonValue(uuiRequest, "service.parameters.requestInputs.plmnIdList")
 
 133         String serviceRole = "nsi"
 
 135         execution.setVariable("sliceInstanceId", sliceInstanceId)
 
 136         nsi.setServiceInstanceId(sliceInstanceId)
 
 137         nsi.setServiceInstanceName(sliceInstanceName)
 
 138         nsi.setServiceType(serviceType)
 
 139         nsi.setOrchestrationStatus(serviceStatus)
 
 140         nsi.setModelInvariantId(modelInvariantUuid)
 
 141         nsi.setModelVersionId(modelUuid)
 
 142         nsi.setServiceInstanceLocationId(serviceInstanceLocationid)
 
 143         nsi.setServiceRole(serviceRole)
 
 147             AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceInstanceId))
 
 148             client.create(nsiServiceUri, nsi)
 
 150             execution.setVariable("nsiServiceUri", nsiServiceUri)
 
 152         } catch (BpmnError e) {
 
 154         } catch (Exception ex) {
 
 155             msg = "Exception in DoCreateSliceServiceInstance.instantiateSliceService. " + ex.getMessage()
 
 157             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 159         execution.setVariable("sliceTaskParams", sliceParams)
 
 161         logger.debug("Exit CreateNSIinAAI in DoAllocateNSIandNSSI()")
 
 166      * create relationship between nsi and service profile instance
 
 169     void createRelationship(DelegateExecution execution) {
 
 171         String allottedResourceId = execution.getVariable("allottedResourceId")
 
 172         SliceTaskParamsAdapter sliceParams =
 
 173                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 175         AAIResourceUri nsiServiceUri = execution.getVariable("nsiServiceUri") as AAIResourceUri
 
 176         logger.info("Creating Allotted resource relationship, nsiServiceUri: " + nsiServiceUri)
 
 178         AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceParams.suggestNsiId).allottedResource(allottedResourceId))
 
 180         client.connect(allottedResourceUri, nsiServiceUri)
 
 187     void updateRelationship(DelegateExecution execution) {
 
 188         logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
 
 189         //todo: allottedResourceId
 
 190         String allottedResourceId = execution.getVariable("allottedResourceId")
 
 191         //Need to check whether nsi exist : Begin
 
 193         SliceTaskParamsAdapter sliceParams =
 
 194                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 196         String nsiServiceInstanceID = sliceParams.getSuggestNsiId()
 
 197         //sliceParams.setServiceId(nsiServiceInstanceID)
 
 199         AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(nsiServiceInstanceID))
 
 202             AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
 
 203             Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
 
 204             if (!si.isPresent()) {
 
 205                 String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
 
 207                 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 210             AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceParams.suggestNsiId).allottedResource(allottedResourceId))
 
 212             client.connect(allottedResourceUri, nsiServiceUri)
 
 214             execution.setVariable("sliceTaskParams", sliceParams)
 
 215         }catch(BpmnError e) {
 
 217         }catch (Exception ex){
 
 218             String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
 
 220             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 222         logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
 
 226      * create RAN Slice Profile Instance
 
 229     void createAnSliceProfileInstance(DelegateExecution execution) {
 
 231         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 232         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 233         String serviceInstanceId = UUID.randomUUID().toString()
 
 234         execution.setVariable("ranSliceProfileInstanceId", serviceInstanceId) //todo:
 
 236         String serviceType = ""
 
 237         String serviceRole = "slice-profile"
 
 238         String oStatus = "deactivated"
 
 240         SliceTaskParamsAdapter sliceParams =
 
 241                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 242         SliceTaskInfo<AnSliceProfile> sliceTaskInfo = sliceParams.anSliceTaskInfo
 
 243         sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
 
 245         // create slice profile
 
 246         ServiceInstance rspi = new ServiceInstance()
 
 247         rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
 
 248         rspi.setServiceType(serviceType)
 
 249         rspi.setServiceRole(serviceRole)
 
 250         rspi.setOrchestrationStatus(oStatus)
 
 251         rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
 
 252         rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
 
 253         rspi.setInputParameters(execution.getVariable("uuiRequest"))
 
 254         rspi.setWorkloadContext(execution.getVariable("useInterval"))
 
 255         rspi.setEnvironmentContext(execution.getVariable("sNSSAI_id"))
 
 257         //timestamp format YYYY-MM-DD hh:mm:ss
 
 258         rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
 
 260         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(serviceInstanceId))
 
 261         client.create(uri, rspi)
 
 263         execution.setVariable("sliceTaskParams", sliceParams)
 
 267      * create An Slice Profile
 
 270     void createAnSliceProfile(DelegateExecution execution) {
 
 272         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 273         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 274         //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
 
 276         SliceTaskParamsAdapter sliceParams =
 
 277                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 278         SliceTaskInfo<AnSliceProfile> sliceTaskInfo = sliceParams.anSliceTaskInfo
 
 279         AnSliceProfile anSliceProfile = sliceTaskInfo.sliceProfile
 
 281         String profileId = UUID.randomUUID().toString()
 
 282         anSliceProfile.setSliceProfileId(profileId)
 
 284         SliceProfile sliceProfile = new SliceProfile()
 
 285         sliceProfile.setProfileId(profileId)
 
 286         sliceProfile.setCoverageAreaTAList(anSliceProfile.coverageAreaTAList as String)
 
 288         AAIResourceUri uri = AAIUriFactory.createResourceUri(
 
 289             AAIFluentTypeBuilder.business().customer(globalSubscriberId)
 
 290             .serviceSubscription(subscriptionServiceType)
 
 291             .serviceInstance(sliceTaskInfo.sliceInstanceId)
 
 292             .sliceProfile(profileId)
 
 294         client.create(uri, sliceProfile)
 
 295         execution.setVariable("sliceTaskParams", sliceParams)
 
 299      * prepare AllocateAnNssi
 
 302     void prepareAllocateAnNssi(DelegateExecution execution) {
 
 305         SliceTaskParamsAdapter sliceParams =
 
 306                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 307         SliceTaskInfo<AnSliceProfile> sliceTaskInfo = sliceParams.anSliceTaskInfo
 
 309         NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
 
 311         AllocateAnNssi allocateAnNssi = new AllocateAnNssi()
 
 312         allocateAnNssi.sliceProfile = sliceTaskInfo.sliceProfile
 
 314         EsrInfo esrInfo = new EsrInfo()
 
 315         //todo: vendor and network
 
 316         esrInfo.setVendor(sliceTaskInfo.getVendor())
 
 317         esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
 
 319         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 320         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 323         ServiceInfo serviceInfo = new ServiceInfo()
 
 324         serviceInfo.globalSubscriberId = globalSubscriberId
 
 325         serviceInfo.subscriptionServiceType = subscriptionServiceType
 
 326         serviceInfo.nsiId = sliceParams.suggestNsiId
 
 327         serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
 
 328         serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
 
 330         nbiRequest.setServiceInfo(serviceInfo)
 
 331         nbiRequest.setEsrInfo(esrInfo)
 
 332         nbiRequest.setAllocateAnNssi(allocateAnNssi)
 
 334         execution.setVariable("AnAllocateNssiNbiRequest", nbiRequest)
 
 335         execution.setVariable("anSliceTaskInfo", sliceTaskInfo)
 
 336         execution.setVariable("anSubnetType", SubnetType.AN_NF)
 
 341      * create RAN Slice Profile Instance
 
 344     void createCnSliceProfileInstance(DelegateExecution execution) {
 
 346         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 347         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 348         String serviceInstanceId = UUID.randomUUID().toString()
 
 349         execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
 
 351         String serviceType = ""
 
 352         String serviceRole = "slice-profile"
 
 353         String oStatus = "deactivated"
 
 355         SliceTaskParamsAdapter sliceParams =
 
 356                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 357         SliceTaskInfo<CnSliceProfile> sliceTaskInfo = sliceParams.cnSliceTaskInfo
 
 358         sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
 
 360         // create slice profile
 
 361         ServiceInstance rspi = new ServiceInstance()
 
 362         rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
 
 363         rspi.setServiceType(serviceType)
 
 364         rspi.setServiceRole(serviceRole)
 
 365         rspi.setOrchestrationStatus(oStatus)
 
 366         rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
 
 367         rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
 
 368         rspi.setInputParameters(uuiRequest)
 
 369         rspi.setWorkloadContext(useInterval)
 
 370         rspi.setEnvironmentContext(sNSSAI_id)
 
 372         //timestamp format YYYY-MM-DD hh:mm:ss
 
 373         rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
 
 375         execution.setVariable("communicationServiceInstance", rspi)
 
 377         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(serviceInstanceId))
 
 378         client.create(uri, rspi)
 
 379         execution.setVariable("sliceTaskParams", sliceParams)
 
 383      * create Cn Slice Profile
 
 386     void createCnSliceProfile(DelegateExecution execution) {
 
 388         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 389         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 390         //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
 
 392         SliceTaskParamsAdapter sliceParams =
 
 393                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 395         SliceTaskInfo<CnSliceProfile> sliceTaskInfo = sliceParams.cnSliceTaskInfo
 
 396         CnSliceProfile cnSliceProfile = sliceTaskInfo.sliceProfile
 
 398         String profileId = UUID.randomUUID().toString()
 
 399         cnSliceProfile.setSliceProfileId(profileId)
 
 401         SliceProfile sliceProfile = new SliceProfile()
 
 402         sliceProfile.setProfileId(profileId)
 
 403         sliceProfile.setCoverageAreaTAList(cnSliceProfile.coverageAreaTAList as String)
 
 405         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(sliceTaskInfo.sliceInstanceId).sliceProfile(profileId))
 
 406         client.create(uri, sliceProfile)
 
 407         execution.setVariable("sliceTaskParams", sliceParams)
 
 411      * prepare AllocateCnNssi
 
 414     void prepareAllocateCnNssi(DelegateExecution execution) {
 
 417         SliceTaskParamsAdapter sliceParams =
 
 418                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 419         SliceTaskInfo<CnSliceProfile> sliceTaskInfo = sliceParams.cnSliceTaskInfo
 
 421         NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
 
 423         AllocateCnNssi allocateCnNssi = new AllocateCnNssi()
 
 424         allocateCnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
 
 425         allocateCnNssi.nssiId = sliceTaskInfo.suggestNssiId
 
 426         allocateCnNssi.nssiName = sliceTaskInfo.NSSTInfo.name
 
 427         allocateCnNssi.sliceProfile = sliceTaskInfo.sliceProfile
 
 428         allocateCnNssi.nsiInfo.nsiId = sliceParams.suggestNsiId
 
 430         EsrInfo esrInfo = new EsrInfo()
 
 431         //todo: vendor and network
 
 432         esrInfo.setVendor(sliceTaskInfo.getVendor())
 
 433         esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
 
 435         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 436         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 439         ServiceInfo serviceInfo = new ServiceInfo()
 
 440         serviceInfo.globalSubscriberId = globalSubscriberId
 
 441         serviceInfo.subscriptionServiceType = subscriptionServiceType
 
 442         serviceInfo.nsiId = sliceParams.suggestNsiId
 
 443         serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
 
 444         serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
 
 445         serviceInfo.nssiId = sliceTaskInfo.suggestNssiId //if shared
 
 447         nbiRequest.setServiceInfo(serviceInfo)
 
 448         nbiRequest.setEsrInfo(esrInfo)
 
 449         nbiRequest.setAllocateCnNssi(allocateCnNssi)
 
 451         execution.setVariable("CnAllocateNssiNbiRequest", nbiRequest)
 
 452         execution.setVariable("cnSliceTaskInfo", sliceTaskInfo)
 
 453         execution.setVariable("cnSubnetType", SubnetType.CN)
 
 458      * create TN Slice Profile Instance
 
 461     void createTnBHSliceProfileInstance(DelegateExecution execution) {
 
 462         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 463         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 465         String serviceType = ""
 
 466         String serviceRole = "slice-profile"
 
 467         String oStatus = "deactivated"
 
 469         SliceTaskParamsAdapter sliceParams =
 
 470                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 472         SliceTaskInfo<TnSliceProfile> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
 
 473         String serviceInstanceId = UUID.randomUUID().toString()
 
 475         sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
 
 476         //execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
 
 478         // create slice profile
 
 479         ServiceInstance rspi = new ServiceInstance()
 
 480         rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
 
 481         rspi.setServiceType(serviceType)
 
 482         rspi.setServiceRole(serviceRole)
 
 483         rspi.setOrchestrationStatus(oStatus)
 
 484         rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
 
 485         rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
 
 486         rspi.setInputParameters(uuiRequest)
 
 487         rspi.setWorkloadContext(useInterval)
 
 488         rspi.setEnvironmentContext(sNSSAI_id)
 
 490         //timestamp format YYYY-MM-DD hh:mm:ss
 
 491         rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
 
 493         execution.setVariable("communicationServiceInstance", rspi)
 
 495         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(serviceInstanceId))
 
 496         client.create(uri, rspi)
 
 498         execution.setVariable("sliceTaskParams", sliceParams)
 
 502      * create Tn Slice Profile
 
 505     void createTnBHSliceProfile(DelegateExecution execution) {
 
 507         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 508         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 510         SliceTaskParamsAdapter sliceParams =
 
 511                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 513         SliceTaskInfo<TnSliceProfile> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
 
 515         TnSliceProfile tnSliceProfile = sliceTaskInfo.sliceProfile
 
 516         String profileId = UUID.randomUUID().toString()
 
 517         tnSliceProfile.setSliceProfileId(profileId)
 
 519         SliceProfile sliceProfile = new SliceProfile()
 
 520         sliceProfile.setProfileId(profileId)
 
 522         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(sliceTaskInfo.sliceInstanceId).sliceProfile(profileId))
 
 523         client.create(uri, sliceProfile)
 
 525         execution.setVariable("sliceTaskParams", sliceParams)
 
 529      * prepare AllocateCnNssi
 
 532     void prepareAllocateTnBHNssi(DelegateExecution execution) {
 
 535         SliceTaskParamsAdapter sliceParams =
 
 536                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 537         SliceTaskInfo<TnSliceProfile> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
 
 539         NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
 
 541         AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
 
 542         //todo: AllocateTnNssi
 
 543         //todo: endpointId -> set into tn
 
 544         allocateTnNssi.setTransportSliceNetworks()
 
 545         allocateTnNssi.setNetworkSliceInfos()
 
 548         //allocateTnNssi.networkSliceInfos
 
 550         EsrInfo esrInfo = new EsrInfo()
 
 551         esrInfo.setVendor(sliceTaskInfo.getVendor())
 
 552         esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
 
 554         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 555         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 557         ServiceInfo serviceInfo = new ServiceInfo()
 
 558         serviceInfo.globalSubscriberId = globalSubscriberId
 
 559         serviceInfo.subscriptionServiceType = subscriptionServiceType
 
 560         serviceInfo.nsiId = sliceParams.suggestNsiId
 
 561         serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
 
 562         serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
 
 563         serviceInfo.nssiId = sliceTaskInfo.suggestNssiId
 
 565         nbiRequest.setServiceInfo(serviceInfo)
 
 566         nbiRequest.setEsrInfo(esrInfo)
 
 567         nbiRequest.setAllocateTnNssi(allocateTnNssi)
 
 569         execution.setVariable("TnBHAllocateNssiNbiRequest", nbiRequest)
 
 570         execution.setVariable("tnBHSliceTaskInfo", sliceTaskInfo)
 
 571         execution.setVariable("tnBHSubnetType", SubnetType.TN_BH)
 
 575      * Update relationship between
 
 577      * 2. Slice Profile and Service Profile
 
 578      * 3. SliceProfile and NSSI
 
 579      * 4. sliceProfile and endpoint
 
 583     public void updateAnRelationship(DelegateExecution execution) {
 
 585         SliceTaskParamsAdapter sliceParams =
 
 586                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 588         NssiResponse result = execution.getVariable("anNssiAllocateResult") as NssiResponse
 
 589         String nssiId = result.getNssiId()
 
 590         String nsiId = sliceParams.getSuggestNsiId()
 
 591         String sliceProfileInstanceId = sliceParams.anSliceTaskInfo.sliceInstanceId
 
 592         String serviceProfileInstanceId = sliceParams.serviceId
 
 594         //todo: aai -> nssi -> relationship -> endpointId -> set into tn
 
 595         String endPointId = getEndpointIdFromAAI(execution, nssiId)
 
 596         execution.setVariable("endPointIdAn", endPointId)
 
 598         updateRelationship(execution, nsiId, nssiId)
 
 600         updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
 
 602         updateRelationship(execution, sliceProfileInstanceId, nssiId)
 
 604         sliceParams.anSliceTaskInfo.suggestNssiId = nssiId
 
 605         execution.setVariable("sliceTaskParams", sliceParams)
 
 610      * Update relationship between
 
 612      * 2. Slice Profile and Service Profile
 
 613      * 3. SliceProfile and NSSI
 
 617     public void updateCnRelationship(DelegateExecution execution) {
 
 619         SliceTaskParamsAdapter sliceParams =
 
 620                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 622         NssiResponse result = execution.getVariable("cnNssiAllocateResult") as NssiResponse
 
 623         String nssiId = result.getNssiId()
 
 624         String nsiId = sliceParams.getSuggestNsiId()
 
 625         String sliceProfileInstanceId = sliceParams.cnSliceTaskInfo.sliceInstanceId
 
 626         String serviceProfileInstanceId = sliceParams.serviceId
 
 628         //todo: aai -> nssi -> relationship -> endpointId -> set into tn
 
 629         String endPointId = getEndpointIdFromAAI(execution, nssiId)
 
 630         execution.setVariable("endPointIdCn", endPointId)
 
 632         updateRelationship(execution, nsiId, nssiId)
 
 634         updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
 
 636         updateRelationship(execution,sliceProfileInstanceId, nssiId)
 
 638         sliceParams.cnSliceTaskInfo.suggestNssiId = nssiId
 
 639         execution.setVariable("sliceTaskParams", sliceParams)
 
 643      * get endpoint Id from AAI by nssi id
 
 648     private String getEndpointIdFromAAI(DelegateExecution execution, String nssiId) {
 
 649         logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
 
 650         //todo: allottedResourceId
 
 652         SliceTaskParamsAdapter sliceParams =
 
 653                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 655         //sliceParams.setServiceId(nsiServiceInstanceID)
 
 656         AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(nssiId))
 
 658         String endpointId = null
 
 661             AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
 
 662             Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
 
 663             if (!si.isPresent()) {
 
 664                 String msg = "NSSI in the option doesn't exist. " + nssiId
 
 666                 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 668                 ServiceInstance nssiInstance = si.get()
 
 669                 //todo: handle relationship and return endpointId
 
 670                 if (nssiInstance.relationshipList == null) {
 
 671                     String msg = "relationshipList of " + nssiId + " is null"
 
 675                 for (Relationship relationship : nssiInstance.relationshipList.getRelationship()) {
 
 676                     if (relationship.relationshipLabel){
 
 677                         endpointId = relationship //todo
 
 684         }catch(BpmnError e) {
 
 686         }catch (Exception ex){
 
 687             String msg = "Exception: " + ex
 
 689             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 691         logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
 
 695      * Update relationship between
 
 697      * 2. Slice Profile and Service Profile
 
 698      * 3. SliceProfile and NSSI
 
 702     public void updateTnBHRelationship(DelegateExecution execution) {
 
 703         SliceTaskParamsAdapter sliceParams =
 
 704                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
 
 706         NssiResponse result = execution.getVariable("tnBHNssiAllocateResult") as NssiResponse
 
 707         String nssiId = result.getNssiId()
 
 708         String nsiId = sliceParams.getSuggestNsiId()
 
 709         String sliceProfileInstanceId = sliceParams.tnBHSliceTaskInfo.sliceInstanceId
 
 710         String serviceProfileInstanceId = sliceParams.serviceId
 
 713         updateRelationship(execution, nsiId, nssiId)
 
 715         updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
 
 717         updateRelationship(execution,sliceProfileInstanceId, nssiId)
 
 719         sliceParams.tnBHSliceTaskInfo.suggestNssiId = nssiId
 
 720         execution.setVariable("sliceTaskParams", sliceParams)
 
 724      * sourceId -> targetId
 
 729     void updateRelationship(DelegateExecution execution, String sourceId, String targetId) {
 
 731         Relationship relationship = new Relationship()
 
 733         AAIResourceUri targetInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(targetId))
 
 735         logger.info("Creating relationship, targetInstanceUri: " + targetInstanceUri)
 
 737         relationship.setRelatedLink(targetInstanceUri.build().toString())
 
 739         AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sourceId)).relationshipAPI()
 
 740         client.create(sourceInstanceUri, relationship)