2  * ============LICENSE_START=======================================================
 
   4  * ================================================================================
 
   5  * Copyright (C) 2018 Huawei Technologies Co., Ltd. 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
 
  26 import org.apache.commons.lang3.*
 
  27 import org.camunda.bpm.engine.delegate.BpmnError
 
  28 import org.camunda.bpm.engine.delegate.DelegateExecution
 
  29 import org.json.JSONObject
 
  31 import org.onap.aai.domain.yang.ServiceInstance
 
  32 import org.onap.aai.domain.yang.ServiceInstances
 
  33 import org.onap.aai.domain.yang.v13.Metadata
 
  34 import org.onap.aai.domain.yang.v13.Metadatum
 
  35 import org.onap.so.bpmn.common.recipe.ResourceInput
 
  36 import org.onap.so.bpmn.common.resource.ResourceRequestBuilder
 
  37 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
 
  38 import org.onap.so.bpmn.common.scripts.ExceptionUtil
 
  39 import org.onap.so.bpmn.common.scripts.MsoUtils
 
  40 import org.onap.so.bpmn.core.domain.ModelInfo
 
  41 import org.onap.so.bpmn.core.domain.ResourceType
 
  42 import org.onap.so.bpmn.core.json.JsonUtils
 
  43 import org.onap.so.bpmn.core.UrnPropertiesReader
 
  44 import org.onap.aaiclient.client.aai.AAIObjectPlurals
 
  45 import org.onap.aaiclient.client.aai.AAIResourcesClient
 
  46 import org.onap.aaiclient.client.aai.AAIObjectType
 
  47 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
 
  48 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
 
  49 import org.slf4j.Logger
 
  50 import org.slf4j.LoggerFactory
 
  53  * This groovy class supports the <class>CreateSDNCCNetworkResource.bpmn</class> process.
 
  54  * flow for SDNC Network Resource Create
 
  56 public class CreateSDNCNetworkResource extends AbstractServiceTaskProcessor {
 
  58     private static final Logger logger = LoggerFactory.getLogger( CreateSDNCNetworkResource.class)
 
  59     String Prefix="CRESDNCRES_"
 
  61     ExceptionUtil exceptionUtil = new ExceptionUtil()
 
  63     JsonUtils jsonUtil = new JsonUtils()
 
  65     MsoUtils msoUtils = new MsoUtils()
 
  67     public void preProcessRequest(DelegateExecution execution){
 
  69         logger.info(" ***** Started preProcessRequest *****")
 
  72             //get bpmn inputs from resource request.
 
  73             String requestId = execution.getVariable("mso-request-id")
 
  74             String requestAction = execution.getVariable("requestAction")
 
  75             logger.info("The requestAction is: " + requestAction)
 
  76             String recipeParamsFromRequest = execution.getVariable("recipeParams")
 
  77             logger.info("The recipeParams is: " + recipeParamsFromRequest)
 
  78             String resourceInput = execution.getVariable("resourceInput")
 
  79             logger.info("The resourceInput is: " + resourceInput)
 
  80             //Get ResourceInput Object
 
  81             ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class)
 
  82             execution.setVariable(Prefix + "resourceInput", resourceInputObj.toString())
 
  84             //Deal with recipeParams
 
  85             String recipeParamsFromWf = execution.getVariable("recipeParamXsd")
 
  87             //For sdnc requestAction default is "createNetworkInstance"
 
  88             String operationType = "Network"
 
  89             if(!StringUtils.isBlank(recipeParamsFromRequest)){
 
  90                 //the operationType from worflow(first node) is second priority.
 
  91                 operationType = jsonUtil.getJsonValue(recipeParamsFromRequest, "operationType")
 
  93             if(!StringUtils.isBlank(recipeParamsFromWf)){
 
  94                 //the operationType from worflow(first node) is highest priority.
 
  95                 operationType = jsonUtil.getJsonValue(recipeParamsFromWf, "operationType")
 
  97             String operationTypeFromConfig = UrnPropertiesReader.getVariable("resource-config." + resourceInputObj.resourceModelInfo.getModelName() + ".operation-type")
 
  98             if (StringUtils.isNotEmpty(operationTypeFromConfig)) {
 
  99                 // highest priority if operation type configured
 
 100                 operationType = operationTypeFromConfig
 
 103             String sdnc_svcAction = "create"
 
 104             String sdnc_requestAction = sdnc_svcAction.capitalize() + operationType + "Instance"
 
 105             String isActivateRequired = UrnPropertiesReader.getVariable("resource-config." + resourceInputObj.resourceModelInfo.getModelName() +".activation-required")
 
 106             execution.setVariable("isActivateRequired", isActivateRequired)
 
 108             execution.setVariable(Prefix + "svcAction", sdnc_svcAction)
 
 109             execution.setVariable(Prefix + "requestAction", sdnc_requestAction)
 
 110             execution.setVariable(Prefix + "serviceInstanceId", resourceInputObj.getServiceInstanceId())
 
 111             execution.setVariable("mso-request-id", requestId)
 
 112             execution.setVariable("mso-service-instance-id", resourceInputObj.getServiceInstanceId())
 
 113         } catch (BpmnError e) {
 
 115         } catch (Exception ex){
 
 116             msg = "Exception in preProcessRequest " + ex.getMessage()
 
 118             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 122     String customizeResourceParam(String networkInputParametersJson) {
 
 123         List<Map<String, Object>> paramList = new ArrayList()
 
 124         JSONObject jsonObject = new JSONObject(networkInputParametersJson)
 
 125         Iterator iterator = jsonObject.keys()
 
 126         while (iterator.hasNext()) {
 
 127             String key = iterator.next()
 
 128             HashMap<String, String> hashMap = new HashMap()
 
 129             hashMap.put("name", key)
 
 130             hashMap.put("value", jsonObject.get(key))
 
 131             paramList.add(hashMap)
 
 133         Map<String, List<Map<String, Object>>> paramMap = new HashMap()
 
 134         paramMap.put("param", paramList)
 
 136         return  new JSONObject(paramMap).toString()
 
 139     private List<Metadatum> getMetaDatum(String customerId,
 
 140                                          String serviceType, String serId) {
 
 141         logger.debug("Enter getPnfInstance")
 
 142         AAIResourcesClient client = new AAIResourcesClient()
 
 144         // think how AAI queried for PNF name using the name
 
 145         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE_METADATA,
 
 146                 customerId, serviceType, serId)
 
 147         logger.debug("uri for pnf get:" + uri.toString())
 
 149         Metadata metadata = client.get(uri).asBean(Metadata.class).get()
 
 150         return metadata.getMetadatum()
 
 154      * This method updates the resource input by collecting required info from AAI
 
 157     public ResourceInput updateResourceInput(DelegateExecution execution) {
 
 158         ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(execution.getVariable(Prefix + "resourceInput"), ResourceInput.class)
 
 159         String modelName = resourceInputObj.getResourceModelInfo().getModelName()
 
 162         def resourceInputTmp = execution.getVariable(Prefix + "resourceInput")
 
 163         String serInput = jsonUtil.getJsonValue(resourceInputTmp, "requestsInputs")
 
 166             case ~/[\w\s\W]*OLT[\w\s\W]*/ : // for backward compatibilty only, this case will be deprecated
 
 167             case ~/[\w\s\W]*AccessConnectivity[\w\s\W]*/ :
 
 168                 // get the required properties and update in resource input
 
 170                 def resourceInput = resourceInputObj.getResourceParameters()
 
 171                 String incomingRequest = resourceInputObj.getRequestsInputs()
 
 172                 String serviceParameters = JsonUtils.getJsonValue(incomingRequest, "service.parameters")
 
 173                 String requestInputs = JsonUtils.getJsonValue(serviceParameters, "requestInputs")
 
 174                 String cvlan = jsonUtil.getJsonValue(serInput,
 
 175                         "service.parameters.requestInputs.cvlan")
 
 176                 String svlan = jsonUtil.getJsonValue(serInput,
 
 177                         "service.parameters.requestInputs.svlan")
 
 178                 String remoteId = jsonUtil.getJsonValue(serInput,
 
 179                         "service.parameters.requestInputs.edgeinternetprofile_ip_remote_id")
 
 180                 String manufacturer = jsonUtil.getJsonValue(serInput,
 
 181                         "service.parameters.requestInputs.ont_ont_manufacturer")
 
 182                 String ontsn = jsonUtil.getJsonValue(serInput,
 
 183                         "service.parameters.requestInputs.ont_ont_serial_num")
 
 185                 String uResourceInput = jsonUtil.addJsonValue(resourceInput, "requestInputs.CVLAN", cvlan)
 
 186                 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.SVLAN", svlan)
 
 187                 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.remote_id", remoteId)
 
 188                 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.manufacturer", manufacturer)
 
 189                 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.ONTSN", ontsn)
 
 190                 logger.debug("old resource input:" + resourceInputObj.toString())
 
 191                 resourceInputObj.setResourceParameters(uResourceInput)
 
 192                 execution.setVariable(Prefix + "resourceInput", resourceInputObj.toString())
 
 193                 logger.debug("new resource Input :" + resourceInputObj.toString())
 
 196             case ~/[\w\s\W]*EdgeInternetProfile[\w\s\W]*/ : // for backward compatibilty only, this case will be deprecated
 
 197             case ~/[\w\s\W]*InternetProfile[\w\s\W]*/ :
 
 198                 // get the required properties and update in resource input
 
 199                 def resourceInput = resourceInputObj.getResourceParameters()
 
 200                 String incomingRequest = resourceInputObj.getRequestsInputs()
 
 201                 String serviceParameters = JsonUtils.getJsonValue(incomingRequest, "service.parameters")
 
 202                 String requestInputs = JsonUtils.getJsonValue(serviceParameters, "requestInputs")
 
 203                 JSONObject inputParameters = new JSONObject(requestInputs)
 
 205                 String cvlan = jsonUtil.getJsonValue(serInput,
 
 206                         "service.parameters.requestInputs.cvlan")
 
 207                 String svlan = jsonUtil.getJsonValue(serInput,
 
 208                         "service.parameters.requestInputs.svlan")
 
 209                 String manufacturer = jsonUtil.getJsonValue(serInput,
 
 210                         "service.parameters.requestInputs.ont_ont_manufacturer")
 
 211                 String remoteId = jsonUtil.getJsonValue(serInput,
 
 212                         "service.parameters.requestInputs.edgeinternetprofile_ip_remote_id")
 
 213                 String ontsn = jsonUtil.getJsonValue(serInput,
 
 214                         "service.parameters.requestInputs.ont_ont_serial_num")
 
 215                 String serviceType = jsonUtil.getJsonValue(serInput,
 
 216                         "service.parameters.requestInputs.edgeinternetprofile_ip_service_type")
 
 217                 String macAddr = jsonUtil.getJsonValue(serInput,
 
 218                         "service.parameters.requestInputs.edgeinternetprofile_ip_rg_mac_addr")
 
 219                 String upStream = jsonUtil.getJsonValue(serInput,
 
 220                         "service.parameters.requestInputs.edgeinternetprofile_ip_upstream_speed")
 
 221                 String downStream = jsonUtil.getJsonValue(serInput,
 
 222                         "service.parameters.requestInputs.edgeinternetprofile_ip_downstream_speed")
 
 224                 String uResourceInput = jsonUtil.addJsonValue(resourceInput, "requestInputs.c_vlan", cvlan)
 
 225                 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.s_vlan", svlan)
 
 226                 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.manufacturer", manufacturer)
 
 227                 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.ip_remote_id", remoteId)
 
 228                 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.ont_sn", ontsn)
 
 229                 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.ip_service_type", serviceType)
 
 230                 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.ip_rg_mac_addr", macAddr)
 
 231                 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.ip_upstream_speed", upStream)
 
 232                 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.ip_downstream_speed", downStream)
 
 233                 logger.debug("old resource input:" + resourceInputObj.toString())
 
 234                 resourceInputObj.setResourceParameters(uResourceInput)
 
 235                 execution.setVariable(Prefix + "resourceInput", resourceInputObj.toString())
 
 236                 logger.debug("new resource Input :" + resourceInputObj.toString())
 
 240             case ~/[\w\s\W]*SOTNConnectivity[\w\s\W]*/:
 
 242                 def resourceInput = resourceInputObj.getResourceParameters()
 
 243                 String incomingRequest = resourceInputObj.getRequestsInputs()
 
 244                 String serviceParameters = JsonUtils.getJsonValue(incomingRequest, "service.parameters")
 
 245                 String requestInputs = JsonUtils.getJsonValue(serviceParameters, "requestInputs")
 
 246                 JSONObject inputParameters = new JSONObject(requestInputs)
 
 247                 if(inputParameters.has("local-access-provider-id")) {
 
 248                     String uResourceInput = jsonUtil.addJsonValue(resourceInput, "requestInputs.access-provider-id", inputParameters.get("local-access-provider-id"))
 
 249                     uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.access-client-id", inputParameters.get("local-access-client-id"))
 
 250                     uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.access-topology-id", inputParameters.get("local-access-topology-id"))
 
 251                     uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.access-ltp-id", inputParameters.get("local-access-ltp-id"))
 
 252                     uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.access-node-id", inputParameters.get("local-access-node-id"))
 
 253                     resourceInputObj.setResourceParameters(uResourceInput)
 
 254                     execution.setVariable(Prefix + "resourceInput", resourceInputObj.toString())
 
 259             case ~/[\w\s\W]*UNI[\w\s\W]*/ :
 
 260                 def resourceInput = resourceInputObj.getResourceParameters()
 
 261                 String incomingRequest = resourceInputObj.getRequestsInputs()
 
 262                 String serviceParameters = JsonUtils.getJsonValue(incomingRequest, "service.parameters")
 
 263                 String requestInputs = JsonUtils.getJsonValue(serviceParameters, "requestInputs")
 
 264                 JSONObject inputParameters = new JSONObject(requestInputs)
 
 265                 String uResourceInput = jsonUtil.addJsonValue(resourceInput, "requestInputs.service-name", inputParameters.get("name"))
 
 266                 resourceInputObj.setResourceParameters(uResourceInput)
 
 267                 execution.setVariable(Prefix + "resourceInput", resourceInputObj.toString())
 
 270             case ~/[\w\s\W]*sdwanvpnattachment[\w\s\W]*/ :
 
 271             case ~/[\w\s\W]*sotnvpnattachment[\w\s\W]*/ :
 
 272             case ~/[\w\s\W]*SOTN-Attachment[\w\s\W]*/ :
 
 273                 // fill attachment TP in networkInputParamJson
 
 274                 def vpnName = StringUtils.containsIgnoreCase(modelName, "sotnvpnattachment") ? "sotnvpnattachmentvf_sotncondition_sotnVpnName" : (StringUtils.containsIgnoreCase(modelName, "SOTN-Attachment") ? "elinesotnattachmentvf0_elinesotnattachmentvfc0_sotnVpnName" : "sdwanvpnattachmentvf_sdwancondition_sdwanVpnName")
 
 275                 fillAttachmentTPInfo(resourceInputObj, execution, vpnName)
 
 279                 // Special case for handling alloted resource types
 
 280                 // in case name is different as expected
 
 281                 if ("ALLOTTED_RESOURCE".equals(resourceInputObj.getResourceModelInfo().getModelType())) {
 
 282                     def vpnName = modelName + "_sotnVpnName"
 
 283                     fillAttachmentTPInfo(resourceInputObj, execution, vpnName)
 
 287         return resourceInputObj
 
 290     private void fillAttachmentTPInfo(ResourceInput resourceInputObj, DelegateExecution execution, String vpnName) {
 
 292         String parentServiceName = jsonUtil.getJsonValueForKey(resourceInputObj.getRequestsInputs(), vpnName)
 
 294         AAIResourcesClient client = new AAIResourcesClient()
 
 295         logger.info("sending request to resolve vpn-name:" + vpnName)
 
 296         AAIResourceUri uri = AAIUriFactory.createResourceUri(new AAIObjectPlurals("/nodes", "/service-instances", "queryByName")).queryParam("service-instance-name", parentServiceName)
 
 297         Optional<ServiceInstances> serviceInstancesOpt = client.get(ServiceInstances.class, uri)
 
 299         if(serviceInstancesOpt.isPresent()) {
 
 300             List<ServiceInstance> serviceInstanceList = serviceInstancesOpt.get().getServiceInstance()
 
 301             logger.info("response from aai:" + serviceInstanceList.toString())
 
 302             if (serviceInstanceList.size() > 0) {
 
 303                 ServiceInstance si = serviceInstanceList.get(0)
 
 304                 String parentServiceInstanceId = si.getServiceInstanceId()
 
 305                 execution.setVariable("parentServiceInstanceId", parentServiceInstanceId)
 
 306                 logger.info("setting parentService id:" + parentServiceInstanceId)
 
 308                 logger.error("No service instance found for given name.")
 
 311             logger.error("No nodes found with this name" + vpnName)
 
 316      * Pre Process the BPMN Flow Request
 
 318      * generate the nsOperationKey
 
 319      * generate the nsParameters
 
 321     public void prepareSDNCRequest (DelegateExecution execution) {
 
 322         logger.info(" ***** Started prepareSDNCRequest *****")
 
 326             String sdnc_svcAction = execution.getVariable(Prefix + "svcAction")
 
 327             String sdnc_requestAction = execution.getVariable(Prefix + "requestAction")
 
 328             String sdncCallback = execution.getVariable("URN_mso_workflow_sdncadapter_callback")
 
 329             String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
 
 331             String parentServiceInstanceId = execution.getVariable("parentServiceInstanceId")
 
 332             String hdrRequestId = execution.getVariable("mso-request-id")
 
 333             String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
 
 334             String source = execution.getVariable("source")
 
 335             String sdnc_service_id = execution.getVariable(Prefix + "sdncServiceId")
 
 336             ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(execution.getVariable(Prefix + "resourceInput"), ResourceInput.class)
 
 337             String serviceType = resourceInputObj.getServiceType()
 
 338             String serviceModelInvariantUuid = resourceInputObj.getServiceModelInfo().getModelInvariantUuid()
 
 339             String serviceModelUuid = resourceInputObj.getServiceModelInfo().getModelUuid()
 
 340             String serviceModelVersion = resourceInputObj.getServiceModelInfo().getModelVersion()
 
 341             String serviceModelName = resourceInputObj.getServiceModelInfo().getModelName()
 
 342             String globalCustomerId = resourceInputObj.getGlobalSubscriberId()
 
 343             String modelInvariantUuid = resourceInputObj.getResourceModelInfo().getModelInvariantUuid()
 
 344             String modelCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
 
 345             String modelUuid = resourceInputObj.getResourceModelInfo().getModelUuid()
 
 346             String modelName = resourceInputObj.getResourceModelInfo().getModelName()
 
 347             String modelVersion = resourceInputObj.getResourceModelInfo().getModelVersion()
 
 348             String resourceInputPrameters = resourceInputObj.getResourceParameters()
 
 349             String networkInputParametersJson = jsonUtil.getJsonValue(resourceInputPrameters, "requestInputs")
 
 350             //here convert json string to xml string
 
 351             String netowrkInputParameters = XML.toString(new JSONObject(customizeResourceParam(networkInputParametersJson)))
 
 352             // 1. prepare assign topology via SDNC Adapter SUBFLOW call
 
 353             String sdncTopologyCreateRequest = ""
 
 355             String modelType = resourceInputObj.getResourceModelInfo().getModelType()
 
 359                                         if(modelName.contains("UNI") && "MDONS_OTN".equals(serviceType)){
 
 361                                                 sdncTopologyCreateRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
 
 362                                                               xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
 
 363                                                               xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
 
 364                                  <sdncadapter:RequestHeader>
 
 365                                     <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
 
 366                                     <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
 
 367                                     <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
 
 368                                     <sdncadapter:SvcOperation>optical-service-create</sdncadapter:SvcOperation>
 
 369                                     <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
 
 370                                     <sdncadapter:MsoAction>opticalservice</sdncadapter:MsoAction>
 
 371                                  </sdncadapter:RequestHeader>
 
 372                                  <sdncadapterworkflow:SDNCRequestData>
 
 373                                     <request-id>${msoUtils.xmlEscape(serviceInstanceId)}</request-id>
 
 374                                     <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
 
 375                                     <service-type>${msoUtils.xmlEscape(serviceType)}</service-type>
 
 376                                     <notification-url>sdncCallback</notification-url>
 
 377                                     <source>${msoUtils.xmlEscape(source)}</source>
 
 378                                     <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
 
 380                                          $netowrkInputParameters
 
 382                                 </sdncadapterworkflow:SDNCRequestData>
 
 383                              </aetgt:SDNCAdapterWorkflowRequest>""".trim()
 
 385                     sdncTopologyCreateRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
 
 386                                                               xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
 
 387                                                               xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
 
 388                                  <sdncadapter:RequestHeader>
 
 389                                     <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
 
 390                                     <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
 
 391                                     <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
 
 392                                     <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation>
 
 393                                     <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
 
 394                                     <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
 
 395                                  </sdncadapter:RequestHeader>
 
 396                                  <sdncadapterworkflow:SDNCRequestData>
 
 397                                      <request-information>
 
 398                                         <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
 
 399                                         <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
 
 400                                         <source>${msoUtils.xmlEscape(source)}</source>
 
 401                                         <notification-url></notification-url>
 
 402                                         <order-number></order-number>
 
 403                                         <order-version></order-version>
 
 404                                      </request-information>
 
 405                                      <service-information>
 
 406                                         <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
 
 407                                         <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
 
 408                                         <onap-model-information>
 
 409                                              <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
 
 410                                              <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
 
 411                                              <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
 
 412                                              <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
 
 413                                         </onap-model-information>
 
 414                                         <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
 
 415                                         <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
 
 416                                         <subscriber-name>${msoUtils.xmlEscape(globalCustomerId)}</subscriber-name>
 
 417                                      </service-information>
 
 419                                         <vnf-type></vnf-type>
 
 420                                         <onap-model-information>
 
 421                                              <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
 
 422                                              <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
 
 423                                              <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
 
 424                                              <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
 
 425                                              <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
 
 426                                         </onap-model-information>
 
 429                                          <vnf-input-parameters>
 
 430                                            $netowrkInputParameters
 
 431                                          </vnf-input-parameters>
 
 432                                          <request-version></request-version>
 
 433                                          <vnf-name></vnf-name>
 
 437                                 </sdncadapterworkflow:SDNCRequestData>
 
 438                              </aetgt:SDNCAdapterWorkflowRequest>""".trim()
 
 442                     String vnfid = resourceInputObj.getVnfId()
 
 443                     ModelInfo vfModelInfo = resourceInputObj.getVfModelInfo()
 
 444                     String vnfmodelInvariantUuid = vfModelInfo.getModelInvariantUuid()
 
 445                     String vnfmodelCustomizationUuid = vfModelInfo.getModelCustomizationUuid()
 
 446                     String vnfmodelUuid = vfModelInfo.getModelUuid()
 
 447                     String vnfmodelVersion = vfModelInfo.getModelVersion()
 
 448                     String vnfmodelName = vfModelInfo.getModelName()
 
 449                     sdncTopologyCreateRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
 
 450                                                               xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
 
 451                                                               xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
 
 452                                  <sdncadapter:RequestHeader>
 
 453                                     <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
 
 454                                     <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
 
 455                                     <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
 
 456                                     <sdncadapter:SvcOperation>vf-module-topology-operation</sdncadapter:SvcOperation>
 
 457                                     <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
 
 458                                     <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
 
 459                                  </sdncadapter:RequestHeader>
 
 460                                  <sdncadapterworkflow:SDNCRequestData>
 
 461                                      <request-information>
 
 462                                         <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
 
 463                                         <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
 
 464                                         <source>${msoUtils.xmlEscape(source)}</source>
 
 465                                         <notification-url></notification-url>
 
 466                                         <order-number></order-number>
 
 467                                         <order-version></order-version>
 
 468                                      </request-information>
 
 469                                      <service-information>
 
 470                                         <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
 
 471                                         <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
 
 472                                         <onap-model-information>
 
 473                                              <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
 
 474                                              <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
 
 475                                              <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
 
 476                                              <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
 
 477                                         </onap-model-information>
 
 478                                         <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
 
 479                                         <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
 
 480                                         <subscriber-name>${msoUtils.xmlEscape(globalCustomerId)}</subscriber-name>
 
 481                                      </service-information>
 
 483                                         <onap-model-information>
 
 484                                              <model-invariant-uuid>${msoUtils.xmlEscape(vnfmodelInvariantUuid)}</model-invariant-uuid>
 
 485                                              <model-customization-uuid>${msoUtils.xmlEscape(vnfmodelCustomizationUuid)}</model-customization-uuid>
 
 486                                              <model-uuid>${msoUtils.xmlEscape(vnfmodelUuid)}</model-uuid>
 
 487                                              <model-version>${msoUtils.xmlEscape(vnfmodelVersion)}</model-version>
 
 488                                              <model-name>${msoUtils.xmlEscape(vnfmodelName)}</model-name>
 
 489                                         </onap-model-information>
 
 490                                         <vnf-id>${msoUtils.xmlEscape(vnfid)}</vnf-id>
 
 492                                      <vf-module-information>
 
 493                                         <from-preload>false</from-preload>
 
 494                                         <onap-model-information>
 
 495                                             <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
 
 496                                              <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
 
 497                                              <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
 
 498                                              <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
 
 499                                              <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
 
 500                                         </onap-model-information>
 
 501                                      </vf-module-information>
 
 502                                      <vf-module-request-input>
 
 503                                          <vf-module-input-parameters>
 
 504                                            $netowrkInputParameters
 
 505                                          </vf-module-input-parameters>
 
 506                                       </vf-module-request-input>
 
 507                                 </sdncadapterworkflow:SDNCRequestData>
 
 508                              </aetgt:SDNCAdapterWorkflowRequest>""".trim()
 
 511                 // sdwanvpnattachment or sotnvpnattachment
 
 512                 case "ALLOTTED_RESOURCE" :
 
 513                     sdncTopologyCreateRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
 
 514                                                               xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
 
 515                                                               xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
 
 516                                  <sdncadapter:RequestHeader>
 
 517                                     <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
 
 518                                     <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
 
 519                                     <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
 
 520                                     <sdncadapter:SvcOperation>connection-attachment-topology-operation</sdncadapter:SvcOperation>
 
 521                                     <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
 
 522                                     <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
 
 523                                  </sdncadapter:RequestHeader>
 
 524                                  <sdncadapterworkflow:SDNCRequestData>
 
 525                                      <request-information>
 
 526                                         <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
 
 527                                         <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
 
 528                                         <source>${msoUtils.xmlEscape(source)}</source>
 
 529                                         <notification-url></notification-url>
 
 530                                         <order-number></order-number>
 
 531                                         <order-version></order-version>
 
 532                                      </request-information>
 
 533                                      <service-information>
 
 534                                         <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
 
 535                                         <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
 
 536                                         <onap-model-information>
 
 537                                              <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
 
 538                                              <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
 
 539                                              <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
 
 540                                              <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
 
 541                                         </onap-model-information>
 
 542                                         <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
 
 543                                         <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
 
 544                                         <subscriber-name>${msoUtils.xmlEscape(globalCustomerId)}</subscriber-name>
 
 545                                      </service-information>
 
 546                                      <allotted-resource-information>
 
 547                                         <allotted-resource-id></allotted-resource-id>
 
 548                                         <allotted-resource-type></allotted-resource-type>
 
 549                                         <parent-service-instance-id>$parentServiceInstanceId</parent-service-instance-id>
 
 550                                         <onap-model-information>
 
 551                                              <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
 
 552                                              <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
 
 553                                              <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
 
 554                                              <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
 
 555                                              <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
 
 556                                         </onap-model-information>
 
 557                                      </allotted-resource-information>
 
 558                                      <connection-attachment-request-input>
 
 559                                        $netowrkInputParameters
 
 560                                      </connection-attachment-request-input>
 
 561                                 </sdncadapterworkflow:SDNCRequestData>
 
 562                              </aetgt:SDNCAdapterWorkflowRequest>""".trim()
 
 566                 // for SDWANConnectivity and SOTNConnectivity:
 
 568                     sdncTopologyCreateRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
 
 569                                                xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
 
 570                                                xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
 
 571                                   <sdncadapter:RequestHeader>
 
 572                                      <sdncadapter:RequestId>${hdrRequestId}</sdncadapter:RequestId>
 
 573                                      <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
 
 574                                      <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
 
 575                                      <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>
 
 576                                      <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
 
 577                                      <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
 
 578                                   </sdncadapter:RequestHeader>
 
 579                                   <sdncadapterworkflow:SDNCRequestData>
 
 580                                       <request-information>
 
 581                                          <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
 
 582                                          <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
 
 583                                          <source>${msoUtils.xmlEscape(source)}</source>
 
 584                                          <notification-url></notification-url>
 
 585                                          <order-number></order-number>
 
 586                                          <order-version></order-version>
 
 587                                       </request-information>
 
 588                                       <service-information>
 
 589                                          <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
 
 590                                          <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
 
 591                                          <onap-model-information>
 
 592                                               <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
 
 593                                               <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
 
 594                                               <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
 
 595                                               <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
 
 596                                          </onap-model-information>
 
 597                                          <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
 
 598                                          <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
 
 599                                       </service-information>
 
 600                                       <network-information>
 
 601                                          <onap-model-information>
 
 602                                               <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
 
 603                                               <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
 
 604                                               <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
 
 605                                               <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
 
 606                                               <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
 
 607                                          </onap-model-information>
 
 608                                       </network-information>
 
 609                                       <network-request-input>
 
 610                                         <network-input-parameters>$netowrkInputParameters</network-input-parameters>
 
 611                                       </network-request-input>
 
 612                                  </sdncadapterworkflow:SDNCRequestData>
 
 613                               </aetgt:SDNCAdapterWorkflowRequest>""".trim()
 
 618             String sndcTopologyCreateRequesAsString = utils.formatXml(sdncTopologyCreateRequest)
 
 619             execution.setVariable("sdncAdapterWorkflowRequest", sndcTopologyCreateRequesAsString)
 
 620             logger.debug("sdncAdapterWorkflowRequest - " + "\n" +  sndcTopologyCreateRequesAsString)
 
 622         } catch (Exception ex) {
 
 623             String exceptionMessage = " Bpmn error encountered in CreateSDNCCNetworkResource flow. prepareSDNCRequest() - " + ex.getMessage()
 
 624             logger.debug(exceptionMessage)
 
 625             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 628         logger.info(" ***** Exit prepareSDNCRequest *****")
 
 631     private void setProgressUpdateVariables(DelegateExecution execution, String body) {
 
 632         def dbAdapterEndpoint = UrnPropertiesReader.getVariable("mso.adapters.openecomp.db.endpoint", execution)
 
 633         execution.setVariable("CVFMI_dbAdapterEndpoint", dbAdapterEndpoint)
 
 634         execution.setVariable("CVFMI_updateResOperStatusRequest", body)
 
 637     public void prepareUpdateBeforeCreateSDNCResource(DelegateExecution execution) {
 
 638         ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(execution.getVariable(Prefix + "resourceInput"), ResourceInput.class)
 
 639         String operType = resourceInputObj.getOperationType()
 
 640         String resourceCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
 
 641         String ServiceInstanceId = resourceInputObj.getServiceInstanceId()
 
 642         String operationId = resourceInputObj.getOperationId()
 
 643         String progress = "20"
 
 644         String status = "processing"
 
 645         String statusDescription = "SDCN resource creation invoked"
 
 647         execution.getVariable("operationId")
 
 650                 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
 
 651                         xmlns:ns="http://org.onap.so/requestsdb">
 
 654                     <ns:updateResourceOperationStatus>
 
 655                                <operType>${msoUtils.xmlEscape(operType)}</operType>
 
 656                                <operationId>${msoUtils.xmlEscape(operationId)}</operationId>
 
 657                                <progress>${msoUtils.xmlEscape(progress)}</progress>
 
 658                                <resourceTemplateUUID>${msoUtils.xmlEscape(resourceCustomizationUuid)}</resourceTemplateUUID>
 
 659                                <serviceId>${msoUtils.xmlEscape(ServiceInstanceId)}</serviceId>
 
 660                                <status>${msoUtils.xmlEscape(status)}</status>
 
 661                                <statusDescription>${msoUtils.xmlEscape(statusDescription)}</statusDescription>
 
 662                     </ns:updateResourceOperationStatus>
 
 664                 </soapenv:Envelope>"""
 
 666         setProgressUpdateVariables(execution, body)
 
 670     public void prepareUpdateAfterCreateSDNCResource(execution) {
 
 671         ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(execution.getVariable(Prefix + "resourceInput"), ResourceInput.class)
 
 672         String operType = resourceInputObj.getOperationType()
 
 673         String resourceCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
 
 674         String ServiceInstanceId = resourceInputObj.getServiceInstanceId()
 
 675         String operationId = resourceInputObj.getOperationId()
 
 676         String progress = "100"
 
 677         String status = "finished"
 
 678         String statusDescription = "SDCN resource creation and activation completed"
 
 680         execution.getVariable("operationId")
 
 683                 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
 
 684                         xmlns:ns="http://org.onap.so/requestsdb">
 
 687                     <ns:updateResourceOperationStatus>
 
 688                                <operType>${msoUtils.xmlEscape(operType)}</operType>
 
 689                                <operationId>${msoUtils.xmlEscape(operationId)}</operationId>
 
 690                                <progress>${msoUtils.xmlEscape(progress)}</progress>
 
 691                                <resourceTemplateUUID>${msoUtils.xmlEscape(resourceCustomizationUuid)}</resourceTemplateUUID>
 
 692                                <serviceId>${msoUtils.xmlEscape(ServiceInstanceId)}</serviceId>
 
 693                                <status>${msoUtils.xmlEscape(status)}</status>
 
 694                                <statusDescription>${msoUtils.xmlEscape(statusDescription)}</statusDescription>
 
 695                     </ns:updateResourceOperationStatus>
 
 697                 </soapenv:Envelope>"""
 
 699         setProgressUpdateVariables(execution, body)
 
 702     public void afterCreateSDNCCall(DelegateExecution execution){
 
 703         logger.info(" ***** Started prepareSDNCRequest *****")
 
 704         String responseCode = execution.getVariable(Prefix + "sdncCreateReturnCode")
 
 705         String responseObj = execution.getVariable(Prefix + "SuccessIndicator")
 
 707         def instnaceId = getInstanceId(execution)
 
 708         execution.setVariable("resourceInstanceId", instnaceId)
 
 710         logger.info("response from sdnc, response code :" + responseCode + "  response object :" + responseObj)
 
 711         logger.info(" ***** Exit prepareSDNCRequest *****")
 
 714     private def getInstanceId(DelegateExecution execution) {
 
 715         def response  = new XmlSlurper().parseText(execution.getVariable("CRENWKI_createSDNCResponse"))
 
 717         ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(execution.getVariable(Prefix + "resourceInput"), ResourceInput.class)
 
 718         String modelName = resourceInputObj.getResourceModelInfo().getModelName()
 
 721         String modelType = resourceInputObj.getResourceModelInfo().getModelType()
 
 724                 val = response."response-data"."RequestData"."output"."vnf-response-information"."instance-id"
 
 727                 val = response."response-data"."RequestData"."output"."vf-module-response-information"."instance-id"
 
 729             case "ALLOTTED_RESOURCE":
 
 730                 // sdwanvpnattachment or sotnvpnattachment
 
 731                 val = response."response-data"."RequestData"."output"."connection-attachment-response-information"."instance-id"
 
 734                 // SDWANConnectivity or SOTN Connectivity
 
 735                 val = response."response-data"."RequestData"."output"."network-response-information"."instance-id"
 
 738         return val.toString()
 
 741     public void sendSyncResponse (DelegateExecution execution) {
 
 742         logger.debug(" *** sendSyncResponse *** ")
 
 745             String operationStatus = "finished"
 
 746             // RESTResponse for main flow
 
 747             String vnfid=execution.getVariable("resourceInstanceId")
 
 748             String resourceOperationResp = """{"operationStatus":"${operationStatus}","vnf-id":"${vnfid}"}""".trim()
 
 749             logger.debug(" sendSyncResponse to APIH:" + "\n" + resourceOperationResp)
 
 750             sendWorkflowResponse(execution, 202, resourceOperationResp)
 
 751             execution.setVariable("sentSyncResponse", true)
 
 753         } catch (Exception ex) {
 
 754             String msg = "Exception in sendSyncResponse:" + ex.getMessage()
 
 756             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 758         logger.debug(" ***** Exit sendSyncResponse *****")