2  * ============LICENSE_START=======================================================
 
   4  * ================================================================================
 
   5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 
   6  * ================================================================================
 
   7  * Modifications Copyright (c) 2019 Samsung
 
   8  * ================================================================================
 
   9  * Licensed under the Apache License, Version 2.0 (the "License");
 
  10  * you may not use this file except in compliance with the License.
 
  11  * You may obtain a copy of the License at
 
  13  *      http://www.apache.org/licenses/LICENSE-2.0
 
  15  * Unless required by applicable law or agreed to in writing, software
 
  16  * distributed under the License is distributed on an "AS IS" BASIS,
 
  17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  18  * See the License for the specific language governing permissions and
 
  19  * limitations under the License.
 
  20  * ============LICENSE_END=========================================================
 
  23 package org.onap.so.bpmn.infrastructure.scripts
 
  25 import org.onap.so.logger.LoggingAnchor
 
  26 import org.onap.aai.domain.yang.GenericVnf
 
  27 import org.onap.aai.domain.yang.VfModule
 
  28 import org.camunda.bpm.engine.delegate.BpmnError
 
  29 import org.camunda.bpm.engine.delegate.DelegateExecution;
 
  30 import org.json.JSONArray;
 
  31 import org.json.JSONObject
 
  32 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
 
  33 import org.onap.so.bpmn.common.scripts.ExceptionUtil
 
  34 import org.onap.so.bpmn.common.scripts.MsoUtils
 
  35 import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
 
  36 import org.onap.so.bpmn.common.scripts.VidUtils
 
  37 import org.onap.so.bpmn.core.UrnPropertiesReader
 
  38 import org.onap.so.bpmn.core.WorkflowException
 
  39 import org.onap.so.bpmn.core.domain.ModelInfo
 
  40 import org.onap.so.bpmn.core.domain.ModuleResource
 
  41 import org.onap.so.bpmn.core.domain.ServiceDecomposition
 
  42 import org.onap.so.bpmn.core.domain.VnfResource
 
  43 import org.onap.so.bpmn.core.json.JsonUtils
 
  44 import org.onap.aaiclient.client.graphinventory.entities.uri.Depth
 
  45 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
 
  46 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
 
  47 import org.onap.aaiclient.client.aai.AAIObjectType
 
  48 import org.onap.logging.filter.base.ErrorCode
 
  49 import org.onap.so.logger.MessageEnum
 
  50 import org.slf4j.Logger
 
  51 import org.slf4j.LoggerFactory
 
  54  * This class supports the macro VID Flow
 
  55  * with the deletion of a generic vnf and related VF modules.
 
  57 class DoDeleteVnfAndModules extends AbstractServiceTaskProcessor {
 
  58     private static final Logger logger = LoggerFactory.getLogger( DoDeleteVnfAndModules.class);
 
  60         String Prefix="DDVAM_"
 
  61         ExceptionUtil exceptionUtil = new ExceptionUtil()
 
  62         JsonUtils jsonUtil = new JsonUtils()
 
  63         VidUtils vidUtils = new VidUtils(this)
 
  64         SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
 
  67          * This method gets and validates the incoming
 
  73         public void preProcessRequest(DelegateExecution execution) {
 
  75                 execution.setVariable("prefix",Prefix)
 
  76                 logger.trace("STARTED DoDeleteVnfAndModules PreProcessRequest Process")
 
  81                         String cloudConfiguration = execution.getVariable("cloudConfiguration")         
 
  82                         logger.debug("Cloud Configuration: " + cloudConfiguration)      
 
  84                         String requestId = execution.getVariable("msoRequestId")
 
  85                         execution.setVariable("requestId", requestId)                   
 
  86                         execution.setVariable("mso-request-id", requestId)
 
  87                         logger.debug("Incoming Request Id is: " + requestId)
 
  89                         String serviceInstanceId = execution.getVariable("serviceInstanceId")                   
 
  90                         logger.debug("Incoming Service Instance Id is: " + serviceInstanceId)
 
  92                         String vnfId = execution.getVariable("vnfId")                   
 
  93                         logger.debug("Incoming Vnf Id is: " + vnfId)                    
 
  96                         execution.setVariable("DDVAM_source", source)
 
  97                         logger.debug("Incoming Source is: " + source)
 
  99                         execution.setVariable("DDVAM_isVidRequest", "true")
 
 101                         String sdncVersion = execution.getVariable("sdncVersion")
 
 102                         if (sdncVersion == null) {
 
 105                         execution.setVariable("DDVAM_sdncVersion", sdncVersion)
 
 106                         logger.debug("Incoming Sdnc Version is: " + sdncVersion)
 
 108                         // Set aLaCarte flag to false
 
 109                         execution.setVariable("aLaCarte", false)
 
 111                         String sdncCallbackUrl = (String) UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback", execution)
 
 112                         if (sdncCallbackUrl == null || sdncCallbackUrl.trim().isEmpty()) {
 
 113                                 def msg = 'Required variable \'mso.workflow.sdncadapter.callback\' is missing'
 
 114                                 logger.error(LoggingAnchor.FIVE, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), msg, "BPMN",
 
 115                                                 ErrorCode.UnknownError.getValue(), "Exception");
 
 116                                 exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg)
 
 118                         execution.setVariable("sdncCallbackUrl", sdncCallbackUrl)
 
 119                         logger.debug("SDNC Callback URL: " + sdncCallbackUrl)
 
 120                         logger.debug("SDNC Callback URL is: " + sdncCallbackUrl)        
 
 123                         if (!sdncVersion.equals("1702")) {
 
 124                                 //String vnfModelInfo = execution.getVariable("vnfModelInfo")
 
 125                                 //String serviceModelInfo = execution.getVariable("serviceModelInfo")
 
 127                                 String serviceId = execution.getVariable("productFamilyId")
 
 128                                 execution.setVariable("DDVAM_serviceId", serviceId)
 
 129                                 logger.debug("Incoming Service Id is: " + serviceId)
 
 132                                 //String modelInvariantId = jsonUtil.getJsonValue(vnfModelInfo, "modelInvariantId")
 
 133                                 //execution.setVariable("DDVAM_modelInvariantId", modelInvariantId)
 
 134                                 //logger.debug("Incoming Invariant Id is: " + modelInvariantId)
 
 136                                 //String modelVersionId = jsonUtil.getJsonValue(vnfModelInfo, "modelVersionId")
 
 137                                 //if (modelVersionId == null) {
 
 138                                 //      modelVersionId = ""
 
 140                                 //execution.setVariable("DDVAM_modelVersionId", modelVersionId)
 
 141                                 //logger.debug("Incoming Version Id is: " + modelVersionId)
 
 143                                 //String modelVersion = jsonUtil.getJsonValue(vnfModelInfo, "modelVersion")
 
 144                                 //execution.setVariable("DDVAM_modelVersion", modelVersion)
 
 145                                 //logger.debug("Incoming Model Version is: " + modelVersion)
 
 147                                 //String modelName = jsonUtil.getJsonValue(vnfModelInfo, "modelName")
 
 148                                 //execution.setVariable("DDVAM_modelName", modelName)
 
 149                                 //logger.debug("Incoming Model Name is: " + modelName)
 
 151                                 //String modelCustomizationId = jsonUtil.getJsonValue(vnfModelInfo, "modelCustomizationId")
 
 152                                 //if (modelCustomizationId == null) {
 
 153                                 //      modelCustomizationId = ""
 
 155                                 //execution.setVariable("DDVAM_modelCustomizationId", modelCustomizationId)
 
 156                                 //logger.debug("Incoming Model Customization Id is: " + modelCustomizationId)
 
 158                                 String cloudSiteId = execution.getVariable("lcpCloudRegionId")
 
 159                                 execution.setVariable("DDVAM_cloudSiteId", cloudSiteId)
 
 160                                 logger.debug("Incoming Cloud Site Id is: " + cloudSiteId)
 
 162                                 String tenantId = execution.getVariable("tenantId")
 
 163                                 execution.setVariable("DDVAM_tenantId", tenantId)
 
 164                                 logger.debug("Incoming Tenant Id is: " + tenantId)
 
 166                                 String globalSubscriberId = execution.getVariable("globalSubscriberId")
 
 167                                 if (globalSubscriberId == null) {
 
 168                                         globalSubscriberId = ""
 
 170                                 execution.setVariable("DDVAM_globalSubscriberId", globalSubscriberId)
 
 171                                 logger.debug("Incoming Global Subscriber Id is: " + globalSubscriberId)         
 
 174                         execution.setVariable("DDVAM_vfModulesFromDecomposition", null)
 
 175                         // Retrieve serviceDecomposition if present
 
 176                         ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
 
 177                         if (serviceDecomposition != null) {
 
 178                                 logger.debug("Getting Catalog DB data from ServiceDecomposition object: " + serviceDecomposition.toJsonString())
 
 179                                 List<VnfResource> vnfs = serviceDecomposition.getVnfResources()
 
 180                                 logger.debug("Read vnfs")
 
 182                                         logger.debug("Error - vnfs are empty in serviceDecomposition object")
 
 183                                         exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured in preProcessRequest - vnfs are empty")
 
 185                                 VnfResource vnf = vnfs[0]
 
 188                                         logger.debug("Error - vnf is empty in serviceDecomposition object")
 
 189                                         exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured in preProcessRequest - vnf is empty")
 
 192                                 List<ModuleResource> vfModules = vnf.getAllVfModuleObjects()
 
 194                                 execution.setVariable("DDVAM_vfModulesFromDecomposition", vfModules)                            
 
 197                         execution.setVariable("DDVAM_moduleCount", 0)
 
 198                         execution.setVariable("DDVAM_nextModule", 0)
 
 202                         logger.debug("Rethrowing MSOWorkflowException")
 
 205                         logger.debug(" Error Occured in DoCreateVnfAndModules PreProcessRequest method!" + e.getMessage())
 
 206                         exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured in DoCreateVnf PreProcessRequest")
 
 209                 logger.trace("COMPLETED DoDeleteVnfAndModules PreProcessRequest Process ")
 
 214         public void preProcessAddOnModule(DelegateExecution execution){
 
 216                 execution.setVariable("prefix", Prefix)
 
 217                 logger.trace("STARTED preProcessAddOnModule ")
 
 220                         JSONArray addOnModules = (JSONArray) execution.getVariable("addOnModules")
 
 221                         int addOnIndex = (int) execution.getVariable("addOnModulesDeployed")
 
 223                         JSONObject addOnModule = addOnModules[addOnIndex]
 
 225                         def newVfModuleId = UUID.randomUUID().toString()
 
 226                         execution.setVariable("addOnVfModuleId", newVfModuleId)
 
 228                         execution.setVariable("instancesOfThisModelDeployed", 0)
 
 230                         JSONObject addOnVfModuleModelInfoObject = jsonUtil.getJsonValueForKey(addOnModule, "modelInfo")
 
 231                         String addOnVfModuleModelInfo = addOnVfModuleModelInfoObject.toString()
 
 232                         execution.setVariable("addOnVfModuleModelInfo", addOnVfModuleModelInfo)
 
 233                         String addOnVfModuleLabel = jsonUtil.getJsonValueForKey(addOnModule, "vfModuleLabel")
 
 234                         execution.setVariable("addOnVfModuleLabel", addOnVfModuleLabel)
 
 235                         String addOnPersonaModelId = jsonUtil.getJsonValueForKey(addOnVfModuleModelInfoObject, "modelInvariantUuid")
 
 236                         execution.setVariable("addOnPersonaModelId", addOnPersonaModelId)
 
 237                         String addOnInitialCount = jsonUtil.getJsonValueForKey(addOnModule, "initialCount")
 
 238                         execution.setVariable("initialCount", addOnInitialCount)
 
 242                         logger.error(LoggingAnchor.FIVE, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(),
 
 243                                         "Exception Occured Processing preProcessAddOnModule." + e, "BPMN",
 
 244                                         ErrorCode.UnknownError.getValue(), "Exception is:\n" + e);
 
 245                         exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occurred during preProcessAddOnModule Method:\n" + e.getMessage())
 
 247                 logger.trace("COMPLETED preProcessSDNCAssignRequest ")
 
 251          * Using the received vnfId and vfModuleId, query AAI to get the corresponding VNF info.
 
 252          * A 200 response is expected with the VNF info in the response body. Will find out the base module info.
 
 254          * @param execution The flow's execution instance.
 
 256         public void queryAAIVfModule(DelegateExecution execution) {
 
 258                 def method = getClass().getSimpleName() + '.queryAAIVfModule(' +
 
 259                         'execution=' + execution.getId() +
 
 261                 logger.trace('Entered ' + method)
 
 264                         def vnfId = execution.getVariable('vnfId')
 
 266                         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, vnfId).depth(Depth.ONE)
 
 269                                 Optional<GenericVnf> genericVnfOp = getAAIClient().get(GenericVnf.class,uri)
 
 270                                 //Map<String, String>[] vfModules = new HashMap<String,String>[]
 
 271                                 List<ModuleResource> vfModulesFromDecomposition = execution.getVariable("DDVAM_vfModulesFromDecomposition")
 
 272                                 def vfModulesList = new ArrayList<Map<String,String>>()
 
 273                                 def vfModuleBaseEntry = null
 
 274                                 if (genericVnfOp.isPresent()) {
 
 275                                         execution.setVariable('DCVFM_queryAAIVfModuleResponseCode', 200)
 
 276                                         execution.setVariable('DCVFM_queryAAIVfModuleResponse', genericVnfOp.get())
 
 278                                         // Parse the VNF record from A&AI to find base module info
 
 279                                                 if (genericVnfOp.get().getVfModules()!= null && !genericVnfOp.get().getVfModules().getVfModule().isEmpty() ) {
 
 280                                                         List<VfModule> vfModules = genericVnfOp.get().getVfModules().getVfModule()
 
 281                                                         execution.setVariable("DDVAM_moduleCount", vfModules.size())
 
 282                                                         ModelInfo vfModuleModelInfo = null
 
 283                                                         for (VfModule vfModule : vfModules) {
 
 284                                                                 Map<String, String> vfModuleEntry = new HashMap<String, String>()
 
 285                                                                 vfModuleEntry.put("vfModuleId", vfModule.getVfModuleId())
 
 286                                                                 vfModuleEntry.put("vfModuleName", vfModule.getVfModuleName())
 
 288                                                                 // Find the model for this vf module in decomposition if specified
 
 289                                                                 if (vfModulesFromDecomposition != null) {
 
 290                                                                         logger.debug("vfModulesFromDecomposition is not null")
 
 291                                                                         def vfModuleUuid = vfModule.getModelVersionId()
 
 292                                                                         if (vfModuleUuid == null) {
 
 293                                                                                 vfModuleUuid = vfModule.getPersonaModelVersion()
 
 295                                                                         logger.debug("vfModule UUID is: " + vfModuleUuid)
 
 296                                                                         for (j in 0..vfModulesFromDecomposition.size()-1) {
 
 297                                                                                 ModuleResource mr = vfModulesFromDecomposition[j]
 
 298                                                                                 if (mr.getModelInfo().getModelUuid() == vfModuleUuid) {
 
 299                                                                                         logger.debug("Found modelInfo")
 
 300                                                                                         vfModuleModelInfo = mr.getModelInfo()
 
 306                                                                 if (vfModuleModelInfo != null) {
 
 307                                                                         String vfModuleModelInfoString = vfModuleModelInfo.toString()
 
 308                                                                         def vfModuleModelInfoValue = jsonUtil.getJsonValue(vfModuleModelInfoString, "modelInfo")
 
 309                                                                         vfModuleEntry.put("vfModuleModelInfo", vfModuleModelInfoValue)
 
 312                                                                         vfModuleEntry.put("vfModuleModelInfo", null)
 
 316                                                                 // Save base vf module for last
 
 317                                                                 if (vfModule.isIsBaseVfModule()) {
 
 318                                                                         vfModuleBaseEntry = vfModuleEntry
 
 321                                                                         vfModulesList.add(vfModuleEntry)
 
 324                                                         if (vfModuleBaseEntry != null) {
 
 325                                                                 vfModulesList.add(vfModuleBaseEntry)
 
 329                                         execution.setVariable('DCVFM_queryAAIVfModuleResponseCode', 404)
 
 330                                         execution.setVariable('DCVFM_queryAAIVfModuleResponse', "Generic Vnf not found")
 
 333                                 execution.setVariable("DDVAM_vfModules", vfModulesList)
 
 334                         } catch (Exception ex) {
 
 335                                 logger.debug('Exception occurred while executing AAI GET: {}', ex.getMessage(), ex)
 
 336                                 exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'AAI GET Failed:' + ex.getMessage())
 
 338                         logger.trace('Exited ' + method)
 
 339                 } catch (BpmnError e) {
 
 341                 } catch (Exception e) {
 
 342                         logger.error(LoggingAnchor.FIVE, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(),
 
 343                                         'Caught exception in ' + method, "BPMN",
 
 344                                         ErrorCode.UnknownError.getValue(), "Exception is:\n" + e);
 
 345                         exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Error in queryAAIVfModule(): ' + e.getMessage())
 
 349         public void prepareNextModuleToDelete(DelegateExecution execution){
 
 351                 execution.setVariable("prefix", Prefix)
 
 352                 logger.trace("STARTED prepareNextModuleToDelete ")
 
 355                         int i = execution.getVariable("DDVAM_nextModule")
 
 356                         def vfModules = execution.getVariable("DDVAM_vfModules")
 
 357                         def vfModule = vfModules[i]
 
 359                         def vfModuleId = vfModule.get("vfModuleId")
 
 360                         execution.setVariable("DDVAM_vfModuleId", vfModuleId)
 
 362                         def vfModuleName = vfModule.get("vfModuleName")
 
 363                         execution.setVariable("DDVAM_vfModuleName", vfModuleName)                       
 
 365                         def vfModuleModelInfo = vfModule.get("vfModuleModelInfo")
 
 366                         logger.debug("vfModuleModelInfo for module delete: " + vfModuleModelInfo)
 
 367                         execution.setVariable("DDVAM_vfModuleModelInfo", vfModuleModelInfo)                     
 
 370                         logger.error(LoggingAnchor.FIVE, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(),
 
 371                                         "Exception Occured Processing preProcessAddOnModule." + e, "BPMN",
 
 372                                         ErrorCode.UnknownError.getValue(), "Exception is:\n" + e);
 
 373                         exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occurred during prepareNextModuleToDelete Method:\n" + e.getMessage())
 
 375                 logger.trace("COMPLETED prepareNextModuleToDelete ")
 
 378         public void preProcessSDNCDeactivateRequest(DelegateExecution execution){
 
 380                 execution.setVariable("prefix", Prefix)
 
 381                 logger.trace("STARTED preProcessSDNCDeactivateRequest ")
 
 382                 def vnfId = execution.getVariable("vnfId")
 
 383                 def serviceInstanceId = execution.getVariable("serviceInstanceId")              
 
 388                         String deactivateSDNCRequest = buildSDNCRequest(execution, serviceInstanceId, "deactivate")
 
 390                         deactivateSDNCRequest = utils.formatXml(deactivateSDNCRequest)
 
 391                         execution.setVariable("DDVAM_deactivateSDNCRequest", deactivateSDNCRequest)
 
 392                         logger.debug("Outgoing DeactivateSDNCRequest is: \n" + deactivateSDNCRequest)
 
 393                         logger.debug("Outgoing DeactivateSDNCRequest is: \n" + deactivateSDNCRequest)
 
 396                         logger.error(LoggingAnchor.FIVE, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(),
 
 397                                         "Exception Occured Processing preProcessSDNCDeactivateRequest." + e, "BPMN",
 
 398                                         ErrorCode.UnknownError.getValue(), "Exception is:\n" + e);
 
 399                         exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occurred during preProcessSDNCDeactivateRequest Method:\n" + e.getMessage())
 
 401                 logger.trace("COMPLETED preProcessSDNCDeactivateRequest ")
 
 404         public void preProcessSDNCUnassignRequest(DelegateExecution execution) {
 
 405                 def method = getClass().getSimpleName() + '.preProcessSDNCUnassignRequest(' +
 
 406                         'execution=' + execution.getId() +
 
 409                 logger.trace('Entered ' + method)
 
 410                 execution.setVariable("prefix", Prefix)
 
 411                 logger.trace("STARTED preProcessSDNCUnassignRequest Process ")
 
 413                         String vnfId = execution.getVariable("vnfId")
 
 414                         String serviceInstanceId = execution.getVariable("serviceInstanceId")
 
 416                         String unassignSDNCRequest = buildSDNCRequest(execution, serviceInstanceId, "unassign")
 
 418                         execution.setVariable("DDVAM_unassignSDNCRequest", unassignSDNCRequest)
 
 419                         logger.debug("Outgoing UnassignSDNCRequest is: \n" + unassignSDNCRequest)
 
 420                         logger.debug("Outgoing UnassignSDNCRequest is: \n"  + unassignSDNCRequest)
 
 423                         logger.debug("Exception Occured Processing preProcessSDNCUnassignRequest. Exception is:\n" + e)
 
 424                         exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occured during  preProcessSDNCUnassignRequest Method:\n" + e.getMessage())
 
 426                 logger.trace("COMPLETED  preProcessSDNCUnassignRequest Process ")
 
 429         public String buildSDNCRequest(DelegateExecution execution, String svcInstId, String action){
 
 431                                 String uuid = execution.getVariable('testReqId') // for junits
 
 433                                         uuid = execution.getVariable("msoRequestId") + "-" +    System.currentTimeMillis()
 
 435                                 def callbackURL = execution.getVariable("sdncCallbackUrl")
 
 436                                 def requestId = execution.getVariable("msoRequestId")
 
 437                                 def serviceId = execution.getVariable("DDVAM_serviceId")                                
 
 438                                 def tenantId = execution.getVariable("DDVAM_tenantId")
 
 439                                 def source = execution.getVariable("DDVAM_source")
 
 440                                 def vnfId = execution.getVariable("vnfId")
 
 441                                 def serviceInstanceId = execution.getVariable("serviceInstanceId")
 
 442                                 def cloudSiteId = execution.getVariable("DDVAM_cloudSiteId")                            
 
 443                                 def modelCustomizationId = execution.getVariable("DDVAM_modelCustomizationId")                          
 
 444                                 //def serviceModelInfo = execution.getVariable("serviceModelInfo")
 
 445                                 //def vnfModelInfo = execution.getVariable("vnfModelInfo")
 
 446                                 //String serviceEcompModelInformation = sdncAdapterUtils.modelInfoToEcompModelInformation(serviceModelInfo)
 
 447                                 //String vnfEcompModelInformation = sdncAdapterUtils.modelInfoToEcompModelInformation(vnfModelInfo)                             
 
 448                                 def globalSubscriberId = execution.getVariable("DDVAM_globalSubscriberId")
 
 449                                 def sdncVersion = execution.getVariable("DDVAM_sdncVersion")                                            
 
 452                                 """<sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:ns5="http://org.onap/so/request/types/v1"
 
 453                                                                                                         xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1"
 
 454                                                                                                         xmlns:sdncadapter="http://org.onap/workflow/sdnc/adapter/schema/v1">
 
 455            <sdncadapter:RequestHeader>
 
 456                                 <sdncadapter:RequestId>${MsoUtils.xmlEscape(uuid)}</sdncadapter:RequestId>
 
 457                                 <sdncadapter:SvcInstanceId>${MsoUtils.xmlEscape(svcInstId)}</sdncadapter:SvcInstanceId>
 
 458                                 <sdncadapter:SvcAction>${MsoUtils.xmlEscape(action)}</sdncadapter:SvcAction>
 
 459                                 <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation>
 
 460                                 <sdncadapter:CallbackUrl>${MsoUtils.xmlEscape(callbackURL)}</sdncadapter:CallbackUrl>
 
 461                                 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
 
 462                 </sdncadapter:RequestHeader>
 
 463         <sdncadapterworkflow:SDNCRequestData>
 
 464                 <request-information>
 
 465                         <request-id>${MsoUtils.xmlEscape(requestId)}</request-id>
 
 466                         <request-action>DeleteVnfInstance</request-action>
 
 467                         <source>${MsoUtils.xmlEscape(source)}</source>
 
 471                 </request-information>
 
 472                 <service-information>
 
 474                         <subscription-service-type/>                    
 
 475                         <service-instance-id>${MsoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
 
 476                         <global-customer-id/>
 
 477                 </service-information>
 
 479                         <vnf-id>${MsoUtils.xmlEscape(vnfId)}</vnf-id>
 
 484                         <tenant>${MsoUtils.xmlEscape(tenantId)}</tenant>
 
 485                         <aic-cloud-region>${MsoUtils.xmlEscape(cloudSiteId)}</aic-cloud-region>                 
 
 487         </sdncadapterworkflow:SDNCRequestData>
 
 488         </sdncadapterworkflow:SDNCAdapterWorkflowRequest>"""
 
 490                         logger.debug("sdncRequest:  " + sdncRequest)
 
 494         public void validateSDNCResponse(DelegateExecution execution, String response, String method){
 
 496                 execution.setVariable("prefix",Prefix)
 
 497                 logger.trace("STARTED ValidateSDNCResponse Process")
 
 499                 WorkflowException workflowException = execution.getVariable("WorkflowException")
 
 500                 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
 
 502                 logger.debug("workflowException: " + workflowException)
 
 504                 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
 
 505                 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
 
 507                 logger.debug("SDNCResponse: " + response)
 
 509                 String sdncResponse = response
 
 510                 if(execution.getVariable(Prefix + 'sdncResponseSuccess') == true){
 
 511                         logger.debug("Received a Good Response from SDNC Adapter for " + method + " SDNC Call.  Response is: \n" + sdncResponse)                        
 
 513                         logger.debug("Received a BAD Response from SDNC Adapter for " + method + " SDNC Call.")
 
 514                         throw new BpmnError("MSOWorkflowException")
 
 516                 logger.trace("COMPLETED ValidateSDNCResponse Process")