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