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