2  * ============LICENSE_START=======================================================
 
   4  * ================================================================================
 
   5  * Copyright (C) 2019 Huawei Technologies Co., Ltd. All rights reserved.
 
   6  * ================================================================================
 
   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 com.google.gson.Gson
 
  24 import com.google.gson.reflect.TypeToken
 
  25 import org.camunda.bpm.engine.delegate.BpmnError
 
  26 import org.camunda.bpm.engine.delegate.DelegateExecution
 
  27 import org.onap.aai.domain.yang.*
 
  28 import org.onap.so.beans.nsmf.NSSI
 
  29 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
 
  30 import org.onap.so.bpmn.common.scripts.ExceptionUtil
 
  31 import org.onap.so.bpmn.common.scripts.MsoUtils
 
  32 import org.onap.so.bpmn.common.scripts.RequestDBUtil
 
  33 import org.onap.so.bpmn.core.WorkflowException
 
  34 import org.onap.so.bpmn.core.json.JsonUtils
 
  35 import org.onap.so.client.aai.AAIObjectType
 
  36 import org.onap.so.client.aai.AAIResourcesClient
 
  37 import org.onap.so.client.aai.entities.AAIResultWrapper
 
  38 import org.onap.so.client.aai.entities.uri.AAIResourceUri
 
  39 import org.onap.so.client.aai.entities.uri.AAIUriFactory
 
  40 import org.onap.so.db.request.beans.OperationStatus
 
  41 import org.onap.logging.filter.base.ErrorCode
 
  42 import org.onap.so.logger.LoggingAnchor
 
  43 import org.onap.so.logger.MessageEnum
 
  44 import org.slf4j.Logger
 
  45 import org.slf4j.LoggerFactory
 
  47 import javax.ws.rs.NotFoundException
 
  48 import java.lang.reflect.Type
 
  50 import static org.apache.commons.lang3.StringUtils.isBlank
 
  53  * This groovy class supports the <class>ActivateSliceService.bpmn</class> process.
 
  54  * AlaCarte flow for 1702 slice service activate
 
  58 class ActivateSliceService extends AbstractServiceTaskProcessor {
 
  61     String Prefix = "ACTSS_"
 
  63     ExceptionUtil exceptionUtil = new ExceptionUtil()
 
  65     JsonUtils jsonUtil = new JsonUtils()
 
  67     RequestDBUtil requestDBUtil = new RequestDBUtil()
 
  69     private static final Logger logger = LoggerFactory.getLogger(ActivateSliceService.class)
 
  71     void preProcessRequest(DelegateExecution execution) {
 
  72         logger.debug(Prefix + "preProcessRequest Start")
 
  73         execution.setVariable("prefix", Prefix)
 
  77             // check for incoming json message/input
 
  78             String siRequest = execution.getVariable("bpmnRequest")
 
  79             logger.debug(siRequest)
 
  81             String requestId = execution.getVariable("mso-request-id")
 
  82             execution.setVariable("msoRequestId", requestId)
 
  83             logger.info("Input Request:" + siRequest + " reqId:" + requestId)
 
  85             String serviceInstanceId = execution.getVariable("serviceInstanceId")
 
  86             if (isBlank(serviceInstanceId)) {
 
  87                 msg = "Input serviceInstanceId' is null"
 
  88                 exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
 
  90             String source = jsonUtil.getJsonValue(siRequest, "source")
 
  91             execution.setVariable("source", source)
 
  94             String globalSubscriberId = jsonUtil.getJsonValue(siRequest, "globalSubscriberId")
 
  95             if (isBlank(globalSubscriberId)) {
 
  96                 msg = "Input globalSubscriberId' is null"
 
  98                 execution.setVariable("globalSubscriberId", "5GCustomer")
 
 100                 execution.setVariable("globalSubscriberId", globalSubscriberId)
 
 104             String subscriptionServiceType = jsonUtil.getJsonValue(siRequest, "serviceType")
 
 105             if (isBlank(subscriptionServiceType)) {
 
 106                 msg = "Input subscriptionServiceType is null"
 
 108                 execution.setVariable("subscriptionServiceType", "5G")
 
 110                 execution.setVariable("subscriptionServiceType", subscriptionServiceType)
 
 112             String operationId = jsonUtil.getJsonValue(siRequest, "operationId")
 
 113             execution.setVariable("operationId", operationId)
 
 115             String operationType = execution.getVariable("operationType")
 
 116             execution.setVariable("operationType", operationType.toUpperCase())
 
 118             logger.info("operationType is " + execution.getVariable("operationType") )
 
 119         } catch (BpmnError e) {
 
 121         } catch (Exception ex) {
 
 122             msg = "Exception in preProcessRequest " + ex.getMessage()
 
 124             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 126         logger.debug(Prefix + "preProcessRequest Exit")
 
 130     def sendSyncResponse = { DelegateExecution execution ->
 
 131         logger.debug(Prefix + "sendSyncResponse Start")
 
 133             String operationId = execution.getVariable("operationId")
 
 134             // RESTResponse for API Handler (APIH) Reply Task
 
 135             String Activate5GsliceServiceRestRequest = """{"operationId":"${operationId}"}""".trim()
 
 136             logger.debug(" sendSyncResponse to APIH:" + "\n" + Activate5GsliceServiceRestRequest)
 
 137             sendWorkflowResponse(execution, 202, Activate5GsliceServiceRestRequest)
 
 138             execution.setVariable("sentSyncResponse", true)
 
 139         } catch (Exception ex) {
 
 140             String msg = "Exceptuion in sendSyncResponse:" + ex.getMessage()
 
 142             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 144         logger.debug(Prefix + "sendSyncResponse Exit")
 
 148     public sendSyncError = { DelegateExecution execution ->
 
 149         logger.debug("sendSyncError Start")
 
 152             if (execution.getVariable("WorkflowException") instanceof WorkflowException) {
 
 153                 WorkflowException wfe = execution.getVariable("WorkflowException") as WorkflowException
 
 154                 errorMessage = wfe.getErrorMessage()
 
 156                 errorMessage = "Sending Sync Error."
 
 159             String buildWorkflowException =
 
 160                     """<aetgt:WorkflowException xmlns:aetgt="http://org.onap/so/workflow/schema/v1">
 
 161                                         <aetgt:ErrorMessage>${MsoUtils.xmlEscape(errorMessage)}</aetgt:ErrorMessage>
 
 162                                         <aetgt:ErrorCode>7000</aetgt:ErrorCode>
 
 163                                    </aetgt:WorkflowException>"""
 
 165             logger.debug(buildWorkflowException)
 
 166             sendWorkflowResponse(execution, 500, buildWorkflowException)
 
 168         } catch (Exception ex) {
 
 169             logger.debug("Sending Sync Error Activity Failed. " + "\n" + ex.getMessage())
 
 171         logger.debug(Prefix + "sendSyncError Exit")
 
 175     def prepareCompletionRequest = { DelegateExecution execution ->
 
 176         logger.debug(Prefix + "prepareCompletionRequest Start")
 
 177         String serviceId = execution.getVariable("serviceInstanceId")
 
 178         String operationId = execution.getVariable("operationId")
 
 179         String userId = execution.getVariable("globalSubscriberId")
 
 180         //String result = execution.getVariable("result")
 
 181         String result = "finished"
 
 182         String progress = "100"
 
 184         String operationContent = execution.getVariable("operationContent")
 
 185         String operationType = execution.getVariable("operationType")
 
 187         OperationStatus initStatus = new OperationStatus()
 
 188         initStatus.setServiceId(serviceId)
 
 189         initStatus.setOperationId(operationId)
 
 190         initStatus.setOperation(operationType)
 
 191         initStatus.setUserId(userId)
 
 192         initStatus.setResult(result)
 
 193         initStatus.setProgress(progress)
 
 194         initStatus.setReason(reason)
 
 195         initStatus.setOperationContent(operationContent)
 
 197         requestDBUtil.prepareUpdateOperationStatus(execution, initStatus)
 
 199         logger.debug(Prefix + "prepareCompletionRequest Exit")
 
 204      * Init the service Operation Status
 
 206     def prepareInitServiceOperationStatus = { DelegateExecution execution ->
 
 207         logger.debug(Prefix + "prepareActivateServiceOperationStatus Start")
 
 209             String serviceId = execution.getVariable("serviceInstanceId")
 
 210             String operationId = execution.getVariable("operationId")
 
 211             String operationType = execution.getVariable("operationType")
 
 212             String userId = execution.getVariable("globalSubscriberId")
 
 213             String result = "processing"
 
 214             String progress = "0"
 
 216             String operationContent = "Prepare service activation"
 
 218             execution.setVariable("e2eserviceInstanceId", serviceId)
 
 219             execution.setVariable("operationType", operationType)
 
 221             OperationStatus initStatus = new OperationStatus()
 
 222             initStatus.setServiceId(serviceId)
 
 223             initStatus.setOperationId(operationId)
 
 224             initStatus.setOperation(operationType)
 
 225             initStatus.setUserId(userId)
 
 226             initStatus.setResult(result)
 
 227             initStatus.setProgress(progress)
 
 228             initStatus.setReason(reason)
 
 229             initStatus.setOperationContent(operationContent)
 
 231             requestDBUtil.prepareUpdateOperationStatus(execution, initStatus)
 
 233         } catch (Exception e) {
 
 234             logger.error(LoggingAnchor.FIVE, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(),
 
 235                     "Exception Occured Processing prepareInitServiceOperationStatus.", "BPMN",
 
 236                     ErrorCode.UnknownError.getValue(), "Exception is:\n" + e)
 
 237             execution.setVariable("CVFMI_ErrorResponse",
 
 238                     "Error Occurred during prepareInitServiceOperationStatus Method:\n" + e.getMessage())
 
 240         logger.debug(Prefix + "prepareInitServiceOperationStatus Exit")
 
 244     private getSNSSIStatusByNsi = { DelegateExecution execution, String NSIServiceId ->
 
 246         logger.debug(Prefix + "getSNSSIStatusByNsi Start")
 
 247         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 248         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 250         AAIResourcesClient client = new AAIResourcesClient()
 
 251         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
 
 252                 globalSubscriberId, subscriptionServiceType, NSIServiceId)
 
 253         if (!client.exists(uri)) {
 
 254             exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Service Instance was not found in aai")
 
 256         AAIResultWrapper wrapper = client.get(uri, NotFoundException.class)
 
 257         Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
 
 258         if (si.isPresent()) {
 
 260             List<Relationship> relatedList = si.get().getRelationshipList().getRelationship()
 
 261             for (Relationship relationship : relatedList) {
 
 262                 String relatedTo = relationship.getRelatedTo()
 
 263                 if (relatedTo.toLowerCase() == "allotted-resource") {
 
 264                     //get snssi from allotted resource in list by nsi
 
 265                     List<String> SNSSIList = new ArrayList<>()
 
 266                     List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
 
 267                     for (RelationshipData relationshipData : relationshipDataList) {
 
 268                         if (relationshipData.getRelationshipKey() == "service-instance.service-instance-id") {
 
 269                             SNSSIList.add(relationshipData.getRelationshipValue())
 
 272                     for (String snssi : SNSSIList) {
 
 273                         AAIResourcesClient client01 = new AAIResourcesClient()
 
 274                         AAIResourceUri uri01 = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
 
 275                                 globalSubscriberId, subscriptionServiceType, snssi)
 
 276                         if (!client.exists(uri01)) {
 
 277                             exceptionUtil.buildAndThrowWorkflowException(execution, 2500,
 
 278                                     "Service Instance was not found in aai")
 
 280                         AAIResultWrapper wrapper01 = client01.get(uri01, NotFoundException.class)
 
 281                         Optional<ServiceInstance> nssiSi = wrapper01.asBean(ServiceInstance.class)
 
 282                         if (nssiSi.isPresent()) {
 
 283                             return nssiSi.get().getOrchestrationStatus() == "deactivated"
 
 291         logger.debug(Prefix + "getSNSSIStatusByNsi Exit")
 
 295     def updateStatusSNSSAIandNSIandNSSI = { DelegateExecution execution ->
 
 296         logger.debug(Prefix + "updateStatusSNSSAIandNSIandNSSI Start")
 
 297         logger.debug(" ***** update SNSSAI NSI NSSI slicing ***** ")
 
 298         String e2eserviceInstanceId = execution.getVariable("e2eserviceInstanceId")
 
 299         String NSIserviceInstanceId = execution.getVariable("NSIserviceid")
 
 301         String globalCustId = execution.getVariable("globalSubscriberId")
 
 302         String serviceType = execution.getVariable("serviceType")
 
 303         String operationType = execution.getVariable("operationType")
 
 305         String nssiMap = execution.getVariable("nssiMap")
 
 306         Type type = new TypeToken<HashMap<String, NSSI>>() {}.getType()
 
 307         Map<String, NSSI> activateNssiMap = new Gson().fromJson(nssiMap, type)
 
 308         //update tn/cn/an nssi
 
 309         for (Map.Entry<String, NSSI> entry : activateNssiMap.entrySet()) {
 
 310             NSSI nssi = entry.getValue()
 
 311             String nssiid = nssi.getNssiId()
 
 312             updateStratus(execution, globalCustId, serviceType, nssiid, operationType)
 
 314         if (operationType.equalsIgnoreCase("activation")) {
 
 316             updateStratus(execution, globalCustId, serviceType, e2eserviceInstanceId, operationType)
 
 318             updateStratus(execution, globalCustId, serviceType, NSIserviceInstanceId, operationType)
 
 321             updateStratus(execution, globalCustId, serviceType, e2eserviceInstanceId, operationType)
 
 322             boolean flag = getSNSSIStatusByNsi(execution, NSIserviceInstanceId)
 
 325                 updateStratus(execution, globalCustId, serviceType, NSIserviceInstanceId, operationType)
 
 327                 logger.error("Service's status update failed")
 
 328                 String msg = "Service's status update failed"
 
 329                 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 332         logger.debug(Prefix + "updateStatusSNSSAIandNSIandNSSI Exit")
 
 336     def updateStratus = { DelegateExecution execution, String globalCustId,
 
 337                           String serviceType, String serviceId, String operationType ->
 
 338         logger.debug(Prefix + "updateStratus Start")
 
 341             AAIResourcesClient client = new AAIResourcesClient()
 
 342             AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
 
 343                     globalCustId, serviceType, serviceId)
 
 344             if (!client.exists(uri)) {
 
 345                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Service Instance was not found in aai")
 
 347             AAIResultWrapper wrapper = client.get(uri, NotFoundException.class)
 
 348             Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
 
 350             if (si.isPresent()) {
 
 351                 if (operationType.equalsIgnoreCase("activation")) {
 
 352                     if (si.get().getOrchestrationStatus() == "deactivated") {
 
 353                         si.get().setOrchestrationStatus("activated")
 
 354                         client.update(uri, si.get())
 
 357                     if (si.get().getOrchestrationStatus() == "activated") {
 
 358                         si.get().setOrchestrationStatus("deactivated")
 
 359                         client.update(uri, si.get())
 
 364         } catch (Exception e) {
 
 365             logger.info("Service is already in active state")
 
 366             String msg = "Service is already in active state, " + e.getMessage()
 
 367             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 370         logger.debug(Prefix + "updateStratus Exit")
 
 374     def prepareActivation = { DelegateExecution execution ->
 
 375         logger.debug(Prefix + "prepareActivation Start")
 
 377         logger.debug(" ***** prepare active NSI/AN/CN/TN slice ***** ")
 
 378         String NSIserviceInstanceId = execution.getVariable("NSIserviceid")
 
 380         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 381         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 383         Map<String, NSSI> nssiMap = new HashMap<>()
 
 385         List<String> activationSequence = new ArrayList<>(Arrays.asList("an", "tn", "cn"))
 
 387         def activationCount = activationSequence.size()
 
 389         execution.setVariable("activationIndex", "0")
 
 391         execution.setVariable("activationCount", activationCount)
 
 393             //get the TN NSSI id by NSI id, active NSSI TN slicing
 
 394             AAIResourcesClient client = new AAIResourcesClient()
 
 395             AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
 
 396                     globalSubscriberId, subscriptionServiceType, NSIserviceInstanceId)
 
 397             if (!client.exists(uri)) {
 
 398                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Service Instance was not found in aai")
 
 400             AAIResultWrapper wrapper = client.get(uri, NotFoundException.class)
 
 401             Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
 
 402             if (si.isPresent()) {
 
 404                 List<Relationship> relatedList = si.get().getRelationshipList().getRelationship()
 
 405                 for (Relationship relationship : relatedList) {
 
 406                     String relatedTo = relationship.getRelatedTo()
 
 407                     if (relatedTo.toLowerCase() == "service-instance") {
 
 408                         String relatioshipurl = relationship.getRelatedLink()
 
 409                         String nssiserviceid =
 
 410                                 relatioshipurl.substring(relatioshipurl.lastIndexOf("/") + 1, relatioshipurl.length())
 
 412                         AAIResourcesClient client01 = new AAIResourcesClient()
 
 413                         AAIResourceUri uri01 = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
 
 414                                 globalSubscriberId, subscriptionServiceType, nssiserviceid)
 
 415                         if (!client.exists(uri01)) {
 
 416                             exceptionUtil.buildAndThrowWorkflowException(execution, 2500,
 
 417                                     "Service Instance was not found in aai")
 
 419                         AAIResultWrapper wrapper01 = client01.get(uri01, NotFoundException.class)
 
 420                         Optional<ServiceInstance> nssiSi = wrapper01.asBean(ServiceInstance.class)
 
 421                         if (nssiSi.isPresent()) {
 
 422                             if (nssiSi.get().getEnvironmentContext().toLowerCase().contains("an")
 
 423                                     || nssiSi.get().getEnvironmentContext().toLowerCase().contains("cn")
 
 424                                     || nssiSi.get().getEnvironmentContext().toLowerCase().contains("tn")) {
 
 425                                 nssiMap.put(nssiSi.get().getEnvironmentContext(),
 
 426                                         new NSSI(nssiSi.get().getServiceInstanceId(),
 
 427                                                 nssiSi.get().getModelInvariantId(), nssiSi.get().getModelVersionId()))
 
 435         } catch (Exception e) {
 
 436             String msg = "Requested service does not exist:" + e.getMessage()
 
 437             logger.info("Service doesnt exist")
 
 438             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 441         if (nssiMap.size() > 0) {
 
 442             execution.setVariable("isNSSIActivate", "true")
 
 443             String nssiMap01 = mapToJsonStr(nssiMap)
 
 444             execution.setVariable("nssiMap", nssiMap01)
 
 445             execution.setVariable("operation_type", "activate")
 
 446             execution.setVariable("activationCount", nssiMap.size())
 
 447             logger.info("the nssiMap01 is :" + nssiMap01)
 
 449             execution.setVariable("isNSSIActivate", "false")
 
 452         logger.debug(Prefix + "prepareActivation Exit")
 
 456     private mapToJsonStr = { HashMap<String, NSSI> stringNSSIHashMap ->
 
 457         HashMap<String, NSSI> map = new HashMap<String, NSSI>()
 
 458         for (Map.Entry<String, NSSI> child : stringNSSIHashMap.entrySet()) {
 
 459             map.put(child.getKey(), child.getValue())
 
 461         return new Gson().toJson(map)
 
 465     def checkAAIOrchStatusofslice = { DelegateExecution execution ->
 
 466         logger.debug(Prefix + "CheckAAIOrchStatus Start")
 
 469         String serviceInstanceId = execution.getVariable("serviceInstanceId")
 
 470         String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 471         String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
 472         String operationType = execution.getVariable("operationType")
 
 474         logger.debug("serviceInstanceId: " + serviceInstanceId)
 
 476         //check the e2e slice status
 
 479                 AAIResourcesClient client = new AAIResourcesClient()
 
 480                 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
 
 481                         globalSubscriberId, subscriptionServiceType, serviceInstanceId)
 
 482                 if (!client.exists(uri)) {
 
 483                     exceptionUtil.buildAndThrowWorkflowException(execution, 2500,
 
 484                             "Service Instance was not found in aai")
 
 486                 AAIResultWrapper wrapper = client.get(uri, NotFoundException.class)
 
 487                 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
 
 488                 if (si.isPresent()) {
 
 489                     if (si.get().getOrchestrationStatus().toLowerCase() == "activated" &&
 
 490                             operationType.equalsIgnoreCase("deactivation")) {
 
 491                         logger.info("Service is in active state")
 
 492                         execution.setVariable("e2eservicestatus", "activated")
 
 493                         execution.setVariable("isContinue", "true")
 
 494                         String snssai = si.get().getEnvironmentContext()
 
 495                         execution.setVariable("snssai", snssai)
 
 496                     } else if (si.get().getOrchestrationStatus().toLowerCase() == "deactivated" &&
 
 497                             operationType.equalsIgnoreCase("activation")) {
 
 498                         logger.info("Service is  in de-activated state")
 
 499                         execution.setVariable("e2eservicestatus", "deactivated")
 
 500                         execution.setVariable("isContinue", "true")
 
 501                         String snssai = si.get().getEnvironmentContext()
 
 502                         execution.setVariable("snssai", snssai)
 
 504                         execution.setVariable("isContinue", "false")
 
 507             } catch (Exception e) {
 
 508                 msg = "Requested e2eservice does not exist"
 
 509                 logger.info("e2eservice doesnt exist")
 
 510                 execution.setVariable("isContinue", "false")
 
 511                 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 514             //check the NSI is exist or the status of NSI is active or de-active
 
 517                 //get the allotted-resources by e2e slice id
 
 518                 AAIResourcesClient client_allotted = new AAIResourcesClient()
 
 519                 AAIResourceUri uri_allotted = AAIUriFactory.createResourceUri(AAIObjectType.ALLOTTED_RESOURCE_ALL,
 
 520                         globalSubscriberId, subscriptionServiceType, serviceInstanceId)
 
 521                 if (!client_allotted.exists(uri_allotted)) {
 
 522                     exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Service Instance was not found in aai")
 
 524                 AAIResultWrapper wrapper_allotted = client_allotted.get(uri_allotted, NotFoundException.class)
 
 525                 Optional<AllottedResources> all_allotted = wrapper_allotted.asBean(AllottedResources.class)
 
 527                 if (all_allotted.isPresent() && all_allotted.get().getAllottedResource()) {
 
 528                     List<AllottedResource> AllottedResourceList = all_allotted.get().getAllottedResource()
 
 529                     AllottedResource ar = AllottedResourceList.first()
 
 530                     String relatedLink = ar.getRelationshipList().getRelationship().first().getRelatedLink()
 
 531                     String nsiserviceid = relatedLink.substring(relatedLink.lastIndexOf("/") + 1, relatedLink.length())
 
 532                     execution.setVariable("NSIserviceid", nsiserviceid)
 
 533                     logger.info("the NSI ID is:" + nsiserviceid)
 
 535                     //Query nsi by nsi id
 
 537                         //get the NSI id by e2e slice id
 
 538                         AAIResourcesClient client = new AAIResourcesClient()
 
 539                         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
 
 540                                 globalSubscriberId, subscriptionServiceType, nsiserviceid)
 
 541                         if (!client.exists(uri)) {
 
 542                             exceptionUtil.buildAndThrowWorkflowException(execution, 2500,
 
 543                                     "Service Instance was not found in aai")
 
 545                         AAIResultWrapper wrapper = client.get(uri, NotFoundException.class)
 
 546                         Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
 
 548                         if (si.isPresent()) {
 
 549                             if (si.get().getServiceRole().toLowerCase() == "nsi") {
 
 550                                 if (si.get().getOrchestrationStatus() == "activated") {
 
 551                                     logger.info("NSI services is  in activated state")
 
 552                                     execution.setVariable("NSIservicestatus", "activated")
 
 554                                     logger.info("NSI services is  in deactivated state")
 
 555                                     execution.setVariable("NSIservicestatus", "deactivated")
 
 558                                 logger.info("the service id" + si.get().getServiceInstanceId() + "is " +
 
 559                                         si.get().getServiceRole())
 
 560                                 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 563                     } catch (Exception e) {
 
 564                         msg = "Requested NSI service does not exist:" + e.getMessage()
 
 565                         logger.info("NSI service doesnt exist")
 
 566                         execution.setVariable("isContinue", "false")
 
 567                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 570             } catch (Exception e) {
 
 571                 msg = "Requested service does not exist: " + e.getMessage()
 
 572                 logger.info("NSI Service doesnt exist")
 
 573                 execution.setVariable("isActivate", "false")
 
 574                 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 576         } catch (BpmnError e) {
 
 578         } catch (Exception ex) {
 
 579             msg = "Exception in org.onap.so.bpmn.common.scripts.CompleteMsoProcess.CheckAAIOrchStatus " + ex.getMessage()
 
 581             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 584         logger.debug(Prefix + "CheckAAIOrchStatus Exit")