4c4b63101f0a913873c61b72e62f9f9772295951
[so.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * OPENECOMP - SO
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
12  *
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  *
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=========================================================
21  */
22
23 package org.onap.so.bpmn.infrastructure.scripts
24
25 import com.google.gson.Gson
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
30 import org.json.XML
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.aai.domain.yang.v13.Pnf
36 import org.onap.aai.domain.yang.v13.Pnfs
37 import org.onap.so.bpmn.common.recipe.ResourceInput
38 import org.onap.so.bpmn.common.resource.ResourceRequestBuilder
39 import org.onap.so.bpmn.common.scripts.AaiUtil
40 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
41 import org.onap.so.bpmn.common.scripts.ExceptionUtil
42 import org.onap.so.bpmn.common.scripts.MsoUtils
43 import org.onap.so.bpmn.core.domain.ModelInfo
44 import org.onap.so.bpmn.core.domain.ResourceType
45 import org.onap.so.bpmn.core.json.JsonUtils
46 import org.onap.so.bpmn.core.UrnPropertiesReader
47 import org.onap.so.client.aai.AAIObjectPlurals
48 import org.onap.so.client.aai.AAIResourcesClient
49 import org.onap.so.client.aai.AAIObjectType
50 import org.onap.so.client.aai.entities.uri.AAIResourceUri
51 import org.onap.so.client.aai.entities.uri.AAIUriFactory
52 import org.slf4j.Logger
53 import org.slf4j.LoggerFactory
54
55 import static org.apache.commons.lang3.StringUtils.*
56
57 /**
58  * This groovy class supports the <class>CreateSDNCCNetworkResource.bpmn</class> process.
59  * flow for SDNC Network Resource Create
60  */
61 public class CreateSDNCNetworkResource extends AbstractServiceTaskProcessor {
62
63     private static final Logger logger = LoggerFactory.getLogger( CreateSDNCNetworkResource.class);
64     String Prefix="CRESDNCRES_"
65
66     ExceptionUtil exceptionUtil = new ExceptionUtil()
67
68     JsonUtils jsonUtil = new JsonUtils()
69
70     MsoUtils msoUtils = new MsoUtils()
71
72     public void preProcessRequest(DelegateExecution execution){
73
74         logger.info(" ***** Started preProcessRequest *****")
75         try {
76
77             //get bpmn inputs from resource request.
78             String requestId = execution.getVariable("mso-request-id")
79             String requestAction = execution.getVariable("requestAction")
80             logger.info("The requestAction is: " + requestAction)
81             String recipeParamsFromRequest = execution.getVariable("recipeParams")
82             logger.info("The recipeParams is: " + recipeParamsFromRequest)
83             String resourceInput = execution.getVariable("resourceInput")
84             logger.info("The resourceInput is: " + resourceInput)
85             //Get ResourceInput Object
86             ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class)
87             execution.setVariable(Prefix + "resourceInput", resourceInputObj.toString())
88
89             //Deal with recipeParams
90             String recipeParamsFromWf = execution.getVariable("recipeParamXsd")
91             String resourceName = resourceInputObj.getResourceInstanceName()
92
93             //For sdnc requestAction default is "createNetworkInstance"
94             String operationType = "Network"
95             if(!StringUtils.isBlank(recipeParamsFromRequest)){
96                 //the operationType from worflow(first node) is second priority.
97                 operationType = jsonUtil.getJsonValue(recipeParamsFromRequest, "operationType")
98             }
99             if(!StringUtils.isBlank(recipeParamsFromWf)){
100                 //the operationType from worflow(first node) is highest priority.
101                 operationType = jsonUtil.getJsonValue(recipeParamsFromWf, "operationType")
102             }
103
104             String sdnc_svcAction = "create"
105             String sdnc_requestAction = UrnPropertiesReader.getVariable("resource-config." + resourceInputObj.resourceModelInfo.getModelName() +".operation-type")
106             String isActivateRequired = UrnPropertiesReader.getVariable("resource-config." + resourceInputObj.resourceModelInfo.getModelName() +".activation-required")
107             execution.setVariable("isActivateRequired", isActivateRequired)
108
109             execution.setVariable(Prefix + "svcAction", sdnc_svcAction)
110             execution.setVariable(Prefix + "requestAction", sdnc_requestAction)
111             execution.setVariable(Prefix + "serviceInstanceId", resourceInputObj.getServiceInstanceId())
112             execution.setVariable("mso-request-id", requestId)
113             execution.setVariable("mso-service-instance-id", resourceInputObj.getServiceInstanceId())
114         } catch (BpmnError e) {
115             throw e
116         } catch (Exception ex){
117             msg = "Exception in preProcessRequest " + ex.getMessage()
118             logger.debug(msg)
119             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
120         }
121     }
122
123     String customizeResourceParam(String networkInputParametersJson) {
124         List<Map<String, Object>> paramList = new ArrayList();
125         JSONObject jsonObject = new JSONObject(networkInputParametersJson);
126         Iterator iterator = jsonObject.keys();
127         while (iterator.hasNext()) {
128             String key = iterator.next();
129             HashMap<String, String> hashMap = new HashMap();
130             hashMap.put("name", key);
131             hashMap.put("value", jsonObject.get(key))
132             paramList.add(hashMap)
133         }
134         Map<String, List<Map<String, Object>>> paramMap = new HashMap();
135         paramMap.put("param", paramList);
136
137         return  new JSONObject(paramMap).toString();
138     }
139
140     private List<Metadatum> getMetaDatum(String customerId,
141                                          String serviceType, String serId) {
142         logger.debug("Enter getPnfInstance")
143         AAIResourcesClient client = new AAIResourcesClient()
144
145         // think how AAI queried for PNF name using the name
146         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE_METADATA,
147                 customerId, serviceType, serId)
148         logger.debug("uri for pnf get:" + uri.toString())
149
150         Metadata metadata = client.get(uri).asBean(Metadata.class).get()
151         return metadata.getMetadatum()
152     }
153
154     /**
155      * This method updates the resource input by collecting required info from AAI
156      * @param execution
157      */
158     public ResourceInput updateResourceInput(DelegateExecution execution) {
159         ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(execution.getVariable(Prefix + "resourceInput"), ResourceInput.class)
160         String modelName = resourceInputObj.getResourceModelInfo().getModelName()
161
162
163         def resourceInputTmp = execution.getVariable(Prefix + "resourceInput")
164         String serInput = jsonUtil.getJsonValue(resourceInputTmp, "requestsInputs")
165
166         switch (modelName) {
167             case ~/[\w\s\W]*OLT[\w\s\W]*/ :
168                 // get the required properties and update in resource input
169
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
175                 String svlan
176                 String remoteId
177
178                 List<Metadatum> metadatum = getMetaDatum(resourceInputObj.getGlobalSubscriberId(),
179                         resourceInputObj.getServiceType(),
180                         resourceInputObj.getServiceInstanceId())
181                 for(Metadatum datum: metadatum) {
182                     if (datum.getMetaname().equalsIgnoreCase("cvlan")) {
183                         cvlan = datum.getMetaval()
184                     }
185
186                     if (datum.getMetaname().equalsIgnoreCase("svlan")) {
187                         svlan = datum.getMetaval()
188                     }
189
190                     if (datum.getMetaname().equalsIgnoreCase("remoteId")) {
191                         remoteId = datum.getMetaval()
192                     }
193                 }
194
195                 logger.debug("cvlan: "+cvlan+" | svlan: "+svlan+" | remoteId: "+remoteId)
196
197                 String manufacturer = jsonUtil.getJsonValue(serInput,
198                         "service.parameters.requestInputs.ont_ont_manufacturer")
199                 String ontsn = jsonUtil.getJsonValue(serInput,
200                         "service.parameters.requestInputs.ont_ont_serial_num")
201
202                 String uResourceInput = jsonUtil.addJsonValue(resourceInput, "requestInputs.CVLAN", cvlan)
203                 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.SVLAN", svlan)
204                 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.accessID", remoteId)
205                 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.manufacturer", manufacturer)
206                 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.ONTSN", ontsn)
207
208                 logger.debug("old resource input:" + resourceInputObj.toString())
209                 resourceInputObj.setResourceParameters(uResourceInput)
210                 execution.setVariable(Prefix + "resourceInput", resourceInputObj.toString())
211                 logger.debug("new resource Input :" + resourceInputObj.toString())
212                 break
213
214             case ~/[\w\s\W]*EdgeInternetProfile[\w\s\W]*/ :
215                 // get the required properties and update in resource input
216                 def resourceInput = resourceInputObj.getResourceParameters()
217                 String incomingRequest = resourceInputObj.getRequestsInputs()
218                 String serviceParameters = JsonUtils.getJsonValue(incomingRequest, "service.parameters")
219                 String requestInputs = JsonUtils.getJsonValue(serviceParameters, "requestInputs")
220                 JSONObject inputParameters = new JSONObject(requestInputs)
221
222                 String cvlan
223                 String svlan
224                 String remoteId
225                 String manufacturer = jsonUtil.getJsonValue(serInput,
226                         "service.parameters.requestInputs.ont_ont_manufacturer")
227
228                 String ontsn = jsonUtil.getJsonValue(serInput,
229                         "service.parameters.requestInputs.ont_ont_serial_num")
230
231                 List<Metadatum> metadatum = getMetaDatum(resourceInputObj.getGlobalSubscriberId(),
232                         resourceInputObj.getServiceType(),
233                         resourceInputObj.getServiceInstanceId())
234                 for(Metadatum datum: metadatum) {
235                     if (datum.getMetaname().equalsIgnoreCase("cvlan")) {
236                         cvlan = datum.getMetaval()
237                     }
238
239                     if (datum.getMetaname().equalsIgnoreCase("svlan")) {
240                         svlan = datum.getMetaval()
241                     }
242
243                     if (datum.getMetaname().equalsIgnoreCase("remoteId")) {
244                         remoteId = datum.getMetaval()
245                     }
246                 }
247
248                 String uResourceInput = jsonUtil.addJsonValue(resourceInput, "requestInputs.c_vlan", cvlan)
249                 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.s_vlan", svlan)
250                 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.manufacturer", manufacturer)
251                 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.ip_access_id", remoteId)
252                 uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.ont_sn", ontsn)
253                 logger.debug("old resource input:" + resourceInputObj.toString())
254                 resourceInputObj.setResourceParameters(uResourceInput)
255                 execution.setVariable(Prefix + "resourceInput", resourceInputObj.toString())
256                 logger.debug("new resource Input :" + resourceInputObj.toString())
257                 break
258
259
260             case ~/[\w\s\W]*SOTNConnectivity[\w\s\W]*/:
261
262                 def resourceInput = resourceInputObj.getResourceParameters()
263                 String incomingRequest = resourceInputObj.getRequestsInputs()
264                 String serviceParameters = JsonUtils.getJsonValue(incomingRequest, "service.parameters")
265                 String requestInputs = JsonUtils.getJsonValue(serviceParameters, "requestInputs")
266                 JSONObject inputParameters = new JSONObject(requestInputs)
267                 if(inputParameters.has("local-access-provider-id")) {
268                     String uResourceInput = jsonUtil.addJsonValue(resourceInput, "requestInputs.access-provider-id", inputParameters.get("local-access-provider-id"))
269                     uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.access-client-id", inputParameters.get("local-access-client-id"))
270                     uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.access-topology-id", inputParameters.get("local-access-topology-id"))
271                     uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.access-ltp-id", inputParameters.get("local-access-ltp-id"))
272                     uResourceInput = jsonUtil.addJsonValue(uResourceInput, "requestInputs.access-node-id", inputParameters.get("local-access-node-id"))
273                     resourceInputObj.setResourceParameters(uResourceInput)
274                     execution.setVariable(Prefix + "resourceInput", resourceInputObj.toString())
275                 }
276
277                 break
278
279             case ~/[\w\s\W]*sdwanvpnattachment[\w\s\W]*/ :
280             case ~/[\w\s\W]*sotnvpnattachment[\w\s\W]*/ :
281                 // fill attachment TP in networkInputParamJson
282                 String customer = resourceInputObj.getGlobalSubscriberId()
283                 String serviceType = resourceInputObj.getServiceType()
284
285                 def vpnName = StringUtils.containsIgnoreCase(modelName, "sotnvpnattachment") ? "sotnvpnattachmentvf_sotncondition_sotnVpnName" : "sdwanvpnattachmentvf_sdwancondition_sdwanVpnName"
286                 String parentServiceName = jsonUtil.getJsonValueForKey(resourceInputObj.getRequestsInputs(), vpnName)
287
288                 AAIResourcesClient client = new AAIResourcesClient()
289                 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.SERVICE_INSTANCE, customer, serviceType).queryParam("service-instance-name", parentServiceName)
290                 ServiceInstances sis = client.get(uri).asBean(ServiceInstances.class).get()
291                 ServiceInstance si = sis.getServiceInstance().get(0)
292
293                 def parentServiceInstanceId = si.getServiceInstanceId()
294                 execution.setVariable("parentServiceInstanceId", parentServiceInstanceId)
295
296                 break
297             default:
298                 break
299         }
300         return resourceInputObj
301     }
302
303     /**
304      * Pre Process the BPMN Flow Request
305      * Includes:
306      * generate the nsOperationKey
307      * generate the nsParameters
308      */
309     public void prepareSDNCRequest (DelegateExecution execution) {
310         logger.info(" ***** Started prepareSDNCRequest *****")
311
312         try {
313             // get variables
314             String sdnc_svcAction = execution.getVariable(Prefix + "svcAction")
315             String sdnc_requestAction = execution.getVariable(Prefix + "requestAction")
316             String sdncCallback = execution.getVariable("URN_mso_workflow_sdncadapter_callback")
317             String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
318
319             String parentServiceInstanceId = execution.getVariable("parentServiceInstanceId")
320             String hdrRequestId = execution.getVariable("mso-request-id")
321             String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
322             String source = execution.getVariable("source")
323             String sdnc_service_id = execution.getVariable(Prefix + "sdncServiceId")
324             ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(execution.getVariable(Prefix + "resourceInput"), ResourceInput.class)
325             String serviceType = resourceInputObj.getServiceType()
326             String serviceModelInvariantUuid = resourceInputObj.getServiceModelInfo().getModelInvariantUuid()
327             String serviceModelUuid = resourceInputObj.getServiceModelInfo().getModelUuid()
328             String serviceModelVersion = resourceInputObj.getServiceModelInfo().getModelVersion()
329             String serviceModelName = resourceInputObj.getServiceModelInfo().getModelName()
330             String globalCustomerId = resourceInputObj.getGlobalSubscriberId()
331             String modelInvariantUuid = resourceInputObj.getResourceModelInfo().getModelInvariantUuid();
332             String modelCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
333             String modelUuid = resourceInputObj.getResourceModelInfo().getModelUuid()
334             String modelName = resourceInputObj.getResourceModelInfo().getModelName()
335             String modelVersion = resourceInputObj.getResourceModelInfo().getModelVersion()
336             String resourceInputPrameters = resourceInputObj.getResourceParameters()
337             String networkInputParametersJson = jsonUtil.getJsonValue(resourceInputPrameters, "requestInputs")
338             //here convert json string to xml string
339             String netowrkInputParameters = XML.toString(new JSONObject(customizeResourceParam(networkInputParametersJson)))
340             // 1. prepare assign topology via SDNC Adapter SUBFLOW call
341             String sdncTopologyCreateRequest = "";
342
343
344
345             //When a new resource creation request reaches SO, the parent resources information needs to be provided
346             //while creating the child resource.
347             String vnfid = ""
348             String vnfmodelInvariantUuid = ""
349             String vnfmodelCustomizationUuid = ""
350             String vnfmodelUuid = ""
351             String vnfmodelVersion = ""
352             String vnfmodelName = ""
353             String modelType = resourceInputObj.getResourceModelInfo().getModelType()
354             if(modelType.equalsIgnoreCase(ResourceType.GROUP.toString())) {
355                 vnfid = resourceInputObj.getVnfId();
356                 ModelInfo vfModelInfo = resourceInputObj.getVfModelInfo()
357                 vnfmodelInvariantUuid = vfModelInfo.getModelInvariantUuid()
358                 vnfmodelCustomizationUuid = vfModelInfo.getModelCustomizationUuid()
359                 vnfmodelUuid = vfModelInfo.getModelUuid()
360                 vnfmodelVersion = vfModelInfo.getModelVersion()
361                 vnfmodelName = vfModelInfo.getModelName()
362             }
363
364             switch (modelType) {
365                 case "VNF" :
366                     sdncTopologyCreateRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
367                                                               xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
368                                                               xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
369                                  <sdncadapter:RequestHeader>
370                                     <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
371                                     <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
372                                     <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
373                                     <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation>
374                                     <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
375                                     <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
376                                  </sdncadapter:RequestHeader>
377                                  <sdncadapterworkflow:SDNCRequestData>
378                                      <request-information>
379                                         <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
380                                         <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
381                                         <source>${msoUtils.xmlEscape(source)}</source>
382                                         <notification-url></notification-url>
383                                         <order-number></order-number>
384                                         <order-version></order-version>
385                                      </request-information>
386                                      <service-information>
387                                         <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
388                                         <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
389                                         <onap-model-information>
390                                              <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
391                                              <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
392                                              <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
393                                              <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
394                                         </onap-model-information>
395                                         <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
396                                         <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
397                                         <subscriber-name>${msoUtils.xmlEscape(globalCustomerId)}</subscriber-name>
398                                      </service-information>
399                                      <vnf-information>
400                                         <vnf-id>${msoUtils.xmlEscape(vnfid)}</vnf-id>
401                                         <vnf-type></vnf-type>
402                                         <onap-model-information>
403                                              <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
404                                              <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
405                                              <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
406                                              <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
407                                              <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
408                                         </onap-model-information>
409                                      </vnf-information>
410                                      <vnf-request-input>
411                                          <vnf-input-parameters>
412                                            $netowrkInputParameters
413                                          </vnf-input-parameters>
414                                          <request-version></request-version>
415                                          <vnf-name></vnf-name>
416                                          <vnf-networks>
417                                         </vnf-networks>
418                                       </vnf-request-input>
419                                 </sdncadapterworkflow:SDNCRequestData>
420                              </aetgt:SDNCAdapterWorkflowRequest>""".trim()
421                     break
422                 case "GROUP" :
423                     sdncTopologyCreateRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
424                                                               xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
425                                                               xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
426                                  <sdncadapter:RequestHeader>
427                                     <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
428                                     <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
429                                     <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
430                                     <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>
431                                     <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
432                                     <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
433                                  </sdncadapter:RequestHeader>
434                                  <sdncadapterworkflow:SDNCRequestData>
435                                      <request-information>
436                                         <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
437                                         <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
438                                         <source>${msoUtils.xmlEscape(source)}</source>
439                                         <notification-url></notification-url>
440                                         <order-number></order-number>
441                                         <order-version></order-version>
442                                      </request-information>
443                                      <service-information>
444                                         <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
445                                         <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
446                                         <onap-model-information>
447                                              <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
448                                              <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
449                                              <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
450                                              <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
451                                         </onap-model-information>
452                                         <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
453                                         <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
454                                         <subscriber-name>${msoUtils.xmlEscape(globalCustomerId)}</subscriber-name>
455                                      </service-information>
456                                      <vnf-information>
457                                              <model-invariant-uuid>${msoUtils.xmlEscape(vnfmodelInvariantUuid)}</model-invariant-uuid>
458                                              <model-customization-uuid>${msoUtils.xmlEscape(vnfmodelCustomizationUuid)}</model-customization-uuid>
459                                              <model-uuid>${msoUtils.xmlEscape(vnfmodelUuid)}</model-uuid>
460                                              <model-version>${msoUtils.xmlEscape(vnfmodelVersion)}</model-version>
461                                              <model-name>${msoUtils.xmlEscape(vnfmodelName)}</model-name>
462                                      </vnf-information>
463                                      <vnf-request-input>
464                                          <vnf-input-parameters>
465                                            $netowrkInputParameters
466                                          </vnf-input-parameters>
467                                          <request-version></request-version>
468                                          <vnf-name></vnf-name>
469                                          <vnf-networks>
470                                         </vnf-networks>
471                                       </vnf-request-input>
472                                      <connection-attachment-request-input>
473                                        $netowrkInputParameters
474                                      </connection-attachment-request-input>
475                                 </sdncadapterworkflow:SDNCRequestData>
476                              </aetgt:SDNCAdapterWorkflowRequest>""".trim()
477                     break
478
479             // for SDWANConnectivity and SOTNConnectivity:
480                 default:
481                     sdncTopologyCreateRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
482                                                xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
483                                                xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
484                                   <sdncadapter:RequestHeader>
485                                      <sdncadapter:RequestId>${hdrRequestId}</sdncadapter:RequestId>
486                                      <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
487                                      <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
488                                      <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>
489                                      <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
490                                      <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
491                                   </sdncadapter:RequestHeader>
492                                   <sdncadapterworkflow:SDNCRequestData>
493                                       <request-information>
494                                          <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
495                                          <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
496                                          <source>${msoUtils.xmlEscape(source)}</source>
497                                          <notification-url></notification-url>
498                                          <order-number></order-number>
499                                          <order-version></order-version>
500                                       </request-information>
501                                       <service-information>
502                                          <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
503                                          <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
504                                          <onap-model-information>
505                                               <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
506                                               <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
507                                               <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
508                                               <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
509                                          </onap-model-information>
510                                          <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
511                                          <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
512                                       </service-information>
513                                       <network-information>
514                                          <onap-model-information>
515                                               <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
516                                               <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
517                                               <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
518                                               <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
519                                               <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
520                                          </onap-model-information>
521                                       </network-information>
522                                       <network-request-input>
523                                         <network-input-parameters>$netowrkInputParameters</network-input-parameters>
524                                       </network-request-input>
525                                  </sdncadapterworkflow:SDNCRequestData>
526                               </aetgt:SDNCAdapterWorkflowRequest>""".trim()
527
528
529             }
530
531
532
533
534             //switch (modelName) {
535             //    case ~/[\w\s\W]*deviceVF[\w\s\W]*/
536             //    case ~/[\w\s\W]*SiteWANVF[\w\s\W]*/ :
537             //    case ~/[\w\s\W]*SiteVF[\w\s\W]*/:
538             /*        sdncTopologyCreateRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
539                                                               xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
540                                                               xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
541                                  <sdncadapter:RequestHeader>
542                                     <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
543                                     <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
544                                     <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
545                                     <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation>
546                                     <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
547                                     <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
548                                  </sdncadapter:RequestHeader>
549                                  <sdncadapterworkflow:SDNCRequestData>
550                                      <request-information>
551                                         <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
552                                         <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
553                                         <source>${msoUtils.xmlEscape(source)}</source>
554                                         <notification-url></notification-url>
555                                         <order-number></order-number>
556                                         <order-version></order-version>
557                                      </request-information>
558                                      <service-information>
559                                         <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
560                                         <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
561                                         <onap-model-information>
562                                              <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
563                                              <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
564                                              <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
565                                              <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
566                                         </onap-model-information>
567                                         <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
568                                         <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
569                                         <subscriber-name>${msoUtils.xmlEscape(globalCustomerId)}</subscriber-name>
570                                      </service-information>
571                                      <vnf-information>
572                                         <vnf-id></vnf-id>
573                                         <vnf-type></vnf-type>
574                                         <onap-model-information>
575                                              <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
576                                              <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
577                                              <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
578                                              <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
579                                              <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
580                                         </onap-model-information>
581                                      </vnf-information>
582                                      <vnf-request-input>
583                                          <vnf-input-parameters>
584                                            $netowrkInputParameters
585                                          </vnf-input-parameters>
586                                          <request-version></request-version>
587                                          <vnf-name></vnf-name>
588                                          <vnf-networks>
589                                         </vnf-networks>
590                                       </vnf-request-input>
591                                 </sdncadapterworkflow:SDNCRequestData>
592                              </aetgt:SDNCAdapterWorkflowRequest>""".trim()
593
594
595                     break
596
597                 //case ~/[\w\s\W]*sdwanvpnattachment[\w\s\W]*/
598             //case ~/[\w\s\W]*sotnvpnattachment[\w\s\W]*/ :
599             /*    sdncTopologyCreateRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
600                                                           xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
601                                                           xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
602                              <sdncadapter:RequestHeader>
603                                 <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
604                                 <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
605                                 <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
606                                 <sdncadapter:SvcOperation>connection-attachment-topology-operation</sdncadapter:SvcOperation>
607                                 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
608                                 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
609                              </sdncadapter:RequestHeader>
610                              <sdncadapterworkflow:SDNCRequestData>
611                                  <request-information>
612                                     <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
613                                     <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
614                                     <source>${msoUtils.xmlEscape(source)}</source>
615                                     <notification-url></notification-url>
616                                     <order-number></order-number>
617                                     <order-version></order-version>
618                                  </request-information>
619                                  <service-information>
620                                     <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
621                                     <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
622                                     <onap-model-information>
623                                          <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
624                                          <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
625                                          <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
626                                          <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
627                                     </onap-model-information>
628                                     <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
629                                     <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
630                                     <subscriber-name>${msoUtils.xmlEscape(globalCustomerId)}</subscriber-name>
631                                  </service-information><vnf-information>
632                                     <vnf-id></vnf-id>
633                                     <vnf-type></vnf-type>
634                                     <onap-model-information>
635                                          <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
636                                          <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
637                                          <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
638                                          <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
639                                          <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
640                                     </onap-model-information>
641                                  </vnf-information>
642                                  <vnf-request-input>
643                                      <vnf-input-parameters>
644                                        $netowrkInputParameters
645                                      </vnf-input-parameters>
646                                      <request-version></request-version>
647                                      <vnf-name></vnf-name>
648                                      <vnf-networks>
649                                     </vnf-networks>
650                                   </vnf-request-input>
651                                  <allotted-resource-information>
652                                     <!-- TODO: to be filled as per the request input -->
653                                     <allotted-resource-id></allotted-resource-id>
654                                     <allotted-resource-type></allotted-resource-type>
655                                     <parent-service-instance-id>$parentServiceInstanceId</parent-service-instance-id>
656                                     <onap-model-information>
657                                          <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
658                                          <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
659                                          <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
660                                          <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
661                                          <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
662                                     </onap-model-information>
663                                  </allotted-resource-information>
664                                  <connection-attachment-request-input>
665                                    $netowrkInputParameters
666                                  </connection-attachment-request-input>
667                             </sdncadapterworkflow:SDNCRequestData>
668                          </aetgt:SDNCAdapterWorkflowRequest>""".trim()
669                 break
670
671             // for SDWANConnectivity and SOTNConnectivity:
672             default:
673                 sdncTopologyCreateRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
674                                                           xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
675                                                           xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
676                              <sdncadapter:RequestHeader>
677                                 <sdncadapter:RequestId>${hdrRequestId}</sdncadapter:RequestId>
678                                 <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
679                                 <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
680                                 <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>
681                                 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
682                                 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
683                              </sdncadapter:RequestHeader>
684                              <sdncadapterworkflow:SDNCRequestData>
685                                  <request-information>
686                                     <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
687                                     <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
688                                     <source>${msoUtils.xmlEscape(source)}</source>
689                                     <notification-url></notification-url>
690                                     <order-number></order-number>
691                                     <order-version></order-version>
692                                  </request-information>
693                                  <service-information>
694                                     <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
695                                     <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
696                                     <onap-model-information>
697                                          <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
698                                          <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
699                                          <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
700                                          <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
701                                     </onap-model-information>
702                                     <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
703                                     <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
704                                  </service-information>
705                                  <network-information>
706                                     <onap-model-information>
707                                          <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
708                                          <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
709                                          <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
710                                          <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
711                                          <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
712                                     </onap-model-information>
713                                  </network-information>
714                                  <network-request-input>
715                                    <network-input-parameters>$netowrkInputParameters</network-input-parameters>
716                                  </network-request-input>
717                             </sdncadapterworkflow:SDNCRequestData>
718                          </aetgt:SDNCAdapterWorkflowRequest>""".trim()
719         }
720
721         **/
722
723             String sndcTopologyCreateRequesAsString = utils.formatXml(sdncTopologyCreateRequest)
724             execution.setVariable("sdncAdapterWorkflowRequest", sndcTopologyCreateRequesAsString)
725             logger.debug("sdncAdapterWorkflowRequest - " + "\n" +  sndcTopologyCreateRequesAsString)
726
727         } catch (Exception ex) {
728             String exceptionMessage = " Bpmn error encountered in CreateSDNCCNetworkResource flow. prepareSDNCRequest() - " + ex.getMessage()
729             logger.debug(exceptionMessage)
730             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
731
732         }
733         logger.info(" ***** Exit prepareSDNCRequest *****")
734     }
735
736     private void setProgressUpdateVariables(DelegateExecution execution, String body) {
737         def dbAdapterEndpoint = UrnPropertiesReader.getVariable("mso.adapters.openecomp.db.endpoint", execution)
738         execution.setVariable("CVFMI_dbAdapterEndpoint", dbAdapterEndpoint)
739         execution.setVariable("CVFMI_updateResOperStatusRequest", body)
740     }
741
742     public void prepareUpdateBeforeCreateSDNCResource(DelegateExecution execution) {
743         ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(execution.getVariable(Prefix + "resourceInput"), ResourceInput.class)
744         String operType = resourceInputObj.getOperationType()
745         String resourceCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
746         String ServiceInstanceId = resourceInputObj.getServiceInstanceId()
747         String operationId = resourceInputObj.getOperationId()
748         String progress = "20"
749         String status = "processing"
750         String statusDescription = "SDCN resource creation invoked"
751
752         execution.getVariable("operationId")
753
754         String body = """
755                 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
756                         xmlns:ns="http://org.onap.so/requestsdb">
757                         <soapenv:Header/>
758                 <soapenv:Body>
759                     <ns:updateResourceOperationStatus>
760                                <operType>${msoUtils.xmlEscape(operType)}</operType>
761                                <operationId>${msoUtils.xmlEscape(operationId)}</operationId>
762                                <progress>${msoUtils.xmlEscape(progress)}</progress>
763                                <resourceTemplateUUID>${msoUtils.xmlEscape(resourceCustomizationUuid)}</resourceTemplateUUID>
764                                <serviceId>${msoUtils.xmlEscape(ServiceInstanceId)}</serviceId>
765                                <status>${msoUtils.xmlEscape(status)}</status>
766                                <statusDescription>${msoUtils.xmlEscape(statusDescription)}</statusDescription>
767                     </ns:updateResourceOperationStatus>
768                 </soapenv:Body>
769                 </soapenv:Envelope>""";
770
771         setProgressUpdateVariables(execution, body)
772
773     }
774
775     public void prepareUpdateAfterCreateSDNCResource(execution) {
776         ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(execution.getVariable(Prefix + "resourceInput"), ResourceInput.class)
777         String operType = resourceInputObj.getOperationType()
778         String resourceCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
779         String ServiceInstanceId = resourceInputObj.getServiceInstanceId()
780         String operationId = resourceInputObj.getOperationId()
781         String progress = "100"
782         String status = "finished"
783         String statusDescription = "SDCN resource creation and activation completed"
784
785         execution.getVariable("operationId")
786
787         String body = """
788                 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
789                         xmlns:ns="http://org.onap.so/requestsdb">
790                         <soapenv:Header/>
791                 <soapenv:Body>
792                     <ns:updateResourceOperationStatus>
793                                <operType>${msoUtils.xmlEscape(operType)}</operType>
794                                <operationId>${msoUtils.xmlEscape(operationId)}</operationId>
795                                <progress>${msoUtils.xmlEscape(progress)}</progress>
796                                <resourceTemplateUUID>${msoUtils.xmlEscape(resourceCustomizationUuid)}</resourceTemplateUUID>
797                                <serviceId>${msoUtils.xmlEscape(ServiceInstanceId)}</serviceId>
798                                <status>${msoUtils.xmlEscape(status)}</status>
799                                <statusDescription>${msoUtils.xmlEscape(statusDescription)}</statusDescription>
800                     </ns:updateResourceOperationStatus>
801                 </soapenv:Body>
802                 </soapenv:Envelope>""";
803
804         setProgressUpdateVariables(execution, body)
805     }
806
807     public void afterCreateSDNCCall(DelegateExecution execution){
808         logger.info(" ***** Started prepareSDNCRequest *****")
809         String responseCode = execution.getVariable(Prefix + "sdncCreateReturnCode")
810         String responseObj = execution.getVariable(Prefix + "SuccessIndicator")
811
812         def instnaceId = getInstnaceId(execution)
813         execution.setVariable("resourceInstanceId", instnaceId)
814
815         logger.info("response from sdnc, response code :" + responseCode + "  response object :" + responseObj)
816         logger.info(" ***** Exit prepareSDNCRequest *****")
817     }
818
819     private def getInstnaceId(DelegateExecution execution) {
820         def response  = new XmlSlurper().parseText(execution.getVariable("CRENWKI_createSDNCResponse"))
821
822         ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(execution.getVariable(Prefix + "resourceInput"), ResourceInput.class)
823         String modelName = resourceInputObj.getResourceModelInfo().getModelName()
824         def val = ""
825
826
827         //switch (modelName) {
828         //    case ~/[\w\s\W]*deviceVF[\w\s\W]*/ :
829         //    case ~/[\w\s\W]*SiteWANVF[\w\s\W]*/ :
830         //    case ~/[\w\s\W]*Site[\w\s\W]*/:
831         //        val = response."response-data"."RequestData"."output"."vnf-response-information"."instance-id"
832         //          break
833
834         //    case ~/[\w\s\W]*sdwanvpnattachment[\w\s\W]*/ :
835         //   case ~/[\w\s\W]*sotnvpprepareUpdateAfterCreateSDNCResourcenattachment[\w\s\W]*/:
836         //        val = response."response-data"."RequestData"."output"."connection-attachment-response-information"."instance-id"
837         //        break
838
839         // for SDWANConnectivity and SOTNConnectivity and default:
840         //    default:
841         //        val = response."response-data"."RequestData"."output"."network-response-information"."instance-id"
842         //        break
843         //}
844
845
846         String modelType = resourceInputObj.getResourceModelInfo().getModelType()
847         switch (modelType) {
848             case "VNF" :
849                 val = response."response-data"."RequestData"."output"."vnf-response-information"."instance-id"
850                 break
851             case "GROUP":
852                 val = response."response-data"."RequestData"."output"."vf-module-response-information"."instance-id"
853                 break
854             default:
855                 val = response."response-data"."RequestData"."output"."network-response-information"."instance-id"
856                 break
857         }
858         return val.toString()
859     }
860
861     public void sendSyncResponse (DelegateExecution execution) {
862         logger.debug(" *** sendSyncResponse *** ")
863
864         try {
865             String operationStatus = "finished"
866             // RESTResponse for main flow
867             String vnfid=execution.getVariable("resourceInstanceId");
868             String resourceOperationResp = """{"operationStatus":"${operationStatus}","vnf-id":"${vnfid}"}""".trim()
869             logger.debug(" sendSyncResponse to APIH:" + "\n" + resourceOperationResp)
870             sendWorkflowResponse(execution, 202, resourceOperationResp)
871             execution.setVariable("sentSyncResponse", true)
872
873         } catch (Exception ex) {
874             String msg = "Exception in sendSyncResponse:" + ex.getMessage()
875             logger.debug(msg)
876             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
877         }
878         logger.debug(" ***** Exit sendSyncResponse *****")
879     }
880 }