91b6c2af0611f80d8c45f325597fa92bb07c4b70
[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
531                         String netName = network.getNetworkName()
532                         String networkOutputs =
533                                         """<network-outputs>
534                    <network-id>${MsoUtils.xmlEscape(netId)}</network-id>
535                    <network-name>${MsoUtils.xmlEscape(netName)}</network-name>
536                  </network-outputs>"""
537                         execution.setVariable(Prefix + "networkOutputs", networkOutputs)
538                         msoLogger.debug(" networkOutputs - " + '\n' + networkOutputs)
539
540
541                 } catch (NotFoundException e) {
542                         String dataErrorMessage = "Response Error from ReQueryAAINetworkId is 404 (Not Found)."
543                         msoLogger.debug(" AAI ReQuery Failed. - " + dataErrorMessage)
544                         exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
545
546                 } catch (Exception ex) {
547                         String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTReQueryAAINetworkId() - " + ex.getMessage()
548                         msoLogger.debug(exceptionMessage)
549                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
550
551                 }
552
553         }
554
555         public void callRESTQueryAAINetworkVpnBinding(DelegateExecution execution) {
556
557                 execution.setVariable("prefix",Prefix)
558
559                 msoLogger.debug(" ***** Inside callRESTQueryAAINetworkVpnBinding() of DoCreateNetworkInstance ***** " )
560
561                 try {
562
563                         AAIResourcesClient client = new AAIResourcesClient()
564                         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, execution.getVariable(Prefix + "networkId"))
565                         Optional<Relationships> relationships = client.get(uri, NotFoundException.class).getRelationships()
566                         if(relationships.isPresent()){
567                                 List<AAIResourceUri> uris = relationships.get().getRelatedAAIUris(AAIObjectType.VPN_BINDING)
568
569                                 msoLogger.debug(Prefix + "vpnCount - " + uris.size())
570
571                                 if (uris.size() > 0) {
572                                         String routeTargets = ""
573                                         for(AAIResourceUri u : uris) {
574
575                                                 AAIResultWrapper wrapper = client.get(u.depth(Depth.TWO), NotFoundException.class)
576                                                 Optional<VpnBinding> binding = wrapper.asBean(VpnBinding.class)
577
578                                                 String routeTarget = ""
579                                                 String routeRole = ""
580                                                 if(binding.get().getRouteTargets() != null) {
581                                                         List<RouteTarget> targets = binding.get().getRouteTargets().getRouteTarget()
582                                                         for(RouteTarget target : targets) {
583                                                                 routeTarget  = target.getGlobalRouteTarget()
584                                                                 routeRole  = target.getRouteTargetRole()
585                                                                 routeTargets += "<routeTargets>" + '\n' +
586                                                                                 " <routeTarget>" + routeTarget + "</routeTarget>" + '\n' +
587                                                                                 " <routeTargetRole>" + routeRole + "</routeTargetRole>" + '\n' +
588                                                                                 "</routeTargets>" + '\n'
589                                                         }
590                                                 }
591
592                                         } // end loop
593
594                                         execution.setVariable(Prefix + "routeCollection", routeTargets)
595                                         msoLogger.debug(Prefix + "routeCollection - " + '\n' + routeTargets)
596
597                                 } else {
598                                         // reset return code to success
599                                         execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "200")
600                                         AaiUtil aaiUriUtil = new AaiUtil(this)
601                                         String schemaVersion = aaiUriUtil.getNamespace()
602                                         String aaiStubResponse =
603                                                         """     <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
604                                                         <vpn-binding xmlns="${schemaVersion}">
605                                                       <global-route-target/>
606                                                         </vpn-binding>
607                                                 </rest:payload>"""
608                                         String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
609                                         execution.setVariable(Prefix + "queryVpnBindingAAIResponse", aaiStubResponseAsXml)
610                                         execution.setVariable(Prefix + "routeCollection", "<routeTargets/>")
611                                         msoLogger.debug(" No vpnBinding, using this stub as response - " + '\n' + aaiStubResponseAsXml)
612
613                                 }
614                         }
615
616                 } catch (NotFoundException e) {
617                         msoLogger.debug("Response Error from AAINetworkVpnBinding is 404 (Not Found).")
618                         exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Response Error from AAINetworkVpnBinding is 404 (Not Found).")
619                 } catch (Exception ex) {
620                         String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkVpnBinding() - " + ex.getMessage()
621                         msoLogger.debug(exceptionMessage)
622                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
623
624                 }
625
626         }
627
628         public void callRESTQueryAAINetworkPolicy(DelegateExecution execution) {
629
630                 execution.setVariable("prefix",Prefix)
631
632                 msoLogger.debug(" ***** Inside callRESTQueryAAINetworkPolicy() of DoCreateNetworkInstance ***** " )
633
634                 try {
635                         AAIResourcesClient client = new AAIResourcesClient()
636                         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, execution.getVariable(Prefix + "networkId"))
637                         Optional<Relationships> relationships = client.get(uri, NotFoundException.class).getRelationships()
638                         if(relationships.isPresent()){
639                                 List<AAIResourceUri> uris = relationships.get().getRelatedAAIUris(AAIObjectType.NETWORK_POLICY)
640
641                                 execution.setVariable(Prefix + "networkPolicyCount", uris.size())
642                                 msoLogger.debug(Prefix + "networkPolicyCount - " + uris.size())
643
644                                 if (uris.size() > 0) {
645
646                                         String networkPolicies = ""
647                                         // AII loop call using list vpnBindings
648                                         for(AAIResourceUri u : uris) {
649
650                                                 NetworkPolicy p = client.get(u, NotFoundException.class).asBean(NetworkPolicy.class).get()
651
652                                                 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
653
654                                                 String networkPolicy  = p.getNetworkPolicyFqdn()
655                                                 networkPolicies += "<policyFqdns>" + networkPolicy + "</policyFqdns>" + '\n'
656
657                                         } // end loop
658
659                                         execution.setVariable(Prefix + "networkCollection", networkPolicies)
660                                         msoLogger.debug(Prefix + "networkCollection - " + '\n' + networkPolicies)
661
662                                 } else {
663                                         // reset return code to success
664                                         execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
665                                         AaiUtil aaiUriUtil = new AaiUtil(this)
666                                         String schemaVersion = aaiUriUtil.getNamespace()
667                                         String aaiStubResponse =
668                                                         """     <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
669                                                         <network-policy xmlns="${schemaVersion}">
670                                                           <network-policy-fqdn/>
671                             </network-policy>
672                                                 </rest:payload>"""
673                                         String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
674                                         execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", aaiStubResponseAsXml)
675                                         execution.setVariable(Prefix + "networkCollection", "<policyFqdns/>")
676                                         msoLogger.debug(" No net policies, using this stub as response - " + '\n' + aaiStubResponseAsXml)
677
678                                 }
679                         }
680         } catch (NotFoundException e) {
681                 String dataErrorMessage = "Response Error from QueryAAINetworkPolicy is 404 (Not Found)."
682                 msoLogger.debug(dataErrorMessage)
683                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
684
685         } catch (Exception ex) {
686                 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkPolicy() - " + ex.getMessage()
687                 msoLogger.debug(exceptionMessage)
688                 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
689
690         }
691
692         }
693
694         public void callRESTQueryAAINetworkTableRef(DelegateExecution execution) {
695
696                 execution.setVariable("prefix",Prefix)
697
698                 msoLogger.debug(" ***** Inside callRESTQueryAAINetworkTableRef() of DoCreateNetworkInstance ***** " )
699
700                 try {
701
702                         AAIResourcesClient client = new AAIResourcesClient()
703                         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, execution.getVariable(Prefix + "networkId"))
704                         Optional<Relationships> relationships = client.get(uri, NotFoundException.class).getRelationships()
705                         if(relationships.isPresent()){
706                                 List<AAIResourceUri> uris = relationships.get().getRelatedAAIUris(AAIObjectType.ROUTE_TABLE_REFERENCE)
707
708                                 execution.setVariable(Prefix + "networkTableRefCount", uris.size())
709                                 msoLogger.debug(Prefix + "networkTableRefCount - " + uris.size())
710
711
712                                 if (uris.size() > 0) {
713
714                                         // AII loop call using list vpnBindings
715                                         String networkTableRefs = ""
716                                         for(AAIResourceUri u : uris) {
717
718                                                 RouteTableReference rt = client.get(u, NotFoundException.class).asBean(RouteTableReference.class).get()
719
720                                                 String networkTableRef  = rt.getRouteTableReferenceFqdn()
721                                                 networkTableRefs += "<routeTableFqdns>" + networkTableRef + "</routeTableFqdns>" + '\n'
722
723
724                                         } // end loop
725
726                                         execution.setVariable(Prefix + "tableRefCollection", networkTableRefs)
727                                         msoLogger.debug(Prefix + "tableRefCollection - " + '\n' + networkTableRefs)
728
729                                 } else {
730                                         // reset return code to success
731                                         execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "200")
732                                         AaiUtil aaiUriUtil = new AaiUtil(this)
733                                         String schemaVersion = aaiUriUtil.getNamespace()
734                                         String aaiStubResponse =
735                                                         """     <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
736                                                         <route-table-references xmlns="${schemaVersion}">
737                                                           <route-table-reference-fqdn/>
738                             </route-table-references>
739                                                 </rest:payload>"""
740                                         String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
741                                         execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", aaiStubResponseAsXml)
742                                         execution.setVariable(Prefix + "tableRefCollection", "<routeTableFqdns/>")
743                                         msoLogger.debug(" No net table references, using this stub as response - " + '\n' + aaiStubResponseAsXml)
744
745                                 }
746                         }
747
748                 } catch (NotFoundException e) {
749                         String dataErrorMessage = "Response Error from QueryAAINetworkTableRef is 404 (Not Found)."
750                         msoLogger.debug(dataErrorMessage)
751                         exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
752
753                 } catch (Exception ex) {
754                         String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkTableRef() - " + ex.getMessage()
755                         msoLogger.debug(exceptionMessage)
756                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
757
758                 }
759
760         }
761
762
763         public void callRESTUpdateContrailAAINetwork(DelegateExecution execution) {
764
765                 execution.setVariable("prefix",Prefix)
766
767                 msoLogger.debug(" ***** Inside callRESTUpdateContrailAAINetwork() of DoCreateNetworkInstance ***** " )
768
769                 try {
770                         // get variables
771                         String networkId   = execution.getVariable(Prefix + "networkId")
772                         String requeryIdAAIResponse   = execution.getVariable(Prefix + "requeryIdAAIResponse")
773                         String createNetworkResponse   = execution.getVariable(Prefix + "createNetworkResponse")
774
775                         L3Network l3Network = new L3Network()
776                         if (utils.nodeExists(requeryIdAAIResponse, 'heat-stack-id')) {
777                         } else {
778                                 if (utils.nodeExists(createNetworkResponse, 'networkStackId')) {
779                                         l3Network.setHeatStackId(utils.getNodeText(createNetworkResponse, 'networkStackId'))
780                                 }
781                         }
782                         if (utils.nodeExists(requeryIdAAIResponse, 'neutron-network-id')) {
783                         } else {
784                                 if (utils.nodeExists(createNetworkResponse, 'neutronNetworkId')) {
785                                         l3Network.setNeutronNetworkId(utils.getNodeText(createNetworkResponse, 'neutronNetworkId'))
786                                 }
787                         }
788                         if (utils.nodeExists(requeryIdAAIResponse, 'contrail-network-fqdn')) {
789                         } else {
790                                 if (utils.nodeExists(createNetworkResponse, 'networkFqdn')) {
791                                         l3Network.setContrailNetworkFqdn(utils.getNodeText(createNetworkResponse, 'networkFqdn'))
792                                 }
793                         }
794
795                         String status = utils.getNodeText(createNetworkResponse, 'orchestration-status')
796                         if(status.equals("pending-create") || status.equals("PendingCreate")){
797                                 l3Network.setOperationalStatus("Created")
798                         }else{
799                                 l3Network.setOperationalStatus("Active")
800                         }
801
802                         AAIResourcesClient client = new AAIResourcesClient()
803                         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId)
804                         client.update(uri, l3Network)
805
806                         String subnetsXml = utils.getNodeXml(requeryIdAAIResponse, "subnets")
807                         InputSource source = new InputSource(new StringReader(subnetsXml));
808                         DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
809                         docFactory.setNamespaceAware(true)
810                         DocumentBuilder docBuilder = docFactory.newDocumentBuilder()
811                         Document xml = docBuilder.parse(source)
812                         NodeList nodeList = xml.getElementsByTagNameNS("*", "subnet")
813                         for (int x = 0; x < nodeList.getLength(); x++) {
814                                 Node node = nodeList.item(x)
815                                 if (node.getNodeType() == Node.ELEMENT_NODE) {
816                                         Element eElement = (Element) node
817                                         String subnetOrchStatus = eElement.getElementsByTagNameNS("*", "orchestration-status").item(0).getTextContent()
818                                         String subnetId = eElement.getElementsByTagNameNS("*", "subnet-id").item(0).getTextContent()
819                                         Subnet subnet = new Subnet()
820                                         String neutronSubnetId = networkUtils.extractNeutSubId(createNetworkResponse, subnetId)
821                                         subnet.setNeutronSubnetId(neutronSubnetId)
822                                         if(subnetOrchStatus.equals("pending-create") || subnetOrchStatus.equals("PendingCreate") ){
823                                                 subnet.setOrchestrationStatus("Created")
824                                         }else{
825                                                 subnet.setOrchestrationStatus("Active")
826                                         }
827
828                                         AAIResourceUri subUri = AAIUriFactory.createResourceUri(AAIObjectType.SUBNET, networkId, subnetId)
829                                         client.update(subUri, subnet)
830                                 }
831                         }
832
833                         String rollbackEnabled = execution.getVariable(Prefix + "rollbackEnabled")
834                         if (rollbackEnabled == "true") {
835                                 execution.setVariable(Prefix + "isPONR", false)
836                         } else {
837                                 execution.setVariable(Prefix + "isPONR", true)
838                         }
839                         msoLogger.debug(Prefix + "isPONR" + ": " + execution.getVariable(Prefix + "isPONR"))
840
841                 } catch (BpmnError e) {
842                         throw e;
843                 } catch (NotFoundException e) {
844                         String dataErrorMessage = " Response Error from UpdateContrailAAINetwork is 404 (Not Found)."
845                         msoLogger.debug(dataErrorMessage)
846                         exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
847                 } catch (Exception ex) {
848                         String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTUpdateContrailAAINetwork() - " + ex.getMessage()
849                         msoLogger.debug(exceptionMessage)
850                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
851                 }
852         }
853
854         public void prepareCreateNetworkRequest (DelegateExecution execution) {
855
856                 execution.setVariable("prefix",Prefix)
857
858                 msoLogger.trace("Inside prepareCreateNetworkRequest() of DoCreateNetworkInstance")
859
860                 try {
861
862                         // get variables
863                         String requestId = execution.getVariable("msoRequestId")
864                         if (requestId == null) {
865                                 requestId = execution.getVariable("mso-request-id")
866                         }
867                         String messageId = execution.getVariable(Prefix + "messageId")
868                         String source    = execution.getVariable(Prefix + "source")
869
870                         String requestInput = execution.getVariable(Prefix + "networkRequest")
871                         L3Network queryIdResponse = execution.getVariable(Prefix + "queryIdAAIResponse")
872                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionPo")
873                         String backoutOnFailure = execution.getVariable(Prefix + "rollbackEnabled")
874
875                         // Prepare Network request
876                         String routeCollection = execution.getVariable(Prefix + "routeCollection")
877                         String policyCollection = execution.getVariable(Prefix + "networkCollection")
878                         String tableCollection = execution.getVariable(Prefix + "tableRefCollection")
879                         String createNetworkRequest = networkUtils.CreateNetworkRequestV2(execution, requestId, messageId, requestInput, queryIdResponse, routeCollection, policyCollection, tableCollection, cloudRegionId, backoutOnFailure, source )
880                         // Format Response
881                         String buildDeleteNetworkRequestAsString = utils.formatXml(createNetworkRequest)
882                         buildDeleteNetworkRequestAsString = buildDeleteNetworkRequestAsString.replace(":w1aac13n0", "").replace("w1aac13n0:", "")
883
884                         execution.setVariable(Prefix + "createNetworkRequest", buildDeleteNetworkRequestAsString)
885                         msoLogger.debug(Prefix + "createNetworkRequest - " + "\n" +  buildDeleteNetworkRequestAsString)
886
887                 } catch (Exception ex) {
888                         String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareCreateNetworkRequest() - " + ex.getMessage()
889                         msoLogger.debug(exceptionMessage)
890                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
891
892                 }
893
894         }
895
896         public void prepareSDNCRequest (DelegateExecution execution) {
897
898                 execution.setVariable("prefix",Prefix)
899
900                 msoLogger.trace("Inside prepareSDNCRequest() of DoCreateNetworkInstance")
901
902                 try {
903                         // get variables
904                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
905                         String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
906                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
907
908                         String networkId = execution.getVariable(Prefix + "networkId")
909                         String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
910
911                         // get/set 'msoRequestId' and 'mso-request-id'
912                         String requestId = execution.getVariable("msoRequestId")
913                         if (requestId != null) {
914                                 execution.setVariable("mso-request-id", requestId)
915                         } else {
916                             requestId = execution.getVariable("mso-request-id")
917                         }
918                         execution.setVariable(Prefix + "requestId", requestId)
919
920                         // 1. prepare assign topology via SDNC Adapter SUBFLOW call
921                         String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, createNetworkInput, serviceInstanceId, sdncCallback, "assign", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
922
923                         String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
924                         execution.setVariable(Prefix + "assignSDNCRequest", sndcTopologyCreateRequesAsString)
925                         msoLogger.debug(Prefix + "assignSDNCRequest - " + "\n" +  sndcTopologyCreateRequesAsString)
926
927
928                 } catch (Exception ex) {
929                         String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSDNCRequest() - " + ex.getMessage()
930                         msoLogger.debug(exceptionMessage)
931                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
932
933                 }
934
935         }
936
937         public void prepareRpcSDNCRequest (DelegateExecution execution) {
938
939                 execution.setVariable("prefix",Prefix)
940
941                 msoLogger.trace("Inside prepareRpcSDNCRequest() of DoCreateNetworkInstance")
942
943                 try {
944                         // get variables
945
946                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
947                         String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
948                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
949
950                         String networkId = execution.getVariable(Prefix + "networkId")
951                         String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
952
953                         // 1. prepare assign topology via SDNC Adapter SUBFLOW call
954                         String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "assign", "CreateNetworkInstance", cloudRegionId, networkId, null)
955
956                         String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
957                         execution.setVariable(Prefix + "assignSDNCRequest", sndcTopologyCreateRequesAsString)
958                         msoLogger.debug(Prefix + "assignSDNCRequest - " + "\n" +  sndcTopologyCreateRequesAsString)
959
960                 } catch (Exception ex) {
961                         String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCRequest() - " + ex.getMessage()
962                         msoLogger.debug(exceptionMessage)
963                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
964
965                 }
966
967         }
968
969         public void prepareRpcSDNCActivateRequest (DelegateExecution execution) {
970
971                 execution.setVariable("prefix",Prefix)
972
973                 msoLogger.trace("Inside prepareRpcSDNCActivateRequest() of DoCreateNetworkInstance")
974
975                 try {
976                         // get variables
977                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
978                         String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
979                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
980                         String networkId = execution.getVariable(Prefix + "networkId")
981                         String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
982
983                         // 1. prepare assign topology via SDNC Adapter SUBFLOW call
984                         String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "activate", "CreateNetworkInstance", cloudRegionId, networkId, null)
985
986                         String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
987                         execution.setVariable(Prefix + "activateSDNCRequest", sndcTopologyCreateRequesAsString)
988                         msoLogger.debug(Prefix + "activateSDNCRequest - " + "\n" +  sndcTopologyCreateRequesAsString)
989
990
991                 } catch (Exception ex) {
992                         String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCActivateRequest() - " + ex.getMessage()
993                         msoLogger.debug(exceptionMessage)
994                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
995
996                 }
997
998         }
999
1000
1001
1002
1003         // **************************************************
1004         //     Post or Validate Response Section
1005         // **************************************************
1006
1007         public void validateCreateNetworkResponse (DelegateExecution execution) {
1008
1009                 execution.setVariable("prefix",Prefix)
1010
1011                 msoLogger.trace("Inside validateNetworkResponse() of DoCreateNetworkInstance")
1012
1013                 try {
1014                         String returnCode = execution.getVariable(Prefix + "networkReturnCode")
1015                         String networkResponse = execution.getVariable(Prefix + "createNetworkResponse")
1016                         if (networkResponse==null)      {
1017                                 networkResponse="" // reset
1018                         }
1019
1020                         msoLogger.debug(" Network Adapter create responseCode: " + returnCode)
1021
1022                         String errorMessage = ""
1023                         if (returnCode == "200") {
1024                                 execution.setVariable(Prefix + "isNetworkRollbackNeeded", true)
1025                                 execution.setVariable(Prefix + "createNetworkResponse", networkResponse)
1026                                 msoLogger.debug(" Network Adapter create Success Response - " + "\n" + networkResponse)
1027
1028                                 // prepare rollback data
1029                                 String rollbackData = utils.getNodeXml(networkResponse, "rollback", false).replace("tag0:","").replace(":tag0","")
1030                                 rollbackData = rollbackData.replace("rollback>", "networkRollback>")
1031                                 String rollbackNetwork =
1032                                         """<rollbackNetworkRequest>
1033                                                         ${rollbackData}
1034                                                 </rollbackNetworkRequest>"""
1035                                 String rollbackNetworkXml = utils.formatXml(rollbackNetwork)
1036                                 execution.setVariable(Prefix + "rollbackNetworkRequest", rollbackNetworkXml)
1037                                 msoLogger.debug(" Network Adapter rollback data - " + "\n" + rollbackNetworkXml)
1038
1039                         } else { // network error
1040                            if (returnCode.toInteger() > 399 && returnCode.toInteger() < 600) {   //4xx, 5xx
1041                                    if (networkResponse.contains("createNetworkError")) {
1042                                            networkResponse = networkResponse.replace('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>', '')
1043                                            errorMessage = utils.getNodeText(networkResponse, "message")
1044                                            errorMessage  = "Received error from Network Adapter: " + errorMessage
1045                                            exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
1046
1047                                    } else { // CatchAll exception
1048                                            if (returnCode == "500") {
1049                                                    errorMessage = "JBWEB000065: HTTP Status 500."
1050                                        } else {
1051                                                errorMessage = "Return code is " + returnCode
1052                                        }
1053                                            errorMessage  = "Received error from Network Adapter: " + errorMessage
1054                                            exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
1055
1056                                    }
1057
1058                            } else { // CatchAll exception
1059                                    String dataErrorMessage  = "Received error from Network Adapter. Return code is: " + returnCode
1060                                    exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
1061
1062                            }
1063
1064                         }
1065
1066                 } catch (BpmnError e) {
1067                         throw e;
1068
1069                 } catch (Exception ex) {
1070                         String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. validateCreateNetworkResponse() - " + ex.getMessage()
1071                         msoLogger.debug(exceptionMessage)
1072                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
1073
1074                 }
1075
1076
1077         }
1078
1079         public void validateSDNCResponse (DelegateExecution execution) {
1080
1081                 execution.setVariable("prefix",Prefix)
1082
1083                 msoLogger.trace("Inside validateSDNCResponse() of DoCreateNetworkInstance")
1084
1085                 String response = execution.getVariable(Prefix + "assignSDNCResponse")
1086                 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
1087                 WorkflowException workflowException = execution.getVariable("WorkflowException")
1088
1089                 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
1090                 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
1091                 // reset variable
1092                 String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "assignSDNCResponse")
1093                 assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
1094                 execution.setVariable(Prefix + "assignSDNCResponse", assignSDNCResponseDecodeXml)
1095
1096                 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) {  // from sdnc util, Prefix+'sdncResponseSuccess'
1097                         execution.setVariable(Prefix + "isSdncRollbackNeeded", true)
1098                         msoLogger.debug("Successfully Validated SDNC Response")
1099
1100                 } else {
1101                         msoLogger.debug("Did NOT Successfully Validated SDNC Response")
1102                         throw new BpmnError("MSOWorkflowException")
1103                 }
1104
1105         }
1106
1107         public void validateRpcSDNCActivateResponse (DelegateExecution execution) {
1108
1109                 execution.setVariable("prefix",Prefix)
1110
1111                 msoLogger.trace("Inside validateRpcSDNCActivateResponse() of DoCreateNetworkInstance")
1112
1113                 String response = execution.getVariable(Prefix + "activateSDNCResponse")
1114                 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
1115                 WorkflowException workflowException = execution.getVariable("WorkflowException")
1116
1117                 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
1118                 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
1119                 // reset variable
1120                 String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "activateSDNCResponse")
1121                 assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
1122                 execution.setVariable(Prefix + "activateSDNCResponse", assignSDNCResponseDecodeXml)
1123
1124                 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) {  // from sdnc util, Prefix+'sdncResponseSuccess'
1125                         execution.setVariable(Prefix + "isSdncActivateRollbackNeeded", true)
1126                         msoLogger.debug("Successfully Validated Rpc SDNC Activate Response")
1127
1128                 } else {
1129                         msoLogger.debug("Did NOT Successfully Validated Rpc SDNC Activate Response")
1130                         throw new BpmnError("MSOWorkflowException")
1131                 }
1132
1133         }
1134
1135
1136         public void prepareSDNCRollbackRequest (DelegateExecution execution) {
1137
1138                 execution.setVariable("prefix",Prefix)
1139
1140                 msoLogger.trace("Inside prepareSDNCRollbackRequest() of DoCreateNetworkInstance")
1141
1142                 try {
1143                         // get variables
1144                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1145                         String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1146                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1147                         String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
1148                         String networkId = execution.getVariable(Prefix + "networkId")
1149                         if (networkId == 'null') {networkId = ""}
1150                         String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1151
1152                         // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1153                         String sndcTopologyRollbackRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, createNetworkInput, serviceInstanceId, sdncCallback, "rollback", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
1154                         String sndcTopologyRollbackRequestAsString = utils.formatXml(sndcTopologyRollbackRequest)
1155                         execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRequestAsString)
1156                         msoLogger.debug(" Preparing request for SDNC Topology 'rollback-NetworkActivateRequest' rollback . . . - " + "\n" +  sndcTopologyRollbackRequestAsString)
1157
1158
1159                 } catch (Exception ex) {
1160                         String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSDNCRollbackRequest() - " + ex.getMessage()
1161                         msoLogger.debug(exceptionMessage)
1162                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1163
1164                 }
1165
1166         }
1167
1168         public void prepareRpcSDNCRollbackRequest (DelegateExecution execution) {
1169
1170                 execution.setVariable("prefix",Prefix)
1171
1172                 msoLogger.trace("Inside prepareRpcSDNCRollbackRequest() of DoCreateNetworkInstance")
1173
1174                 try {
1175                         // get variables
1176                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1177                         String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1178                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1179                         String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
1180                         String networkId = execution.getVariable(Prefix + "networkId")
1181                         if (networkId == 'null') {networkId = ""}
1182                         String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1183
1184                         // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1185                         String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "unassign", "DeleteNetworkInstance", cloudRegionId, networkId, null)
1186                         String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
1187                         execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
1188                         msoLogger.debug(" Preparing request for SDNC Topology 'unassign-DeleteNetworkInstance' rollback . . . - " + "\n" +  sndcTopologyRollbackRpcRequestAsString)
1189
1190
1191                 } catch (Exception ex) {
1192                         String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCRollbackRequest() - " + ex.getMessage()
1193                         msoLogger.debug(exceptionMessage)
1194                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1195
1196                 }
1197
1198         }
1199
1200         public void prepareRpcSDNCActivateRollback(DelegateExecution execution) {
1201
1202                 execution.setVariable("prefix",Prefix)
1203
1204                 msoLogger.trace("Inside prepareRpcSDNCActivateRollback() of DoCreateNetworkInstance")
1205
1206                 try {
1207
1208                         // get variables
1209                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1210                         String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1211                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1212                         String activateSDNCResponse = execution.getVariable(Prefix + "activateSDNCResponse")
1213                         String networkId = execution.getVariable(Prefix + "networkId")
1214                         if (networkId == 'null') {networkId = ""}
1215                         String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1216
1217                         // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1218                         String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "deactivate", "DeleteNetworkInstance", cloudRegionId, networkId, null)
1219                         String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
1220                         execution.setVariable(Prefix + "rollbackActivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
1221                         msoLogger.debug(" Preparing request for RPC SDNC Topology 'deactivate-DeleteNetworkInstance' rollback . . . - " + "\n" +  sndcTopologyRollbackRpcRequestAsString)
1222
1223
1224                 } catch (Exception ex) {
1225                         String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCActivateRollback() - " + ex.getMessage()
1226                         msoLogger.debug(exceptionMessage)
1227                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1228
1229                 }
1230
1231         }
1232
1233         public void prepareRollbackData(DelegateExecution execution) {
1234
1235                 execution.setVariable("prefix",Prefix)
1236
1237                 msoLogger.trace("Inside prepareRollbackData() of DoCreateNetworkInstance")
1238
1239                 try {
1240
1241                         Map<String, String> rollbackData = new HashMap<String, String>();
1242                         String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
1243                         if (rollbackSDNCRequest != null) {
1244                                 if (rollbackSDNCRequest != "") {
1245                                 rollbackData.put("rollbackSDNCRequest", execution.getVariable(Prefix + "rollbackSDNCRequest"))
1246                             }
1247                         }
1248                         String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
1249                         if (rollbackNetworkRequest != null) {
1250                                 if (rollbackNetworkRequest != "") {
1251                                 rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
1252                                 }
1253                         }
1254                         String rollbackActivateSDNCRequest = execution.getVariable(Prefix + "rollbackActivateSDNCRequest")
1255                         if (rollbackActivateSDNCRequest != null) {
1256                                 if (rollbackActivateSDNCRequest != "") {
1257                                 rollbackData.put("rollbackActivateSDNCRequest", execution.getVariable(Prefix + "rollbackActivateSDNCRequest"))
1258                                 }
1259                         }
1260                         execution.setVariable("rollbackData", rollbackData)
1261                         msoLogger.debug("** rollbackData : " + rollbackData)
1262
1263                         execution.setVariable("WorkflowException", execution.getVariable(Prefix + "WorkflowException"))
1264                         msoLogger.debug("** WorkflowException : " + execution.getVariable("WorkflowException"))
1265
1266                 } catch (Exception ex) {
1267                         String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRollbackData() - " + ex.getMessage()
1268                         msoLogger.debug(exceptionMessage)
1269                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1270
1271                 }
1272
1273         }
1274
1275         public void postProcessResponse(DelegateExecution execution) {
1276
1277                 execution.setVariable("prefix",Prefix)
1278
1279                 msoLogger.trace("Inside postProcessResponse() of DoCreateNetworkInstance")
1280
1281                 try {
1282
1283                         //Conditions:
1284                         // 1. Silent Success: execution.getVariable("CRENWKI_orchestrationStatus") == "ACTIVE"
1285                         // 2. Success: execution.getVariable("WorkflowException") == null (NULL)
1286                         // 3. WorkflowException: execution.getVariable("WorkflowException") != null (NOT NULL)
1287
1288                         msoLogger.debug(" ***** Is Exception Encountered (isException)? : " + execution.getVariable(Prefix + "isException"))
1289                         // successful flow
1290                         if (execution.getVariable(Prefix + "isException") == false) {
1291                                 // set rollback data
1292                                 execution.setVariable("orchestrationStatus", "")
1293                                 execution.setVariable("networkId", execution.getVariable(Prefix + "networkId"))
1294                                 execution.setVariable("networkName", execution.getVariable(Prefix + "networkName"))
1295                                 prepareSuccessRollbackData(execution) // populate rollbackData
1296                                 execution.setVariable("WorkflowException", null)
1297                                 execution.setVariable(Prefix + "Success", true)
1298                                 msoLogger.debug(" ***** postProcessResponse(), GOOD !!!")
1299                         } else {
1300                            // inside sub-flow logic
1301                                 execution.setVariable(Prefix + "Success", false)
1302                                 execution.setVariable("rollbackData", null)
1303                                 String exceptionMessage = " Exception encountered in MSO Bpmn. "
1304                                 if (execution.getVariable("workflowException") != null) {  // Output of Rollback flow.
1305                                    msoLogger.debug(" ***** workflowException: " + execution.getVariable("workflowException"))
1306                                    WorkflowException wfex = execution.getVariable("workflowException")
1307                                    exceptionMessage = wfex.getErrorMessage()
1308                                 } else {
1309                                if (execution.getVariable(Prefix + "WorkflowException") != null) {
1310                                       WorkflowException pwfex = execution.getVariable(Prefix + "WorkflowException")
1311                                       exceptionMessage = pwfex.getErrorMessage()
1312                                }
1313                                 }
1314                             // going to the Main flow: a-la-carte or macro
1315                             msoLogger.debug(" ***** postProcessResponse(), BAD !!!")
1316                             exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1317                                 throw new BpmnError("MSOWorkflowException")
1318                         }
1319
1320                 } catch(BpmnError b){
1321                      msoLogger.debug("Rethrowing MSOWorkflowException")
1322                      throw b
1323
1324                 } catch (Exception ex) {
1325                         String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. postProcessResponse() - " + ex.getMessage()
1326                         msoLogger.debug(exceptionMessage)
1327                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1328                         throw new BpmnError("MSOWorkflowException")
1329
1330                 }
1331
1332
1333
1334         }
1335
1336         public void prepareSuccessRollbackData(DelegateExecution execution) {
1337
1338                 execution.setVariable("prefix",Prefix)
1339
1340                 msoLogger.trace("Inside prepareSuccessRollbackData() of DoCreateNetworkInstance")
1341
1342                 try {
1343
1344                         if (execution.getVariable("sdncVersion") != '1610') {
1345                             prepareRpcSDNCRollbackRequest(execution)
1346                                 prepareRpcSDNCActivateRollback(execution)
1347                         } else {
1348                             prepareSDNCRollbackRequest(execution)
1349                         }
1350
1351                         Map<String, String> rollbackData = new HashMap<String, String>();
1352                         String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
1353                         if (rollbackSDNCRequest != null) {
1354                                 if (rollbackSDNCRequest != "") {
1355                                         rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
1356                                 }
1357                         }
1358                         String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
1359                         if (rollbackNetworkRequest != null) {
1360                                 if (rollbackNetworkRequest != "") {
1361                                         rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
1362                                 }
1363                         }
1364                         String rollbackActivateSDNCRequest = execution.getVariable(Prefix + "rollbackActivateSDNCRequest")
1365                         if (rollbackActivateSDNCRequest != null) {
1366                                 if (rollbackActivateSDNCRequest != "") {
1367                                         rollbackData.put("rollbackActivateSDNCRequest", rollbackActivateSDNCRequest)
1368                                 }
1369                         }
1370                         execution.setVariable("rollbackData", rollbackData)
1371
1372                         msoLogger.debug("** 'rollbackData' for Full Rollback : " + rollbackData)
1373                         execution.setVariable("WorkflowException", null)
1374
1375
1376                 } catch (Exception ex) {
1377                         String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage()
1378                         msoLogger.debug(exceptionMessage)
1379                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1380
1381                 }
1382
1383         }
1384
1385         public void setExceptionFlag(DelegateExecution execution){
1386
1387                 execution.setVariable("prefix",Prefix)
1388
1389                 msoLogger.trace("Inside setExceptionFlag() of DoCreateNetworkInstance")
1390
1391                 try {
1392
1393                         execution.setVariable(Prefix + "isException", true)
1394
1395                         if (execution.getVariable("SavedWorkflowException1") != null) {
1396                                 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
1397                         } else {
1398                                 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
1399                         }
1400                         msoLogger.debug(Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"))
1401
1402                 } catch(Exception ex){
1403                         String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. setExceptionFlag(): " + ex.getMessage()
1404                         msoLogger.debug(exceptionMessage)
1405                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1406                 }
1407
1408         }
1409
1410
1411         // *******************************
1412         //     Build Error Section
1413         // *******************************
1414
1415
1416
1417         public void processJavaException(DelegateExecution execution){
1418
1419                 execution.setVariable("prefix",Prefix)
1420
1421                 try{
1422                         msoLogger.debug( "Caught a Java Exception in " + Prefix)
1423                         msoLogger.debug("Started processJavaException Method")
1424                         msoLogger.debug("Variables List: " + execution.getVariables())
1425                         execution.setVariable("UnexpectedError", "Caught a Java Lang Exception - " + Prefix)  // Adding this line temporarily until this flows error handling gets updated
1426                         exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
1427
1428                 }catch(Exception e){
1429                         msoLogger.debug("Caught Exception during processJavaException Method: " + e)
1430                         execution.setVariable("UnexpectedError", "Exception in processJavaException method - " + Prefix)  // Adding this line temporarily until this flows error handling gets updated
1431                         exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method" + Prefix)
1432                 }
1433                 msoLogger.debug( "Completed processJavaException Method in " + Prefix)
1434         }
1435
1436 }