22c8a11faeea7cb6b1b4e2a1008cc8ae1a812a41
[so.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Modifications Copyright (c) 2019 Samsung
8  * ================================================================================
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
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 javax.ws.rs.core.UriBuilder
26 import javax.xml.parsers.DocumentBuilder
27 import javax.xml.parsers.DocumentBuilderFactory
28 import org.apache.commons.lang3.*
29 import org.camunda.bpm.engine.delegate.BpmnError
30 import org.camunda.bpm.engine.delegate.DelegateExecution
31 import org.onap.so.bpmn.common.scripts.AaiUtil
32 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
33 import org.onap.so.bpmn.common.scripts.ExceptionUtil
34 import org.onap.so.bpmn.common.scripts.MsoUtils
35 import org.onap.so.bpmn.common.scripts.NetworkUtils
36 import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
37 import org.onap.so.bpmn.common.scripts.VidUtils
38 import org.onap.so.bpmn.core.UrnPropertiesReader
39 import org.onap.so.bpmn.core.WorkflowException
40 import org.onap.so.bpmn.core.json.JsonUtils
41 import org.onap.so.client.aai.AAIObjectPlurals
42 import org.onap.so.client.aai.AAIObjectType
43 import org.onap.so.client.aai.AAIResourcesClient
44 import org.onap.so.client.aai.entities.uri.AAIResourceUri
45 import org.onap.so.client.aai.entities.uri.AAIUriFactory
46 import org.onap.so.client.aai.entities.AAIResultWrapper
47 import org.onap.so.client.aai.entities.Relationships
48 import org.onap.so.client.graphinventory.entities.uri.Depth
49 import org.onap.so.constants.Defaults
50 import org.slf4j.Logger
51 import org.slf4j.LoggerFactory
52 import org.springframework.web.util.UriUtils
53 import org.w3c.dom.Document
54 import org.w3c.dom.Element
55 import org.w3c.dom.NamedNodeMap
56 import org.w3c.dom.Node
57 import org.w3c.dom.NodeList;
58 import org.xml.sax.InputSource
59 import org.onap.aai.domain.yang.VpnBinding
60 import org.onap.aai.domain.yang.L3Network
61 import org.onap.aai.domain.yang.L3Networks
62 import org.onap.aai.domain.yang.NetworkPolicy
63 import org.onap.aai.domain.yang.RouteTableReference
64 import org.onap.aai.domain.yang.RouteTarget
65 import org.onap.aai.domain.yang.Subnet
66 import com.fasterxml.jackson.jaxrs.util.EndpointAsBeanProperty
67
68 import javax.ws.rs.NotFoundException
69
70 import groovy.json.*
71 import groovy.xml.XmlUtil
72
73 /**
74  * This groovy class supports the <class>DoCreateNetworkInstance.bpmn</class> process.
75  *
76  */
77 public class DoCreateNetworkInstance extends AbstractServiceTaskProcessor {
78     private static final Logger logger = LoggerFactory.getLogger( DoCreateNetworkInstance.class);
79
80         String Prefix="CRENWKI_"
81         ExceptionUtil exceptionUtil = new ExceptionUtil()
82         JsonUtils jsonUtil = new JsonUtils()
83         VidUtils vidUtils = new VidUtils(this)
84         NetworkUtils networkUtils = new NetworkUtils()
85         SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
86
87         def className = getClass().getSimpleName()
88
89         /**
90          * This method is executed during the preProcessRequest task of the <class>DoCreateNetworkInstance.bpmn</class> process.
91          * @param execution
92          */
93         public InitializeProcessVariables(DelegateExecution execution){
94                 /* Initialize all the process variables in this block */
95
96                 execution.setVariable(Prefix + "networkRequest", "")
97                 execution.setVariable(Prefix + "rollbackEnabled", null)
98                 execution.setVariable(Prefix + "networkInputs", "")
99                 //execution.setVariable(Prefix + "requestId", "")
100                 execution.setVariable(Prefix + "messageId", "")
101                 execution.setVariable(Prefix + "source", "")
102                 execution.setVariable("BasicAuthHeaderValuePO", "")
103                 execution.setVariable("BasicAuthHeaderValueSDNC", "")
104                 execution.setVariable(Prefix + "serviceInstanceId","")
105                 execution.setVariable("GENGS_type", "")
106                 execution.setVariable(Prefix + "rsrc_endpoint", null)
107                 execution.setVariable(Prefix + "networkOutputs", "")
108                 execution.setVariable(Prefix + "networkId","")
109                 execution.setVariable(Prefix + "networkName","")
110
111                 // AAI query Name
112                 execution.setVariable(Prefix + "queryNameAAIRequest","")
113                 execution.setVariable(Prefix + "queryNameAAIResponse", "")
114                 execution.setVariable(Prefix + "aaiNameReturnCode", "")
115                 execution.setVariable(Prefix + "isAAIqueryNameGood", false)
116
117                 // AAI query Cloud Region
118                 execution.setVariable(Prefix + "queryCloudRegionRequest","")
119                 execution.setVariable(Prefix + "queryCloudRegionReturnCode","")
120                 execution.setVariable(Prefix + "queryCloudRegionResponse","")
121                 execution.setVariable(Prefix + "cloudRegionPo","")
122                 execution.setVariable(Prefix + "cloudRegionSdnc","")
123                 execution.setVariable(Prefix + "isCloudRegionGood", false)
124
125                 // AAI query Id
126                 execution.setVariable(Prefix + "queryIdAAIRequest","")
127                 execution.setVariable(Prefix + "queryIdAAIResponse", "")
128                 execution.setVariable(Prefix + "aaiIdReturnCode", "")
129
130                 // AAI query vpn binding
131                 execution.setVariable(Prefix + "queryVpnBindingAAIRequest","")
132                 execution.setVariable(Prefix + "queryVpnBindingAAIResponse", "")
133                 execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "")
134                 execution.setVariable(Prefix + "vpnBindings", null)
135                 execution.setVariable(Prefix + "vpnCount", 0)
136                 execution.setVariable(Prefix + "routeCollection", "")
137
138                 // AAI query network policy
139                 execution.setVariable(Prefix + "queryNetworkPolicyAAIRequest","")
140                 execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", "")
141                 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "")
142                 execution.setVariable(Prefix + "networkPolicyUriList", null)
143                 execution.setVariable(Prefix + "networkPolicyCount", 0)
144                 execution.setVariable(Prefix + "networkCollection", "")
145
146                 // AAI query route table reference
147                 execution.setVariable(Prefix + "queryNetworkTableRefAAIRequest","")
148                 execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", "")
149                 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "")
150                 execution.setVariable(Prefix + "networkTableRefUriList", null)
151                 execution.setVariable(Prefix + "networkTableRefCount", 0)
152                 execution.setVariable(Prefix + "tableRefCollection", "")
153
154                 // AAI requery Id
155                 execution.setVariable(Prefix + "requeryIdAAIRequest","")
156                 execution.setVariable(Prefix + "requeryIdAAIResponse", "")
157                 execution.setVariable(Prefix + "aaiRequeryIdReturnCode", "")
158
159                 // AAI update contrail
160                 execution.setVariable(Prefix + "updateContrailAAIUrlRequest","")
161                 execution.setVariable(Prefix + "updateContrailAAIPayloadRequest","")
162                 execution.setVariable(Prefix + "updateContrailAAIResponse", "")
163                 execution.setVariable(Prefix + "aaiUpdateContrailReturnCode", "")
164
165                 execution.setVariable(Prefix + "createNetworkRequest", "")
166                 execution.setVariable(Prefix + "createNetworkResponse", "")
167                 execution.setVariable(Prefix + "rollbackNetworkRequest", "")
168                 //execution.setVariable(Prefix + "rollbackNetworkResponse", "")
169                 execution.setVariable(Prefix + "networkReturnCode", "")
170                 //execution.setVariable(Prefix + "rollbackNetworkReturnCode", "")
171                 execution.setVariable(Prefix + "isNetworkRollbackNeeded", false)
172
173                 execution.setVariable(Prefix + "assignSDNCRequest", "")
174                 execution.setVariable(Prefix + "assignSDNCResponse", "")
175                 execution.setVariable(Prefix + "rollbackSDNCRequest", "")
176                 //execution.setVariable(Prefix + "rollbackSDNCResponse", "")
177                 execution.setVariable(Prefix + "sdncReturnCode", "")
178                 //execution.setVariable(Prefix + "rollbackSDNCReturnCode", "")
179                 execution.setVariable(Prefix + "isSdncRollbackNeeded", false)
180                 execution.setVariable(Prefix + "sdncResponseSuccess", false)
181
182                 execution.setVariable(Prefix + "activateSDNCRequest", "")
183                 execution.setVariable(Prefix + "activateSDNCResponse", "")
184                 execution.setVariable(Prefix + "rollbackActivateSDNCRequest", "")
185                 //execution.setVariable(Prefix + "rollbackActivateSDNCResponse", "")
186                 execution.setVariable(Prefix + "sdncActivateReturnCode", "")
187                 //execution.setVariable(Prefix + "rollbackActivateSDNCReturnCode", "")
188                 execution.setVariable(Prefix + "isSdncActivateRollbackNeeded", false)
189                 execution.setVariable(Prefix + "sdncActivateResponseSuccess", false)
190
191                 execution.setVariable(Prefix + "orchestrationStatus", "")
192                 execution.setVariable(Prefix + "isVnfBindingPresent", false)
193                 execution.setVariable(Prefix + "Success", false)
194
195                 execution.setVariable(Prefix + "isException", false)
196
197         }
198
199         // **************************************************
200         //     Pre or Prepare Request Section
201         // **************************************************
202         /**
203          * This method is executed during the preProcessRequest task of the <class>DoCreateNetworkInstance.bpmn</class> process.
204          * @param execution
205          */
206         public void preProcessRequest (DelegateExecution execution) {
207
208                 execution.setVariable("prefix",Prefix)
209                 logger.trace("Inside preProcessRequest() of " + className + ".groovy")
210
211                 try {
212                         // initialize flow variables
213                         InitializeProcessVariables(execution)
214
215                         // GET Incoming request & validate 3 kinds of format.
216                         execution.setVariable("action", "CREATE")
217                         String networkRequest = execution.getVariable("bpmnRequest")
218                         if (networkRequest != null) {
219                                 if (networkRequest.contains("requestDetails")) {
220                                         // JSON format request is sent, create xml
221                                         try {
222                                                 def prettyJson = JsonOutput.prettyPrint(networkRequest.toString())
223                                                 logger.debug(" Incoming message formatted . . . : " + '\n' + prettyJson)
224                                                 networkRequest =  vidUtils.createXmlNetworkRequestInfra(execution, networkRequest)
225
226                                         } catch (Exception ex) {
227                                                 String dataErrorMessage = " Invalid json format Request - " + ex.getMessage()
228                                                 logger.debug(dataErrorMessage)
229                                                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
230                                         }
231                                 } else {
232                                    // XML format request is sent
233
234                                 }
235                         } else {
236                                 // vIPR format request is sent, create xml from individual variables
237                                 networkRequest = vidUtils.createXmlNetworkRequestInstance(execution)
238                         }
239
240                         networkRequest = utils.formatXml(networkRequest)
241                         execution.setVariable(Prefix + "networkRequest", networkRequest)
242                         logger.debug(Prefix + "networkRequest - " + '\n' + networkRequest)
243
244                         // validate 'backout-on-failure' to override 'mso.rollback'
245                         boolean rollbackEnabled = networkUtils.isRollbackEnabled(execution, networkRequest)
246                         execution.setVariable(Prefix + "rollbackEnabled", rollbackEnabled)
247                         logger.debug(Prefix + "rollbackEnabled - " + rollbackEnabled)
248
249                         String networkInputs = utils.getNodeXml(networkRequest, "network-inputs", false).replace("tag0:","").replace(":tag0","")
250                         execution.setVariable(Prefix + "networkInputs", networkInputs)
251                         logger.debug(Prefix + "networkInputs - " + '\n' + networkInputs)
252
253                         // prepare messageId
254                         String messageId = execution.getVariable("testMessageId")  // for testing
255                         if (messageId == null || messageId == "") {
256                                 messageId = UUID.randomUUID()
257                                 logger.debug(Prefix + "messageId, random generated: " + messageId)
258                         } else {
259                                 logger.debug(Prefix + "messageId, pre-assigned: " + messageId)
260                         }
261                         execution.setVariable(Prefix + "messageId", messageId)
262
263                         String source = utils.getNodeText(networkRequest, "source")
264                         execution.setVariable(Prefix + "source", source)
265                         logger.debug(Prefix + "source - " + source)
266
267                         // validate cloud region
268                         String lcpCloudRegionId = utils.getNodeText(networkRequest, "aic-cloud-region")
269                         if ((lcpCloudRegionId == null) || (lcpCloudRegionId == "") || (lcpCloudRegionId == "null")) {
270                                 String dataErrorMessage = "Missing value/element: 'lcpCloudRegionId' or 'cloudConfiguration' or 'aic-cloud-region'."
271                                 logger.debug(" Invalid Request - " + dataErrorMessage)
272                                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
273                         }
274
275                         // validate service instance id
276                         String serviceInstanceId = utils.getNodeText(networkRequest, "service-instance-id")
277                         if ((serviceInstanceId == null) || (serviceInstanceId == "") || (serviceInstanceId == "null")) {
278                                 String dataErrorMessage = "Missing value/element: 'serviceInstanceId'."
279                                 logger.debug(" Invalid Request - " + dataErrorMessage)
280                                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
281                         }
282
283                         // PO Authorization Info / headers Authorization=
284                         String basicAuthValuePO = UrnPropertiesReader.getVariable("mso.adapters.po.auth",execution)
285
286                         try {
287                                 def encodedString = utils.getBasicAuth(basicAuthValuePO, UrnPropertiesReader.getVariable("mso.msoKey",execution))
288                                 execution.setVariable("BasicAuthHeaderValuePO",encodedString)
289                                 execution.setVariable("BasicAuthHeaderValueSDNC", encodedString)
290
291                         } catch (IOException ex) {
292                                 String exceptionMessage = "Exception Encountered in DoCreateNetworkInstance, PreProcessRequest() - "
293                                 String dataErrorMessage = exceptionMessage + " Unable to encode PO/SDNC user/password string - " + ex.getMessage()
294                                 logger.debug(dataErrorMessage)
295                                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
296                         }
297
298                         // Set variables for Generic Get Sub Flow use
299                         execution.setVariable(Prefix + "serviceInstanceId", serviceInstanceId)
300                         logger.debug(Prefix + "serviceInstanceId - " + serviceInstanceId)
301
302                         execution.setVariable("GENGS_type", "service-instance")
303                         logger.debug("GENGS_type - " + "service-instance")
304                         logger.debug(" Url for SDNC adapter: " + UrnPropertiesReader.getVariable("mso.adapters.sdnc.endpoint",execution))
305
306                         String sdncVersion = execution.getVariable("sdncVersion")
307                         logger.debug("sdncVersion? : " + sdncVersion)
308
309                         // build 'networkOutputs'
310                         String networkId = utils.getNodeText(networkRequest, "network-id")
311                         if ((networkId == null) || (networkId == "null")) {
312                                 networkId = ""
313                         }
314                         String networkName = utils.getNodeText(networkRequest, "network-name")
315                         if ((networkName == null) || (networkName == "null")) {
316                                 networkName = ""
317                         }
318                         String networkOutputs =
319                            """<network-outputs>
320                            <network-id>${MsoUtils.xmlEscape(networkId)}</network-id>
321                            <network-name>${MsoUtils.xmlEscape(networkName)}</network-name>
322                          </network-outputs>"""
323                         execution.setVariable(Prefix + "networkOutputs", networkOutputs)
324                         logger.debug(Prefix + "networkOutputs - " + '\n' + networkOutputs)
325                         execution.setVariable(Prefix + "networkId", networkId)
326                         execution.setVariable(Prefix + "networkName", networkName)
327
328                 } catch (BpmnError e) {
329                 throw e;
330
331                 } catch (Exception ex) {
332                         sendSyncError(execution)
333                         // caught exception
334                         String exceptionMessage = "Exception Encountered in PreProcessRequest() of " + className + ".groovy ***** : " + ex.getMessage()
335                         logger.debug(exceptionMessage)
336                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
337
338                 }
339
340         }
341
342         /**
343          * Gets the service instance uri from aai
344          */
345         public void getServiceInstance(DelegateExecution execution) {
346                 try {
347                         String serviceInstanceId = execution.getVariable('CRENWKI_serviceInstanceId')
348
349                         AAIResourcesClient resourceClient = new AAIResourcesClient()
350                         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, serviceInstanceId)
351
352                         if(!resourceClient.exists(uri)){
353                                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Service instance was not found in aai")
354                         }else{
355                                 Map<String, String> keys = uri.getURIKeys()
356                                 execution.setVariable("serviceType", keys.get("service-type"))
357                                 execution.setVariable("subscriberName", keys.get("global-customer-id"))
358                         }
359
360                 }catch(BpmnError e) {
361                         throw e;
362                 }catch (Exception ex){
363                         String msg = "Exception in getServiceInstance. " + ex.getMessage()
364                         logger.debug(msg)
365                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
366                 }
367         }
368
369
370         public void callRESTQueryAAINetworkName (DelegateExecution execution) {
371
372                 execution.setVariable("prefix",Prefix)
373
374                 logger.debug(" ***** Inside callRESTQueryAAINetworkName() of DoCreateNetworkInstance ***** " )
375
376                 try{
377                         // get variables
378                         String networkInputs  = execution.getVariable(Prefix + "networkInputs")
379                         String networkName   = utils.getNodeText(networkInputs, "network-name")
380
381                         AAIResourcesClient client = new AAIResourcesClient()
382                         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.L3_NETWORK).queryParam("network-name", networkName)
383                         L3Networks networks = client.get(uri, NotFoundException.class).asBean(L3Networks.class).get()
384                         L3Network network = networks.getL3Network().get(0)
385
386                         execution.setVariable(Prefix + "isAAIqueryNameGood", true)
387                         String orchestrationStatus = network.getOrchestrationStatus()
388                         execution.setVariable(Prefix + "orchestrationStatus", orchestrationStatus.toUpperCase())
389                         logger.debug(Prefix + "orchestrationStatus - " + orchestrationStatus.toUpperCase())
390                         execution.setVariable("orchestrationStatus", orchestrationStatus)
391
392                         logger.debug(Prefix + "isAAIqueryNameGood? : " + execution.getVariable(Prefix + "isAAIqueryNameGood"))
393
394                 } catch (NotFoundException e) {
395                         logger.debug(" QueryAAINetworkName return code = '404' (Not Found).  Proceed with the Create !!! ")
396
397                 } catch (Exception ex) {
398                         // try error
399                         String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow - callRESTQueryAAINetworkName() -  " + ex.getMessage()
400                         logger.debug(exceptionMessage)
401                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
402
403                 }
404
405         }
406
407         public void callRESTQueryAAICloudRegion (DelegateExecution execution) {
408
409                 execution.setVariable("prefix",Prefix)
410
411                 logger.debug(" ***** Inside callRESTQueryAAICloudRegion() of DoCreateNetworkInstance ***** " )
412
413                 try {
414                         String networkInputs  = execution.getVariable(Prefix + "networkInputs")
415                         String cloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region")
416
417                         // Prepare AA&I url
418                         AaiUtil aaiUtil = new AaiUtil(this)
419
420                         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION, Defaults.CLOUD_OWNER.toString(), cloudRegion)
421                         def queryCloudRegionRequest = aaiUtil.createAaiUri(uri)
422
423                         execution.setVariable(Prefix + "queryCloudRegionRequest", queryCloudRegionRequest)
424
425                         String cloudRegionPo = aaiUtil.getAAICloudReqion(execution,  queryCloudRegionRequest, "PO", cloudRegion)
426                         String cloudRegionSdnc = aaiUtil.getAAICloudReqion(execution,  queryCloudRegionRequest, "SDNC", cloudRegion)
427
428                         if ((cloudRegionPo != "ERROR") && (cloudRegionSdnc != "ERROR")) {
429                                 execution.setVariable(Prefix + "cloudRegionPo", cloudRegionPo)
430                                 execution.setVariable(Prefix + "cloudRegionSdnc", cloudRegionSdnc)
431                                 execution.setVariable(Prefix + "isCloudRegionGood", true)
432
433                         } else {
434                             String dataErrorMessage = "QueryAAICloudRegion Unsuccessful. Return Code: " + execution.getVariable(Prefix + "queryCloudRegionReturnCode")
435                             logger.debug(dataErrorMessage)
436                                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
437
438                         }
439
440                         logger.debug(" is Cloud Region Good: " + execution.getVariable(Prefix + "isCloudRegionGood"))
441
442                 } catch (BpmnError e) {
443                         throw e;
444
445                 } catch (Exception ex) {
446                         // try error
447                         String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow - callRESTQueryAAICloudRegion() - " + ex.getMessage()
448                         logger.debug(exceptionMessage)
449                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
450
451                 }
452
453         }
454
455         public void callRESTQueryAAINetworkId(DelegateExecution execution) {
456
457                 execution.setVariable("prefix",Prefix)
458
459                 logger.debug(" ***** Inside callRESTQueryAAINetworkId() of DoCreateNetworkInstance ***** " )
460
461                 try {
462                         // get variables
463                         String networkId = ""
464                         String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
465                         if (execution.getVariable("sdncVersion") != "1610") {
466                            String networkResponseInformation = ""
467                            try {
468                               networkResponseInformation = utils.getNodeXml(assignSDNCResponse, "network-response-information", false).replace("tag0:","").replace(":tag0","")
469                                   networkId = utils.getNodeText(networkResponseInformation, "instance-id")
470                            } catch (Exception ex) {
471                               String dataErrorMessage = " SNDC Response network validation for 'instance-id' (network-id) failed: Empty <network-response-information>"
472                               logger.debug(dataErrorMessage)
473                                   exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
474                            }
475
476                         } else {
477                            networkId = utils.getNodeText(assignSDNCResponse, "network-id")
478                         }
479                         if (networkId == null || networkId == "null") {
480                                 String dataErrorMessage = "SNDC Response did not contains 'instance-id' or 'network-id' element, or the value is null."
481                                 logger.debug(dataErrorMessage)
482                                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
483                         } else {
484                            logger.debug(" SNDC Response network validation for 'instance-id' (network-id)' is good: " + networkId)
485                         }
486
487
488                         execution.setVariable(Prefix + "networkId", networkId)
489                         String networkName   = utils.getNodeText(assignSDNCResponse, "network-name")
490                         execution.setVariable(Prefix + "networkName", networkName)
491
492                         AAIResourcesClient client = new AAIResourcesClient()
493                         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId).depth(Depth.ONE)
494                         L3Network network = client.get(uri, NotFoundException.class).asBean(L3Network.class).get()
495
496                         execution.setVariable(Prefix + "queryIdAAIResponse", network)
497
498                         String netId   = network.getNetworkId()
499                         execution.setVariable(Prefix + "networkId", netId)
500                         String netName   = network.getNetworkName()
501                         execution.setVariable(Prefix + "networkName", netName)
502
503                 } catch (NotFoundException e) {
504                         String dataErrorMessage = "Response Error from QueryAAINetworkId is 404 (Not Found)."
505                         logger.debug(" AAI Query Failed. " + dataErrorMessage)
506                         exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
507
508                 } catch (Exception ex) {
509                         String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkId() - " + ex.getMessage()
510                         logger.debug(exceptionMessage)
511                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
512
513                 }
514
515         }
516
517         public void callRESTReQueryAAINetworkId(DelegateExecution execution) {
518
519                 execution.setVariable("prefix",Prefix)
520
521                 logger.debug(" ***** Inside callRESTReQueryAAINetworkId() of DoCreateNetworkInstance ***** " )
522
523                 try {
524                         // get variables
525                         String networkId   = execution.getVariable(Prefix + "networkId")
526                         String netId = networkId
527
528                         AAIResourcesClient client = new AAIResourcesClient()
529                         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId).depth(Depth.ONE)
530                         L3Network network = client.get(uri, NotFoundException.class).asBean(L3Network.class).get()
531
532                         execution.setVariable(Prefix + "aaiRequeryIdReturnCode", "200")
533                         execution.setVariable(Prefix + "requeryIdAAIResponse", network)
534
535                         String netName = network.getNetworkName()
536                         String networkOutputs =
537                                         """<network-outputs>
538                    <network-id>${MsoUtils.xmlEscape(netId)}</network-id>
539                    <network-name>${MsoUtils.xmlEscape(netName)}</network-name>
540                  </network-outputs>"""
541                         execution.setVariable(Prefix + "networkOutputs", networkOutputs)
542                         logger.debug(" networkOutputs - " + '\n' + networkOutputs)
543
544
545                 } catch (NotFoundException e) {
546                         String dataErrorMessage = "Response Error from ReQueryAAINetworkId is 404 (Not Found)."
547                         logger.debug(" AAI ReQuery Failed. - " + dataErrorMessage)
548                         exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
549
550                 } catch (Exception ex) {
551                         String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTReQueryAAINetworkId() - " + ex.getMessage()
552                         logger.debug(exceptionMessage)
553                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
554
555                 }
556
557         }
558
559         public void callRESTQueryAAINetworkVpnBinding(DelegateExecution execution) {
560
561                 execution.setVariable("prefix",Prefix)
562
563                 logger.debug(" ***** Inside callRESTQueryAAINetworkVpnBinding() of DoCreateNetworkInstance ***** " )
564
565                 try {
566
567                         AAIResourcesClient client = new AAIResourcesClient()
568                         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, execution.getVariable(Prefix + "networkId"))
569                         Optional<Relationships> relationships = client.get(uri, NotFoundException.class).getRelationships()
570                         if(relationships.isPresent()){
571                                 List<AAIResourceUri> uris = relationships.get().getRelatedAAIUris(AAIObjectType.VPN_BINDING)
572
573                                 logger.debug(Prefix + "vpnCount - " + uris.size())
574
575                                 if (uris.size() > 0) {
576                                         String routeTargets = ""
577                                         for(AAIResourceUri u : uris) {
578
579                                                 AAIResultWrapper wrapper = client.get(u.depth(Depth.TWO), NotFoundException.class)
580                                                 Optional<VpnBinding> binding = wrapper.asBean(VpnBinding.class)
581
582                                                 String routeTarget = ""
583                                                 String routeRole = ""
584                                                 if(binding.get().getRouteTargets() != null) {
585                                                         List<RouteTarget> targets = binding.get().getRouteTargets().getRouteTarget()
586                                                         for(RouteTarget target : targets) {
587                                                                 routeTarget  = target.getGlobalRouteTarget()
588                                                                 routeRole  = target.getRouteTargetRole()
589                                                                 routeTargets += "<routeTargets>" + '\n' +
590                                                                                 " <routeTarget>" + routeTarget + "</routeTarget>" + '\n' +
591                                                                                 " <routeTargetRole>" + routeRole + "</routeTargetRole>" + '\n' +
592                                                                                 "</routeTargets>" + '\n'
593                                                         }
594                                                 }
595
596                                         } // end loop
597
598                                         execution.setVariable(Prefix + "routeCollection", routeTargets)
599                                         logger.debug(Prefix + "routeCollection - " + '\n' + routeTargets)
600
601                                 } else {
602                                         // reset return code to success
603                                         execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "200")
604                                         AaiUtil aaiUriUtil = new AaiUtil(this)
605                                         String schemaVersion = aaiUriUtil.getNamespace()
606                                         String aaiStubResponse =
607                                                         """     <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
608                                                         <vpn-binding xmlns="${schemaVersion}">
609                                                       <global-route-target/>
610                                                         </vpn-binding>
611                                                 </rest:payload>"""
612                                         String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
613                                         execution.setVariable(Prefix + "queryVpnBindingAAIResponse", aaiStubResponseAsXml)
614                                         execution.setVariable(Prefix + "routeCollection", "<routeTargets/>")
615                                         logger.debug(" No vpnBinding, using this stub as response - " + '\n' + aaiStubResponseAsXml)
616
617                                 }
618                         }
619
620                 } catch (NotFoundException e) {
621                         logger.debug("Response Error from AAINetworkVpnBinding is 404 (Not Found).")
622                         exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Response Error from AAINetworkVpnBinding is 404 (Not Found).")
623                 } catch (Exception ex) {
624                         String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkVpnBinding() - " + ex.getMessage()
625                         logger.debug(exceptionMessage)
626                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
627
628                 }
629
630         }
631
632         public void callRESTQueryAAINetworkPolicy(DelegateExecution execution) {
633
634                 execution.setVariable("prefix",Prefix)
635
636                 logger.debug(" ***** Inside callRESTQueryAAINetworkPolicy() of DoCreateNetworkInstance ***** " )
637
638                 try {
639                         AAIResourcesClient client = new AAIResourcesClient()
640                         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, execution.getVariable(Prefix + "networkId"))
641                         Optional<Relationships> relationships = client.get(uri, NotFoundException.class).getRelationships()
642                         if(relationships.isPresent()){
643                                 List<AAIResourceUri> uris = relationships.get().getRelatedAAIUris(AAIObjectType.NETWORK_POLICY)
644
645                                 execution.setVariable(Prefix + "networkPolicyCount", uris.size())
646                                 logger.debug(Prefix + "networkPolicyCount - " + uris.size())
647
648                                 if (uris.size() > 0) {
649
650                                         String networkPolicies = ""
651                                         // AII loop call using list vpnBindings
652                                         for(AAIResourceUri u : uris) {
653
654                                                 NetworkPolicy p = client.get(u, NotFoundException.class).asBean(NetworkPolicy.class).get()
655
656                                                 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
657
658                                                 String networkPolicy  = p.getNetworkPolicyFqdn()
659                                                 networkPolicies += "<policyFqdns>" + networkPolicy + "</policyFqdns>" + '\n'
660
661                                         } // end loop
662
663                                         execution.setVariable(Prefix + "networkCollection", networkPolicies)
664                                         logger.debug(Prefix + "networkCollection - " + '\n' + networkPolicies)
665
666                                 } else {
667                                         // reset return code to success
668                                         execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
669                                         AaiUtil aaiUriUtil = new AaiUtil(this)
670                                         String schemaVersion = aaiUriUtil.getNamespace()
671                                         String aaiStubResponse =
672                                                         """     <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
673                                                         <network-policy xmlns="${schemaVersion}">
674                                                           <network-policy-fqdn/>
675                             </network-policy>
676                                                 </rest:payload>"""
677                                         String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
678                                         execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", aaiStubResponseAsXml)
679                                         execution.setVariable(Prefix + "networkCollection", "<policyFqdns/>")
680                                         logger.debug(" No net policies, using this stub as response - " + '\n' + aaiStubResponseAsXml)
681
682                                 }
683                         }
684         } catch (NotFoundException e) {
685                 String dataErrorMessage = "Response Error from QueryAAINetworkPolicy is 404 (Not Found)."
686                 logger.debug(dataErrorMessage)
687                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
688
689         } catch (Exception ex) {
690                 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkPolicy() - " + ex.getMessage()
691                 logger.debug(exceptionMessage)
692                 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
693
694         }
695
696         }
697
698         public void callRESTQueryAAINetworkTableRef(DelegateExecution execution) {
699
700                 execution.setVariable("prefix",Prefix)
701
702                 logger.debug(" ***** Inside callRESTQueryAAINetworkTableRef() of DoCreateNetworkInstance ***** " )
703
704                 try {
705
706                         AAIResourcesClient client = new AAIResourcesClient()
707                         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, execution.getVariable(Prefix + "networkId"))
708                         Optional<Relationships> relationships = client.get(uri, NotFoundException.class).getRelationships()
709                         if(relationships.isPresent()){
710                                 List<AAIResourceUri> uris = relationships.get().getRelatedAAIUris(AAIObjectType.ROUTE_TABLE_REFERENCE)
711
712                                 execution.setVariable(Prefix + "networkTableRefCount", uris.size())
713                                 logger.debug(Prefix + "networkTableRefCount - " + uris.size())
714
715
716                                 if (uris.size() > 0) {
717
718                                         // AII loop call using list vpnBindings
719                                         String networkTableRefs = ""
720                                         for(AAIResourceUri u : uris) {
721
722                                                 RouteTableReference rt = client.get(u, NotFoundException.class).asBean(RouteTableReference.class).get()
723
724                                                 String networkTableRef  = rt.getRouteTableReferenceFqdn()
725                                                 networkTableRefs += "<routeTableFqdns>" + networkTableRef + "</routeTableFqdns>" + '\n'
726
727
728                                         } // end loop
729
730                                         execution.setVariable(Prefix + "tableRefCollection", networkTableRefs)
731                                         logger.debug(Prefix + "tableRefCollection - " + '\n' + networkTableRefs)
732
733                                 } else {
734                                         // reset return code to success
735                                         execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "200")
736                                         AaiUtil aaiUriUtil = new AaiUtil(this)
737                                         String schemaVersion = aaiUriUtil.getNamespace()
738                                         String aaiStubResponse =
739                                                         """     <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
740                                                         <route-table-references xmlns="${schemaVersion}">
741                                                           <route-table-reference-fqdn/>
742                             </route-table-references>
743                                                 </rest:payload>"""
744                                         String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
745                                         execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", aaiStubResponseAsXml)
746                                         execution.setVariable(Prefix + "tableRefCollection", "<routeTableFqdns/>")
747                                         logger.debug(" No net table references, using this stub as response - " + '\n' + aaiStubResponseAsXml)
748
749                                 }
750                         }
751
752                 } catch (NotFoundException e) {
753                         String dataErrorMessage = "Response Error from QueryAAINetworkTableRef is 404 (Not Found)."
754                         logger.debug(dataErrorMessage)
755                         exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
756
757                 } catch (Exception ex) {
758                         String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkTableRef() - " + ex.getMessage()
759                         logger.debug(exceptionMessage)
760                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
761
762                 }
763
764         }
765
766
767         public void callRESTUpdateContrailAAINetwork(DelegateExecution execution) {
768
769                 execution.setVariable("prefix",Prefix)
770
771                 logger.trace(" ***** Inside callRESTUpdateContrailAAINetwork() of DoCreateNetworkInstance ***** " )
772
773                 try {
774                         // get variables
775                         String networkId   = execution.getVariable(Prefix + "networkId")
776                         L3Network requeryIdAAIResponse   = execution.getVariable(Prefix + "requeryIdAAIResponse")
777                         String createNetworkResponse   = execution.getVariable(Prefix + "createNetworkResponse")
778
779                         L3Network l3Network = new L3Network()
780                         if (StringUtils.isBlank(requeryIdAAIResponse.getHeatStackId())) {
781                                 if (utils.nodeExists(createNetworkResponse, 'networkStackId')) {
782                                         l3Network.setHeatStackId(utils.getNodeText(createNetworkResponse, 'networkStackId'))
783                                 }
784                         }
785                         if (StringUtils.isBlank(requeryIdAAIResponse.getNeutronNetworkId())) {
786                                 if (utils.nodeExists(createNetworkResponse, 'neutronNetworkId')) {
787                                         l3Network.setNeutronNetworkId(utils.getNodeText(createNetworkResponse, 'neutronNetworkId'))
788                                 }
789                         }
790                         if (StringUtils.isBlank(requeryIdAAIResponse.getContrailNetworkFqdn())) {
791                                 if (utils.nodeExists(createNetworkResponse, 'networkFqdn')) {
792                                         l3Network.setContrailNetworkFqdn(utils.getNodeText(createNetworkResponse, 'networkFqdn'))
793                                 }
794                         }
795
796                         String status = utils.getNodeText(createNetworkResponse, 'orchestration-status')
797                         if(status.equals("pending-create") || status.equals("PendingCreate")){
798                                 l3Network.setOrchestrationStatus("Created")
799                         }else{
800                                 l3Network.setOrchestrationStatus("Active")
801                         }
802
803                         logger.debug("Updating l3-network in AAI" )
804
805                         AAIResourcesClient client = new AAIResourcesClient()
806                         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId)
807                         client.update(uri, l3Network)
808
809                         if(requeryIdAAIResponse.getSubnets() != null){
810                                 for(Subnet s:requeryIdAAIResponse.getSubnets().getSubnet()){
811                                         String subnetOrchStatus = s.getOrchestrationStatus()
812                                         String subnetId = s.getSubnetId()
813                                         Subnet subnet = new Subnet()
814                                         subnet.setNeutronSubnetId(networkUtils.extractNeutSubId(createNetworkResponse, subnetId))
815                                         if(subnetOrchStatus.equals("pending-create") || subnetOrchStatus.equals("PendingCreate") ){
816                                                 subnet.setOrchestrationStatus("Created")
817                                         }else{
818                                                 subnet.setOrchestrationStatus("Active")
819                                         }
820
821                                         logger.debug("Updating subnet in AAI" )
822                                         AAIResourceUri subUri = AAIUriFactory.createResourceUri(AAIObjectType.SUBNET, networkId, subnetId)
823                                         client.update(subUri, subnet)
824
825                                 }
826                         }
827
828                         String rollbackEnabled = execution.getVariable(Prefix + "rollbackEnabled")
829                         if (rollbackEnabled == "true") {
830                                 execution.setVariable(Prefix + "isPONR", false)
831                         } else {
832                                 execution.setVariable(Prefix + "isPONR", true)
833                         }
834                         logger.debug(Prefix + "isPONR" + ": " + execution.getVariable(Prefix + "isPONR"))
835
836                 } catch (BpmnError e) {
837                         throw e;
838                 } catch (NotFoundException e) {
839                         String dataErrorMessage = " Response Error from UpdateContrailAAINetwork is 404 (Not Found)."
840                         logger.debug(dataErrorMessage)
841                         exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
842                 } catch (Exception ex) {
843                         String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTUpdateContrailAAINetwork() - " + ex.getMessage()
844                         logger.debug(exceptionMessage)
845                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
846                 }
847         }
848
849         public void prepareCreateNetworkRequest (DelegateExecution execution) {
850
851                 execution.setVariable("prefix",Prefix)
852
853                 logger.trace("Inside prepareCreateNetworkRequest() of DoCreateNetworkInstance")
854
855                 try {
856
857                         // get variables
858                         String requestId = execution.getVariable("msoRequestId")
859                         if (requestId == null) {
860                                 requestId = execution.getVariable("mso-request-id")
861                         }
862                         String messageId = execution.getVariable(Prefix + "messageId")
863                         String source    = execution.getVariable(Prefix + "source")
864
865                         String requestInput = execution.getVariable(Prefix + "networkRequest")
866                         L3Network queryIdResponse = execution.getVariable(Prefix + "queryIdAAIResponse")
867                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionPo")
868                         String backoutOnFailure = execution.getVariable(Prefix + "rollbackEnabled")
869
870                         // Prepare Network request
871                         String routeCollection = execution.getVariable(Prefix + "routeCollection")
872                         String policyCollection = execution.getVariable(Prefix + "networkCollection")
873                         String tableCollection = execution.getVariable(Prefix + "tableRefCollection")
874                         String createNetworkRequest = networkUtils.CreateNetworkRequestV2(execution, requestId, messageId, requestInput, queryIdResponse, routeCollection, policyCollection, tableCollection, cloudRegionId, backoutOnFailure, source )
875                         // Format Response
876                         String buildDeleteNetworkRequestAsString = utils.formatXml(createNetworkRequest)
877                         buildDeleteNetworkRequestAsString = buildDeleteNetworkRequestAsString.replace(":w1aac13n0", "").replace("w1aac13n0:", "")
878
879                         execution.setVariable(Prefix + "createNetworkRequest", buildDeleteNetworkRequestAsString)
880                         logger.debug(Prefix + "createNetworkRequest - " + "\n" +  buildDeleteNetworkRequestAsString)
881
882                 } catch (Exception ex) {
883                         String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareCreateNetworkRequest() - " + ex.getMessage()
884                         logger.debug(exceptionMessage)
885                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
886
887                 }
888
889         }
890
891         public void prepareSDNCRequest (DelegateExecution execution) {
892
893                 execution.setVariable("prefix",Prefix)
894
895                 logger.trace("Inside prepareSDNCRequest() of DoCreateNetworkInstance")
896
897                 try {
898                         // get variables
899                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
900                         String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
901                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
902
903                         String networkId = execution.getVariable(Prefix + "networkId")
904                         String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
905
906                         // get/set 'msoRequestId' and 'mso-request-id'
907                         String requestId = execution.getVariable("msoRequestId")
908                         if (requestId != null) {
909                                 execution.setVariable("mso-request-id", requestId)
910                         } else {
911                             requestId = execution.getVariable("mso-request-id")
912                         }
913                         execution.setVariable(Prefix + "requestId", requestId)
914
915                         // 1. prepare assign topology via SDNC Adapter SUBFLOW call
916                         String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, createNetworkInput, serviceInstanceId, sdncCallback, "assign", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
917
918                         String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
919                         execution.setVariable(Prefix + "assignSDNCRequest", sndcTopologyCreateRequesAsString)
920                         logger.debug(Prefix + "assignSDNCRequest - " + "\n" +  sndcTopologyCreateRequesAsString)
921
922
923                 } catch (Exception ex) {
924                         String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSDNCRequest() - " + ex.getMessage()
925                         logger.debug(exceptionMessage)
926                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
927
928                 }
929
930         }
931
932         public void prepareRpcSDNCRequest (DelegateExecution execution) {
933
934                 execution.setVariable("prefix",Prefix)
935
936                 logger.trace("Inside prepareRpcSDNCRequest() of DoCreateNetworkInstance")
937
938                 try {
939                         // get variables
940
941                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
942                         String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
943                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
944
945                         String networkId = execution.getVariable(Prefix + "networkId")
946                         String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
947
948                         // 1. prepare assign topology via SDNC Adapter SUBFLOW call
949                         String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "assign", "CreateNetworkInstance", cloudRegionId, networkId, null)
950
951                         String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
952                         execution.setVariable(Prefix + "assignSDNCRequest", sndcTopologyCreateRequesAsString)
953                         logger.debug(Prefix + "assignSDNCRequest - " + "\n" +  sndcTopologyCreateRequesAsString)
954
955                 } catch (Exception ex) {
956                         String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCRequest() - " + ex.getMessage()
957                         logger.debug(exceptionMessage)
958                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
959
960                 }
961
962         }
963
964         public void prepareRpcSDNCActivateRequest (DelegateExecution execution) {
965
966                 execution.setVariable("prefix",Prefix)
967
968                 logger.trace("Inside prepareRpcSDNCActivateRequest() of DoCreateNetworkInstance")
969
970                 try {
971                         // get variables
972                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
973                         String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
974                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
975                         String networkId = execution.getVariable(Prefix + "networkId")
976                         String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
977
978                         // 1. prepare assign topology via SDNC Adapter SUBFLOW call
979                         String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "activate", "CreateNetworkInstance", cloudRegionId, networkId, null)
980
981                         String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
982                         execution.setVariable(Prefix + "activateSDNCRequest", sndcTopologyCreateRequesAsString)
983                         logger.debug(Prefix + "activateSDNCRequest - " + "\n" +  sndcTopologyCreateRequesAsString)
984
985
986                 } catch (Exception ex) {
987                         String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCActivateRequest() - " + ex.getMessage()
988                         logger.debug(exceptionMessage)
989                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
990
991                 }
992
993         }
994
995
996
997
998         // **************************************************
999         //     Post or Validate Response Section
1000         // **************************************************
1001
1002         public void validateCreateNetworkResponse (DelegateExecution execution) {
1003
1004                 execution.setVariable("prefix",Prefix)
1005
1006                 logger.trace("Inside validateNetworkResponse() of DoCreateNetworkInstance")
1007
1008                 try {
1009                         String returnCode = execution.getVariable(Prefix + "networkReturnCode")
1010                         String networkResponse = execution.getVariable(Prefix + "createNetworkResponse")
1011                         if (networkResponse==null)      {
1012                                 networkResponse="" // reset
1013                         }
1014
1015                         logger.debug(" Network Adapter create responseCode: " + returnCode)
1016
1017                         String errorMessage = ""
1018                         if (returnCode == "200") {
1019                                 execution.setVariable(Prefix + "isNetworkRollbackNeeded", true)
1020                                 execution.setVariable(Prefix + "createNetworkResponse", networkResponse)
1021                                 logger.debug(" Network Adapter create Success Response - " + "\n" + networkResponse)
1022
1023                                 // prepare rollback data
1024                                 String rollbackData = utils.getNodeXml(networkResponse, "rollback", false).replace("tag0:","").replace(":tag0","")
1025                                 rollbackData = rollbackData.replace("rollback>", "networkRollback>")
1026                                 String rollbackNetwork =
1027                                         """<rollbackNetworkRequest>
1028                                                         ${rollbackData}
1029                                                 </rollbackNetworkRequest>"""
1030                                 String rollbackNetworkXml = utils.formatXml(rollbackNetwork)
1031                                 execution.setVariable(Prefix + "rollbackNetworkRequest", rollbackNetworkXml)
1032                                 logger.debug(" Network Adapter rollback data - " + "\n" + rollbackNetworkXml)
1033
1034                         } else { // network error
1035                            if (returnCode.toInteger() > 399 && returnCode.toInteger() < 600) {   //4xx, 5xx
1036                                    if (networkResponse.contains("createNetworkError")) {
1037                                            networkResponse = networkResponse.replace('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>', '')
1038                                            errorMessage = utils.getNodeText(networkResponse, "message")
1039                                            errorMessage  = "Received error from Network Adapter: " + errorMessage
1040                                            exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
1041
1042                                    } else { // CatchAll exception
1043                                            if (returnCode == "500") {
1044                                                    errorMessage = "JBWEB000065: HTTP Status 500."
1045                                        } else {
1046                                                errorMessage = "Return code is " + returnCode
1047                                        }
1048                                            errorMessage  = "Received error from Network Adapter: " + errorMessage
1049                                            exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
1050
1051                                    }
1052
1053                            } else { // CatchAll exception
1054                                    String dataErrorMessage  = "Received error from Network Adapter. Return code is: " + returnCode
1055                                    exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
1056
1057                            }
1058
1059                         }
1060
1061                 } catch (BpmnError e) {
1062                         throw e;
1063
1064                 } catch (Exception ex) {
1065                         String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. validateCreateNetworkResponse() - " + ex.getMessage()
1066                         logger.debug(exceptionMessage)
1067                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
1068
1069                 }
1070
1071
1072         }
1073
1074         public void validateSDNCResponse (DelegateExecution execution) {
1075
1076                 execution.setVariable("prefix",Prefix)
1077
1078                 logger.trace("Inside validateSDNCResponse() of DoCreateNetworkInstance")
1079
1080                 String response = execution.getVariable(Prefix + "assignSDNCResponse")
1081                 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
1082                 WorkflowException workflowException = execution.getVariable("WorkflowException")
1083
1084                 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
1085                 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
1086                 // reset variable
1087                 String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "assignSDNCResponse")
1088                 assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
1089                 execution.setVariable(Prefix + "assignSDNCResponse", assignSDNCResponseDecodeXml)
1090
1091                 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) {  // from sdnc util, Prefix+'sdncResponseSuccess'
1092                         execution.setVariable(Prefix + "isSdncRollbackNeeded", true)
1093                         logger.debug("Successfully Validated SDNC Response")
1094
1095                 } else {
1096                         logger.debug("Did NOT Successfully Validated SDNC Response")
1097                         throw new BpmnError("MSOWorkflowException")
1098                 }
1099
1100         }
1101
1102         public void validateRpcSDNCActivateResponse (DelegateExecution execution) {
1103
1104                 execution.setVariable("prefix",Prefix)
1105
1106                 logger.trace("Inside validateRpcSDNCActivateResponse() of DoCreateNetworkInstance")
1107
1108                 String response = execution.getVariable(Prefix + "activateSDNCResponse")
1109                 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
1110                 WorkflowException workflowException = execution.getVariable("WorkflowException")
1111
1112                 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
1113                 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
1114                 // reset variable
1115                 String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "activateSDNCResponse")
1116                 assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
1117                 execution.setVariable(Prefix + "activateSDNCResponse", assignSDNCResponseDecodeXml)
1118
1119                 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) {  // from sdnc util, Prefix+'sdncResponseSuccess'
1120                         execution.setVariable(Prefix + "isSdncActivateRollbackNeeded", true)
1121                         logger.debug("Successfully Validated Rpc SDNC Activate Response")
1122
1123                 } else {
1124                         logger.debug("Did NOT Successfully Validated Rpc SDNC Activate Response")
1125                         throw new BpmnError("MSOWorkflowException")
1126                 }
1127
1128         }
1129
1130
1131         public void prepareSDNCRollbackRequest (DelegateExecution execution) {
1132
1133                 execution.setVariable("prefix",Prefix)
1134
1135                 logger.trace("Inside prepareSDNCRollbackRequest() of DoCreateNetworkInstance")
1136
1137                 try {
1138                         // get variables
1139                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1140                         String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1141                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1142                         String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
1143                         String networkId = execution.getVariable(Prefix + "networkId")
1144                         if (networkId == 'null') {networkId = ""}
1145                         String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1146
1147                         // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1148                         String sndcTopologyRollbackRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, createNetworkInput, serviceInstanceId, sdncCallback, "rollback", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
1149                         String sndcTopologyRollbackRequestAsString = utils.formatXml(sndcTopologyRollbackRequest)
1150                         execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRequestAsString)
1151                         logger.debug(" Preparing request for SDNC Topology 'rollback-NetworkActivateRequest' rollback . . . - " + "\n" +  sndcTopologyRollbackRequestAsString)
1152
1153
1154                 } catch (Exception ex) {
1155                         String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSDNCRollbackRequest() - " + ex.getMessage()
1156                         logger.debug(exceptionMessage)
1157                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1158
1159                 }
1160
1161         }
1162
1163         public void prepareRpcSDNCRollbackRequest (DelegateExecution execution) {
1164
1165                 execution.setVariable("prefix",Prefix)
1166
1167                 logger.trace("Inside prepareRpcSDNCRollbackRequest() of DoCreateNetworkInstance")
1168
1169                 try {
1170                         // get variables
1171                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1172                         String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1173                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1174                         String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
1175                         String networkId = execution.getVariable(Prefix + "networkId")
1176                         if (networkId == 'null') {networkId = ""}
1177                         String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1178
1179                         // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1180                         String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "unassign", "DeleteNetworkInstance", cloudRegionId, networkId, null)
1181                         String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
1182                         execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
1183                         logger.debug(" Preparing request for SDNC Topology 'unassign-DeleteNetworkInstance' rollback . . . - " + "\n" +  sndcTopologyRollbackRpcRequestAsString)
1184
1185
1186                 } catch (Exception ex) {
1187                         String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCRollbackRequest() - " + ex.getMessage()
1188                         logger.debug(exceptionMessage)
1189                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1190
1191                 }
1192
1193         }
1194
1195         public void prepareRpcSDNCActivateRollback(DelegateExecution execution) {
1196
1197                 execution.setVariable("prefix",Prefix)
1198
1199                 logger.trace("Inside prepareRpcSDNCActivateRollback() of DoCreateNetworkInstance")
1200
1201                 try {
1202
1203                         // get variables
1204                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1205                         String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1206                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1207                         String activateSDNCResponse = execution.getVariable(Prefix + "activateSDNCResponse")
1208                         String networkId = execution.getVariable(Prefix + "networkId")
1209                         if (networkId == 'null') {networkId = ""}
1210                         String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1211
1212                         // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1213                         String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "deactivate", "DeleteNetworkInstance", cloudRegionId, networkId, null)
1214                         String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
1215                         execution.setVariable(Prefix + "rollbackActivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
1216                         logger.debug(" Preparing request for RPC SDNC Topology 'deactivate-DeleteNetworkInstance' rollback . . . - " + "\n" +  sndcTopologyRollbackRpcRequestAsString)
1217
1218
1219                 } catch (Exception ex) {
1220                         String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCActivateRollback() - " + ex.getMessage()
1221                         logger.debug(exceptionMessage)
1222                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1223
1224                 }
1225
1226         }
1227
1228         public void prepareRollbackData(DelegateExecution execution) {
1229
1230                 execution.setVariable("prefix",Prefix)
1231
1232                 logger.trace("Inside prepareRollbackData() of DoCreateNetworkInstance")
1233
1234                 try {
1235
1236                         Map<String, String> rollbackData = new HashMap<String, String>();
1237                         String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
1238                         if (rollbackSDNCRequest != null) {
1239                                 if (rollbackSDNCRequest != "") {
1240                                 rollbackData.put("rollbackSDNCRequest", execution.getVariable(Prefix + "rollbackSDNCRequest"))
1241                             }
1242                         }
1243                         String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
1244                         if (rollbackNetworkRequest != null) {
1245                                 if (rollbackNetworkRequest != "") {
1246                                 rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
1247                                 }
1248                         }
1249                         String rollbackActivateSDNCRequest = execution.getVariable(Prefix + "rollbackActivateSDNCRequest")
1250                         if (rollbackActivateSDNCRequest != null) {
1251                                 if (rollbackActivateSDNCRequest != "") {
1252                                 rollbackData.put("rollbackActivateSDNCRequest", execution.getVariable(Prefix + "rollbackActivateSDNCRequest"))
1253                                 }
1254                         }
1255                         execution.setVariable("rollbackData", rollbackData)
1256                         logger.debug("** rollbackData : " + rollbackData)
1257
1258                         execution.setVariable("WorkflowException", execution.getVariable(Prefix + "WorkflowException"))
1259                         logger.debug("** WorkflowException : " + execution.getVariable("WorkflowException"))
1260
1261                 } catch (Exception ex) {
1262                         String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRollbackData() - " + ex.getMessage()
1263                         logger.debug(exceptionMessage)
1264                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1265
1266                 }
1267
1268         }
1269
1270         public void postProcessResponse(DelegateExecution execution) {
1271
1272                 execution.setVariable("prefix",Prefix)
1273
1274                 logger.trace("Inside postProcessResponse() of DoCreateNetworkInstance")
1275
1276                 try {
1277
1278                         //Conditions:
1279                         // 1. Silent Success: execution.getVariable("CRENWKI_orchestrationStatus") == "ACTIVE"
1280                         // 2. Success: execution.getVariable("WorkflowException") == null (NULL)
1281                         // 3. WorkflowException: execution.getVariable("WorkflowException") != null (NOT NULL)
1282
1283                         logger.debug(" ***** Is Exception Encountered (isException)? : " + execution.getVariable(Prefix + "isException"))
1284                         // successful flow
1285                         if (execution.getVariable(Prefix + "isException") == false) {
1286                                 // set rollback data
1287                                 execution.setVariable("orchestrationStatus", "")
1288                                 execution.setVariable("networkId", execution.getVariable(Prefix + "networkId"))
1289                                 execution.setVariable("networkName", execution.getVariable(Prefix + "networkName"))
1290                                 prepareSuccessRollbackData(execution) // populate rollbackData
1291                                 execution.setVariable("WorkflowException", null)
1292                                 execution.setVariable(Prefix + "Success", true)
1293                                 logger.debug(" ***** postProcessResponse(), GOOD !!!")
1294                         } else {
1295                            // inside sub-flow logic
1296                                 execution.setVariable(Prefix + "Success", false)
1297                                 execution.setVariable("rollbackData", null)
1298                                 String exceptionMessage = " Exception encountered in MSO Bpmn. "
1299                                 if (execution.getVariable("workflowException") != null) {  // Output of Rollback flow.
1300                                    logger.debug(" ***** workflowException: " + execution.getVariable("workflowException"))
1301                                    WorkflowException wfex = execution.getVariable("workflowException")
1302                                    exceptionMessage = wfex.getErrorMessage()
1303                                 } else {
1304                                if (execution.getVariable(Prefix + "WorkflowException") != null) {
1305                                       WorkflowException pwfex = execution.getVariable(Prefix + "WorkflowException")
1306                                       exceptionMessage = pwfex.getErrorMessage()
1307                                }
1308                                 }
1309                             // going to the Main flow: a-la-carte or macro
1310                             logger.debug(" ***** postProcessResponse(), BAD !!!")
1311                             exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1312                                 throw new BpmnError("MSOWorkflowException")
1313                         }
1314
1315                 } catch(BpmnError b){
1316                      logger.debug("Rethrowing MSOWorkflowException")
1317                      throw b
1318
1319                 } catch (Exception ex) {
1320                         String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. postProcessResponse() - " + ex.getMessage()
1321                         logger.debug(exceptionMessage)
1322                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1323                         throw new BpmnError("MSOWorkflowException")
1324
1325                 }
1326
1327
1328
1329         }
1330
1331         public void prepareSuccessRollbackData(DelegateExecution execution) {
1332
1333                 execution.setVariable("prefix",Prefix)
1334
1335                 logger.trace("Inside prepareSuccessRollbackData() of DoCreateNetworkInstance")
1336
1337                 try {
1338
1339                         if (execution.getVariable("sdncVersion") != '1610') {
1340                             prepareRpcSDNCRollbackRequest(execution)
1341                                 prepareRpcSDNCActivateRollback(execution)
1342                         } else {
1343                             prepareSDNCRollbackRequest(execution)
1344                         }
1345
1346                         Map<String, String> rollbackData = new HashMap<String, String>();
1347                         String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
1348                         if (rollbackSDNCRequest != null) {
1349                                 if (rollbackSDNCRequest != "") {
1350                                         rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
1351                                 }
1352                         }
1353                         String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
1354                         if (rollbackNetworkRequest != null) {
1355                                 if (rollbackNetworkRequest != "") {
1356                                         rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
1357                                 }
1358                         }
1359                         String rollbackActivateSDNCRequest = execution.getVariable(Prefix + "rollbackActivateSDNCRequest")
1360                         if (rollbackActivateSDNCRequest != null) {
1361                                 if (rollbackActivateSDNCRequest != "") {
1362                                         rollbackData.put("rollbackActivateSDNCRequest", rollbackActivateSDNCRequest)
1363                                 }
1364                         }
1365                         execution.setVariable("rollbackData", rollbackData)
1366
1367                         logger.debug("** 'rollbackData' for Full Rollback : " + rollbackData)
1368                         execution.setVariable("WorkflowException", null)
1369
1370
1371                 } catch (Exception ex) {
1372                         String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage()
1373                         logger.debug(exceptionMessage)
1374                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1375
1376                 }
1377
1378         }
1379
1380         public void setExceptionFlag(DelegateExecution execution){
1381
1382                 execution.setVariable("prefix",Prefix)
1383
1384                 logger.trace("Inside setExceptionFlag() of DoCreateNetworkInstance")
1385
1386                 try {
1387
1388                         execution.setVariable(Prefix + "isException", true)
1389
1390                         if (execution.getVariable("SavedWorkflowException1") != null) {
1391                                 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
1392                         } else {
1393                                 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
1394                         }
1395                         logger.debug(Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"))
1396
1397                 } catch(Exception ex){
1398                         String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. setExceptionFlag(): " + ex.getMessage()
1399                         logger.debug(exceptionMessage)
1400                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1401                 }
1402
1403         }
1404
1405
1406         // *******************************
1407         //     Build Error Section
1408         // *******************************
1409
1410
1411
1412         public void processJavaException(DelegateExecution execution){
1413
1414                 execution.setVariable("prefix",Prefix)
1415
1416                 try{
1417                         logger.debug( "Caught a Java Exception in " + Prefix)
1418                         logger.debug("Started processJavaException Method")
1419                         logger.debug("Variables List: " + execution.getVariables())
1420                         execution.setVariable("UnexpectedError", "Caught a Java Lang Exception - " + Prefix)  // Adding this line temporarily until this flows error handling gets updated
1421                         exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
1422
1423                 }catch(Exception e){
1424                         logger.debug("Caught Exception during processJavaException Method: " + e)
1425                         execution.setVariable("UnexpectedError", "Exception in processJavaException method - " + Prefix)  // Adding this line temporarily until this flows error handling gets updated
1426                         exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method" + Prefix)
1427                 }
1428                 logger.debug( "Completed processJavaException Method in " + Prefix)
1429         }
1430
1431 }