2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.onap.so.bpmn.infrastructure.scripts;
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.AAIObjectType
40 import org.onap.so.client.aai.AAIResourcesClient
41 import org.onap.so.client.aai.entities.uri.AAIResourceUri
42 import org.onap.so.client.aai.entities.uri.AAIUriFactory
43 import org.onap.so.client.aai.entities.AAIResultWrapper
44 import org.onap.so.client.graphinventory.entities.uri.Depth
45 import org.onap.so.constants.Defaults
46 import org.onap.so.logger.MsoLogger
48 import org.springframework.web.util.UriUtils
49 import org.w3c.dom.Document
50 import org.w3c.dom.Element
51 import org.w3c.dom.NamedNodeMap
52 import org.w3c.dom.Node
53 import org.w3c.dom.NodeList;
54 import org.xml.sax.InputSource
55 import org.onap.aai.domain.yang.VpnBinding
56 import org.onap.aai.domain.yang.L3Network
57 import org.onap.aai.domain.yang.NetworkPolicy
58 import org.onap.aai.domain.yang.RouteTableReference
59 import org.onap.aai.domain.yang.RouteTarget
60 import org.onap.aai.domain.yang.Subnet
61 import javax.ws.rs.NotFoundException
64 import groovy.xml.XmlUtil
67 * This groovy class supports the <class>DoUpdateNetworkInstance.bpmn</class> process.
70 public class DoUpdateNetworkInstance extends AbstractServiceTaskProcessor {
71 private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, DoUpdateNetworkInstance.class);
73 String Prefix="UPDNETI_"
74 ExceptionUtil exceptionUtil = new ExceptionUtil()
75 JsonUtils jsonUtil = new JsonUtils()
76 VidUtils vidUtils = new VidUtils(this)
77 NetworkUtils networkUtils = new NetworkUtils()
78 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
81 * This method is executed during the preProcessRequest task of the <class>DoUpdateNetworkInstance.bpmn</class> process.
84 public InitializeProcessVariables(DelegateExecution execution){
85 /* Initialize all the process variables in this block */
87 execution.setVariable(Prefix + "messageId", "")
88 execution.setVariable("BasicAuthHeaderValuePO", "")
89 execution.setVariable("BasicAuthHeaderValueSDNC", "")
90 execution.setVariable(Prefix + "networkRequest", "")
91 execution.setVariable(Prefix + "networkInputs", "")
92 execution.setVariable(Prefix + "networkOutputs", "")
93 execution.setVariable(Prefix + "requestId", "")
94 execution.setVariable(Prefix + "source", "")
95 execution.setVariable(Prefix + "networkId", "")
97 execution.setVariable(Prefix + "isPONR", false) // Point-of-no-return, means, rollback is not needed
99 // AAI query Cloud Region
100 execution.setVariable(Prefix + "queryCloudRegionRequest","")
101 execution.setVariable(Prefix + "queryCloudRegionReturnCode","")
102 execution.setVariable(Prefix + "queryCloudRegionResponse","")
103 execution.setVariable(Prefix + "cloudRegionPo","")
104 execution.setVariable(Prefix + "cloudRegionSdnc","")
105 execution.setVariable(Prefix + "isCloudRegionGood", false)
108 execution.setVariable(Prefix + "queryIdAAIRequest","")
109 execution.setVariable(Prefix + "queryIdAAIResponse", "")
110 execution.setVariable(Prefix + "aaiIdReturnCode", "")
112 // AAI query vpn binding
113 execution.setVariable(Prefix + "queryVpnBindingAAIRequest","")
114 execution.setVariable(Prefix + "queryVpnBindingAAIResponse", "")
115 execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "")
116 execution.setVariable(Prefix + "vpnBindings", null)
117 execution.setVariable(Prefix + "vpnCount", 0)
118 execution.setVariable(Prefix + "routeCollection", "")
120 // AAI query network policy
121 execution.setVariable(Prefix + "queryNetworkPolicyAAIRequest","")
122 execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", "")
123 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "")
124 execution.setVariable(Prefix + "networkPolicyUriList", null)
125 execution.setVariable(Prefix + "networkPolicyCount", 0)
126 execution.setVariable(Prefix + "networkCollection", "")
128 // AAI query route table reference
129 execution.setVariable(Prefix + "queryNetworkTableRefAAIRequest","")
130 execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", "")
131 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "")
132 execution.setVariable(Prefix + "networkTableRefUriList", null)
133 execution.setVariable(Prefix + "networkTableRefCount", 0)
134 execution.setVariable(Prefix + "tableRefCollection", "")
137 execution.setVariable(Prefix + "requeryIdAAIRequest","")
138 execution.setVariable(Prefix + "requeryIdAAIResponse", "")
139 execution.setVariable(Prefix + "aaiRequeryIdReturnCode", "")
141 // AAI update contrail
142 execution.setVariable(Prefix + "updateContrailAAIUrlRequest","")
143 execution.setVariable(Prefix + "updateContrailAAIPayloadRequest","")
144 execution.setVariable(Prefix + "updateContrailAAIResponse", "")
145 execution.setVariable(Prefix + "aaiUpdateContrailReturnCode", "")
147 execution.setVariable(Prefix + "updateNetworkRequest", "")
148 execution.setVariable(Prefix + "updateNetworkResponse", "")
149 execution.setVariable(Prefix + "rollbackNetworkRequest", "")
150 execution.setVariable(Prefix + "networkReturnCode", "")
151 execution.setVariable(Prefix + "isNetworkRollbackNeeded", false)
153 execution.setVariable(Prefix + "changeAssignSDNCRequest", "")
154 execution.setVariable(Prefix + "changeAssignSDNCResponse", "")
155 execution.setVariable(Prefix + "rollbackSDNCRequest", "")
156 execution.setVariable(Prefix + "sdncReturnCode", "")
157 execution.setVariable(Prefix + "isSdncRollbackNeeded", false)
158 execution.setVariable(Prefix + "sdncResponseSuccess", false)
160 execution.setVariable(Prefix + "isVnfBindingPresent", false)
161 execution.setVariable(Prefix + "Success", false)
162 execution.setVariable(Prefix + "serviceInstanceId", "")
164 execution.setVariable(Prefix + "isException", false)
168 // **************************************************
169 // Pre or Prepare Request Section
170 // **************************************************
172 * This method is executed during the preProcessRequest task of the <class>DoUpdateNetworkInstance.bpmn</class> process.
175 public void preProcessRequest (DelegateExecution execution) {
177 execution.setVariable("prefix",Prefix)
179 msoLogger.trace("Inside preProcessRequest DoUpdateNetworkInstance Request ")
182 // initialize flow variables
183 InitializeProcessVariables(execution)
185 // GET Incoming request & validate 3 kinds of format.
186 execution.setVariable("action", "UPDATE")
187 String networkRequest = execution.getVariable("bpmnRequest")
188 if (networkRequest != null) {
189 if (networkRequest.contains("requestDetails")) {
190 // JSON format request is sent, create xml
192 def prettyJson = JsonOutput.prettyPrint(networkRequest.toString())
193 msoLogger.debug(" Incoming message formatted . . . : " + '\n' + prettyJson)
194 networkRequest = vidUtils.createXmlNetworkRequestInfra(execution, networkRequest)
196 } catch (Exception ex) {
197 String dataErrorMessage = " Invalid json format Request - " + ex.getMessage()
198 msoLogger.debug(dataErrorMessage)
199 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
202 // XML format request is sent
206 // vIPR format request is sent, create xml from individual variables
207 networkRequest = vidUtils.createXmlNetworkRequestInstance(execution)
210 networkRequest = utils.formatXml(networkRequest)
211 msoLogger.debug(networkRequest)
212 execution.setVariable(Prefix + "networkRequest", networkRequest)
213 msoLogger.debug(" network-request - " + '\n' + networkRequest)
215 // validate 'disableRollback' (aka, 'suppressRollback')
216 boolean rollbackEnabled = networkUtils.isRollbackEnabled(execution, networkRequest)
217 execution.setVariable(Prefix + "rollbackEnabled", rollbackEnabled)
218 msoLogger.debug(Prefix + "rollbackEnabled - " + rollbackEnabled)
220 String networkInputs = utils.getNodeXml(networkRequest, "network-inputs", false).replace("tag0:","").replace(":tag0","")
221 execution.setVariable(Prefix + "networkInputs", networkInputs)
222 msoLogger.debug(Prefix + "networkInputs - " + '\n' + networkInputs)
225 String messageId = execution.getVariable(Prefix + "messageId") // for testing
226 if (messageId == null || messageId == "") {
227 messageId = UUID.randomUUID()
228 msoLogger.debug(" UPDNETI_messageId, random generated: " + messageId)
230 msoLogger.debug(" UPDNETI_messageId, pre-assigned: " + messageId)
232 execution.setVariable(Prefix + "messageId", messageId)
234 String source = utils.getNodeText(networkRequest, "source")
235 execution.setVariable(Prefix + "source", source)
236 msoLogger.debug(Prefix + "source - " + source)
238 String networkId = ""
239 if (utils.nodeExists(networkRequest, "network-id")) {
240 networkId = utils.getNodeText(networkRequest, "network-id")
241 if (networkId == 'null' || networkId == "") {
242 sendSyncError(execution)
243 // missing value of networkId
244 String dataErrorMessage = "Variable 'network-id' value/element is missing."
245 msoLogger.debug(" Invalid Request - " + dataErrorMessage)
246 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
251 String lcpCloudRegion = ""
252 if (utils.nodeExists(networkRequest, "aic-cloud-region")) {
253 lcpCloudRegion = utils.getNodeText(networkRequest, "aic-cloud-region")
254 if ((lcpCloudRegion == 'null') || (lcpCloudRegion == "")) {
255 sendSyncError(execution)
256 String dataErrorMessage = "requestDetails has missing 'aic-cloud-region' value/element."
257 msoLogger.debug(" Invalid Request - " + dataErrorMessage)
258 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
262 String serviceInstanceId = ""
263 if (utils.nodeExists(networkRequest, "service-instance-id")) {
264 serviceInstanceId = utils.getNodeText(networkRequest, "service-instance-id")
265 if ((serviceInstanceId == 'null') || (lcpCloudRegion == "")) {
266 sendSyncError(execution)
267 String dataErrorMessage = "Variable 'serviceInstanceId' value/element is missing."
268 msoLogger.debug(" Invalid Request - " + dataErrorMessage)
269 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
273 // PO Authorization Info / headers Authorization=
274 String basicAuthValuePO = UrnPropertiesReader.getVariable("mso.adapters.po.auth",execution)
278 def encodedString = utils.getBasicAuth(basicAuthValuePO, UrnPropertiesReader.getVariable("mso.msoKey", execution))
279 execution.setVariable("BasicAuthHeaderValuePO",encodedString)
280 execution.setVariable("BasicAuthHeaderValueSDNC", encodedString)
282 } catch (IOException ex) {
283 String exceptionMessage = "Exception Encountered in DoUpdateNetworkInstance, PreProcessRequest() - "
284 String dataErrorMessage = exceptionMessage + " Unable to encode PO/SDNC user/password string - " + ex.getMessage()
285 msoLogger.debug(dataErrorMessage)
286 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
289 // Set variables for Generic Get Sub Flow use
290 execution.setVariable(Prefix + "serviceInstanceId", serviceInstanceId)
291 msoLogger.debug(Prefix + "serviceInstanceId - " + serviceInstanceId)
293 msoLogger.debug(" Url for SDNC adapter: " + UrnPropertiesReader.getVariable("mso.adapters.sdnc.endpoint",execution))
295 String sdncVersion = execution.getVariable("sdncVersion")
296 msoLogger.debug("sdncVersion? : " + sdncVersion)
298 // build 'networkOutputs'
299 networkId = utils.getNodeText(networkRequest, "network-id")
300 if ((networkId == null) || (networkId == "null")) {
303 String networkName = utils.getNodeText(networkRequest, "network-name")
304 if ((networkName == null) || (networkName == "null")) {
307 String networkOutputs =
309 <network-id>${MsoUtils.xmlEscape(networkId)}</network-id>
310 <network-name>${MsoUtils.xmlEscape(networkName)}</network-name>
311 </network-outputs>"""
312 execution.setVariable(Prefix + "networkOutputs", networkOutputs)
313 msoLogger.debug(Prefix + "networkOutputs - " + '\n' + networkOutputs)
314 execution.setVariable(Prefix + "networkId", networkId)
315 execution.setVariable(Prefix + "networkName", networkName)
318 } catch (BpmnError e) {
321 } catch (Exception ex){
322 sendSyncError(execution)
324 String exceptionMessage = "Exception Encountered in DoUpdateNetworkInstance, PreProcessRequest() - " + ex.getMessage()
325 msoLogger.debug(exceptionMessage)
326 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
332 * Gets the service instance uri from aai
335 public void getServiceInstance(DelegateExecution execution) {
336 msoLogger.trace("getServiceInstance ")
338 String serviceInstanceId = execution.getVariable('serviceInstanceId')
340 AAIResourcesClient resourceClient = new AAIResourcesClient()
341 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, serviceInstanceId)
343 if(!resourceClient.exists(uri)){
344 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "Service Instance not found in aai")
346 Map<String, String> keys = uri.getURIKeys()
347 execution.setVariable("serviceType", keys.get("service-type"))
348 execution.setVariable("subscriberName", keys.get("global-customer-id"))
351 }catch(BpmnError e) {
353 }catch (Exception ex){
354 String msg = "Exception in getServiceInstance. " + ex.getMessage()
356 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
360 public void callRESTQueryAAICloudRegion (DelegateExecution execution) {
362 execution.setVariable("prefix", Prefix)
364 msoLogger.debug(" ***** Inside callRESTQueryAAICloudRegion of DoUpdateNetworkInstance ***** " )
367 String networkInputs = execution.getVariable(Prefix + "networkInputs")
368 String cloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region")
371 String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
372 AaiUtil aaiUtil = new AaiUtil(this)
374 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION, Defaults.CLOUD_OWNER.toString(), cloudRegion)
375 def queryCloudRegionRequest = aaiUtil.createAaiUri(uri)
377 execution.setVariable(Prefix + "queryCloudRegionRequest", queryCloudRegionRequest)
379 String cloudRegionPo = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "PO", cloudRegion)
380 String cloudRegionSdnc = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "SDNC", cloudRegion)
382 if ((cloudRegionPo != "ERROR") && (cloudRegionSdnc != "ERROR")) {
383 execution.setVariable(Prefix + "cloudRegionPo", cloudRegionPo)
384 execution.setVariable(Prefix + "cloudRegionSdnc", cloudRegionSdnc)
385 execution.setVariable(Prefix + "isCloudRegionGood", true)
388 String dataErrorMessage = "QueryAAICloudRegion Unsuccessful. Return Code: " + execution.getVariable(Prefix + "queryCloudRegionReturnCode")
389 msoLogger.debug(dataErrorMessage)
390 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
394 msoLogger.debug(" is Cloud Region Good: " + execution.getVariable(Prefix + "isCloudRegionGood"))
396 } catch (BpmnError e) {
399 } catch (Exception ex) {
401 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow - callRESTQueryAAICloudRegion() - " + ex.getMessage()
402 msoLogger.debug(exceptionMessage)
403 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
409 public void callRESTQueryAAINetworkId(DelegateExecution execution) {
411 execution.setVariable("prefix", Prefix)
413 msoLogger.debug(" ***** Inside callRESTQueryAAINetworkId of DoUpdateNetworkInstance ***** " )
417 String networkRequest = execution.getVariable(Prefix + "networkRequest")
418 String networkId = utils.getNodeText(networkRequest, "network-id")
419 execution.setVariable(Prefix + "networkId", networkId)
421 AAIResourcesClient client = new AAIResourcesClient()
422 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId).depth(Depth.ONE)
423 AAIResultWrapper network = client.get(uri, NotFoundException.class)
425 execution.setVariable(Prefix + "aaiIdReturnCode", "200")
427 execution.setVariable(Prefix + "queryIdAAIResponse", network)
430 } catch (NotFoundException e) {
431 String dataErrorMessage = "Response Error from QueryAAINetworkId is 404 (Not Found)."
432 msoLogger.debug(" AAI Query Failed. " + dataErrorMessage)
433 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
434 } catch (Exception ex) {
435 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTQueryAAINetworkId() - " + ex.getMessage()
436 msoLogger.debug(exceptionMessage)
437 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
443 public void callRESTReQueryAAINetworkId(DelegateExecution execution) {
445 execution.setVariable("prefix", Prefix)
447 msoLogger.debug(" ***** Inside callRESTReQueryAAINetworkId of DoUpdateNetworkInstance ***** " )
451 String networkRequest = execution.getVariable(Prefix + "networkRequest")
452 String networkId = utils.getNodeText(networkRequest, "network-id")
454 AAIResourcesClient client = new AAIResourcesClient()
455 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId).depth(Depth.ONE)
456 AAIResultWrapper network = client.get(uri, NotFoundException.class)
458 execution.setVariable(Prefix + "aaiRequeryIdReturnCode", "200")
459 execution.setVariable(Prefix + "requeryIdAAIResponse", network)
461 L3Network net = network.asBean(L3Network.class).get()
462 String netId = net.getNetworkId()
463 String netName = net.getNetworkName()
464 String networkOutputs =
466 <network-id>${MsoUtils.xmlEscape(netId)}</network-id>
467 <network-name>${MsoUtils.xmlEscape(netName)}</network-name>
468 </network-outputs>"""
469 execution.setVariable(Prefix + "networkOutputs", networkOutputs)
470 msoLogger.debug(" networkOutputs - " + '\n' + networkOutputs)
472 } catch (NotFoundException e) {
473 String dataErrorMessage = "Response Error from ReQueryAAINetworkId is 404 (Not Found)."
474 msoLogger.debug(" AAI ReQuery Failed. - " + dataErrorMessage)
475 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
476 } catch (Exception ex) {
477 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTReQueryAAINetworkId() - " + ex.getMessage()
478 msoLogger.debug(exceptionMessage)
479 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
485 public void callRESTQueryAAINetworkVpnBinding(DelegateExecution execution) {
487 execution.setVariable("prefix", Prefix)
489 msoLogger.debug(" ***** Inside callRESTQueryAAINetworkVpnBinding of DoUpdateNetworkInstance ***** " )
494 AAIResultWrapper queryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
495 if(queryIdAAIResponse.getRelationships().isPresent()){
496 List<AAIResourceUri> uris = queryIdAAIResponse.getRelationships().get().getRelatedAAIUris(AAIObjectType.VPN_BINDING)
498 msoLogger.debug(Prefix + "vpnCount - " + uris.size())
500 if (uris.size() > 0) {
501 String routeTargets = ""
502 for(AAIResourceUri u : uris) {
504 AAIResourcesClient client = new AAIResourcesClient()
505 AAIResultWrapper wrapper = client.get(u.depth(Depth.TWO), NotFoundException.class)
506 Optional<VpnBinding> binding = wrapper.asBean(VpnBinding.class)
508 String routeTarget = ""
509 String routeRole = ""
510 if(binding.get().getRouteTargets() != null) {
511 List<RouteTarget> targets = binding.get().getRouteTargets().getRouteTarget()
512 for(RouteTarget target : targets) {
513 routeTarget = target.getGlobalRouteTarget()
514 routeRole = target.getRouteTargetRole()
515 routeTargets += "<routeTargets>" + '\n' +
516 " <routeTarget>" + routeTarget + "</routeTarget>" + '\n' +
517 " <routeTargetRole>" + routeRole + "</routeTargetRole>" + '\n' +
518 "</routeTargets>" + '\n'
524 execution.setVariable(Prefix + "routeCollection", routeTargets)
525 msoLogger.debug(" UPDNETI_routeCollection - " + '\n' + routeTargets)
528 // reset return code to success
529 execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "200")
530 AaiUtil aaiUriUtil = new AaiUtil(this)
531 String schemaVersion = aaiUriUtil.getNamespace()
532 String aaiStubResponse =
533 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
534 <vpn-binding xmlns="${schemaVersion}">
535 <global-route-target/>
538 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
539 execution.setVariable(Prefix + "queryVpnBindingAAIResponse", aaiStubResponseAsXml)
540 execution.setVariable(Prefix + "routeCollection", "<routeTargets/>")
541 msoLogger.debug(" No vpnBinding, using this stub as response - " + '\n' + aaiStubResponseAsXml)
546 } catch (NotFoundException e) {
547 msoLogger.debug("Response Error from AAINetworkVpnBinding is 404 (Not Found).")
548 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Response Error from AAINetworkVpnBinding is 404 (Not Found).")
549 } catch (Exception ex) {
550 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTQueryAAINetworkVpnBinding() - " + ex.getMessage()
551 msoLogger.debug(exceptionMessage)
552 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
558 public void callRESTQueryAAINetworkPolicy(DelegateExecution execution) {
560 execution.setVariable("prefix", Prefix)
562 msoLogger.debug(" ***** Inside callRESTQueryAAINetworkPolicy of DoUpdateNetworkInstance ***** " )
566 AAIResultWrapper queryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
567 if(queryIdAAIResponse.getRelationships().isPresent()){
568 List<AAIResourceUri> uris = queryIdAAIResponse.getRelationships().get().getRelatedAAIUris(AAIObjectType.NETWORK_POLICY)
570 execution.setVariable(Prefix + "networkPolicyCount", uris.size())
571 msoLogger.debug(Prefix + "networkPolicyCount - " + uris.size())
573 if (uris.size() > 0) {
575 String networkPolicies = ""
576 // AII loop call using list vpnBindings
577 for(AAIResourceUri u : uris) {
579 AAIResourcesClient client = new AAIResourcesClient()
580 NetworkPolicy p = client.get(u, NotFoundException.class).asBean(NetworkPolicy.class).get()
582 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
584 String networkPolicy = p.getNetworkPolicyFqdn()
585 networkPolicies += "<policyFqdns>" + networkPolicy + "</policyFqdns>" + '\n'
589 execution.setVariable(Prefix + "networkCollection", networkPolicies)
590 msoLogger.debug(" UPDNETI_networkCollection - " + '\n' + networkPolicies)
593 // reset return code to success
594 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
595 AaiUtil aaiUriUtil = new AaiUtil(this)
596 String schemaVersion = aaiUriUtil.getNamespace()
597 String aaiStubResponse =
598 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
599 <network-policy xmlns="${schemaVersion}">
600 <network-policy-fqdn/>
603 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
604 execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", aaiStubResponseAsXml)
605 execution.setVariable(Prefix + "networkCollection", "<policyFqdns/>")
606 msoLogger.debug(" No net policies, using this stub as response - " + '\n' + aaiStubResponseAsXml)
611 } catch (NotFoundException e) {
612 String dataErrorMessage = "Response Error from QueryAAINetworkPolicy is 404 (Not Found)."
613 msoLogger.debug(dataErrorMessage)
614 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
615 } catch (Exception ex) {
616 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTQueryAAINetworkPolicy() - " + ex.getMessage()
617 msoLogger.debug(exceptionMessage)
618 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
624 public void callRESTQueryAAINetworkTableRef(DelegateExecution execution) {
626 execution.setVariable("prefix", Prefix)
628 msoLogger.debug(" ***** Inside callRESTQueryAAINetworkTableRef of DoUpdateNetworkInstance ***** " )
631 AAIResultWrapper queryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
632 if(queryIdAAIResponse.getRelationships().isPresent()){
633 List<AAIResourceUri> uris = queryIdAAIResponse.getRelationships().get().getRelatedAAIUris(AAIObjectType.ROUTE_TABLE_REFERENCE)
635 execution.setVariable(Prefix + "networkTableRefCount", uris.size())
636 msoLogger.debug(Prefix + "networkTableRefCount - " + uris.size())
638 msoLogger.debug(" UPDNETI_networkTableRefCount - " + uris.size())
639 if (uris.size() > 0) {
641 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "200")
643 // AII loop call using list vpnBindings
644 String networkTableRefs = ""
645 for(AAIResourceUri u : uris) {
647 AAIResourcesClient client = new AAIResourcesClient()
648 RouteTableReference rt = client.get(u, NotFoundException.class).asBean(RouteTableReference.class).get()
650 String networkTableRef = rt.getRouteTableReferenceFqdn()
651 networkTableRefs += "<routeTableFqdns>" + networkTableRef + "</routeTableFqdns>" + '\n'
655 execution.setVariable(Prefix + "tableRefCollection", networkTableRefs)
656 msoLogger.debug(" UPDNETI_tableRefCollection - " + '\n' + networkTableRefs)
659 // reset return code to success
660 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "200")
661 AaiUtil aaiUriUtil = new AaiUtil(this)
662 String schemaVersion = aaiUriUtil.getNamespace()
663 String aaiStubResponse =
664 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
665 <route-table-references xmlns="${schemaVersion}">
666 <route-table-reference-fqdn/>
667 </route-table-references>
669 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
670 execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", aaiStubResponseAsXml)
671 execution.setVariable(Prefix + "tableRefCollection", "<routeTableFqdns/>")
672 msoLogger.debug(" No net table references, using this stub as response - " + '\n' + aaiStubResponseAsXml)
677 } catch (NotFoundException e) {
678 String dataErrorMessage = "Response Error from QueryAAINetworkTableRef is 404 (Not Found)."
679 msoLogger.debug(dataErrorMessage)
680 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
682 } catch (Exception ex) {
683 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTQueryAAINetworkTableRef() - " + ex.getMessage()
684 msoLogger.debug(exceptionMessage)
685 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
691 public void callRESTUpdateContrailAAINetwork(DelegateExecution execution) {
692 execution.setVariable("prefix", Prefix)
693 msoLogger.debug(" ***** Inside callRESTUpdateContrailAAINetwork of DoUpdateNetworkInstance ***** " )
696 String networkRequest = execution.getVariable(Prefix + "networkRequest")
697 String networkId = utils.getNodeText(networkRequest, "network-id")
698 AAIResultWrapper requeryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
699 String updateNetworkResponse = execution.getVariable(Prefix + "updateNetworkResponse")
701 L3Network oldL3Network = requeryIdAAIResponse.asBean(L3Network.class).get()
702 L3Network l3Network = new L3Network()
703 if (oldL3Network.getHeatStackId() != null) {
705 if (utils.nodeExists(updateNetworkResponse, 'networkStackId')) {
706 l3Network.setHeatStackId(utils.getNodeText(updateNetworkResponse, 'networkStackId'))
709 if (oldL3Network.getNeutronNetworkId() != null) {
711 if (utils.nodeExists(updateNetworkResponse, 'neutronNetworkId')) {
712 l3Network.setNeutronNetworkId(utils.getNodeText(updateNetworkResponse, 'neutronNetworkId'))
715 if (oldL3Network.getContrailNetworkFqdn() != null) {
717 if (utils.nodeExists(updateNetworkResponse, 'networkFqdn')) {
718 l3Network.setContrailNetworkFqdn(utils.getNodeText(updateNetworkResponse, 'networkFqdn'))
722 String status = utils.getNodeText(updateNetworkResponse, 'orchestration-status')
723 if(status.equals("pending-create") || status.equals("PendingCreate")){
724 l3Network.setOperationalStatus("Created")
726 l3Network.setOperationalStatus("Active")
729 AAIResourcesClient client = new AAIResourcesClient()
730 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId)
731 client.update(uri, l3Network)
733 List<Subnet> subnets = oldL3Network.getSubnets().getSubnet()
734 for(Subnet s:subnets){
735 String subnetOrchStatus = s.getOrchestrationStatus()
736 String subnetId = s.getSubnetId()
738 Subnet subnet = new Subnet()
739 String neutronSubnetId = networkUtils.extractNeutSubId(updateNetworkResponse, subnetId)
740 subnet.setNeutronSubnetId(neutronSubnetId)
741 if(subnetOrchStatus.equals("pending-create") || subnetOrchStatus.equals("PendingCreate") ){
742 subnet.setOrchestrationStatus("Created")
744 subnet.setOrchestrationStatus("Active")
747 AAIResourceUri subUri = AAIUriFactory.createResourceUri(AAIObjectType.SUBNET, networkId, subnetId)
748 client.update(subUri, subnet)
751 execution.setVariable(Prefix + "isPONR", true)
753 } catch (BpmnError e) {
755 } catch (NotFoundException e) {
756 String dataErrorMessage = " Response Error from UpdateContrailAAINetwork is 404 (Not Found)."
757 msoLogger.debug(dataErrorMessage)
758 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
759 } catch (Exception ex) {
760 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTUpdateContrailAAINetwork() - " + ex.getMessage()
761 msoLogger.debug(exceptionMessage)
762 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
768 public void prepareUpdateNetworkRequest (DelegateExecution execution) {
770 execution.setVariable("prefix", Prefix)
772 msoLogger.trace("Inside prepareUpdateNetworkRequest of DoUpdateNetworkInstance ")
777 String requestId = execution.getVariable(Prefix + "requestId")
778 String messageId = execution.getVariable(Prefix + "messageId")
779 String source = execution.getVariable(Prefix + "source")
781 String requestInput = execution.getVariable(Prefix + "networkRequest")
782 String queryIdResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
783 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionPo")
784 String backoutOnFailure = execution.getVariable(Prefix + "rollbackEnabled")
786 // Prepare Network request
787 String routeCollection = execution.getVariable(Prefix + "routeCollection")
788 String policyCollection = execution.getVariable(Prefix + "networkCollection")
789 String tableCollection = execution.getVariable(Prefix + "tableRefCollection")
790 String updateNetworkRequest = networkUtils.UpdateNetworkRequestV2(execution, requestId, messageId, requestInput, queryIdResponse, routeCollection, policyCollection, tableCollection, cloudRegionId, backoutOnFailure, source )
792 String buildUpdateNetworkRequestAsString = utils.formatXml(updateNetworkRequest)
793 buildUpdateNetworkRequestAsString = buildUpdateNetworkRequestAsString.replace(":w1aac13n0", "").replace("w1aac13n0:", "")
794 msoLogger.debug(buildUpdateNetworkRequestAsString)
796 execution.setVariable(Prefix + "updateNetworkRequest", buildUpdateNetworkRequestAsString)
797 msoLogger.debug(" UPDNETI_updateNetworkRequest - " + "\n" + buildUpdateNetworkRequestAsString)
799 } catch (Exception ex) {
800 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareUpdateNetworkRequest() - " + ex.getMessage()
801 msoLogger.debug(exceptionMessage)
802 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
808 public void prepareSDNCRequest (DelegateExecution execution) {
810 execution.setVariable("prefix", Prefix)
812 msoLogger.trace("Inside prepareSDNCRequest of DoUpdateNetworkInstance ")
816 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
817 String updateNetworkInput = execution.getVariable(Prefix + "networkRequest")
818 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
820 String networkId = ""
821 if (utils.nodeExists(updateNetworkInput, "network-id")) {
822 networkId = utils.getNodeText(updateNetworkInput, "network-id")
824 if (networkId == null) {networkId = ""}
826 String serviceInstanceId = utils.getNodeText(updateNetworkInput, "service-instance-id")
828 AAIResultWrapper wrapper = execution.getVariable(Prefix + "queryIdAAIResponse")
829 L3Network queryAAIResponse = wrapper.asBean(L3Network.class).get()
831 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
832 String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, updateNetworkInput, serviceInstanceId, sdncCallback, "changeassign", "NetworkActivateRequest", cloudRegionId, networkId, queryAAIResponse, null)
834 String sndcTopologyUpdateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
835 msoLogger.debug(sndcTopologyUpdateRequesAsString)
836 execution.setVariable(Prefix + "changeAssignSDNCRequest", sndcTopologyUpdateRequesAsString)
837 msoLogger.debug(" UPDNETI_changeAssignSDNCRequest - " + "\n" + sndcTopologyUpdateRequesAsString)
840 } catch (Exception ex) {
841 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareSDNCRequest() - " + ex.getMessage()
842 msoLogger.debug(exceptionMessage)
843 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
852 // **************************************************
853 // Post or Validate Response Section
854 // **************************************************
856 public void validateUpdateNetworkResponse (DelegateExecution execution) {
858 execution.setVariable("prefix", Prefix)
860 msoLogger.trace("Inside validateUpdateNetworkResponse of DoUpdateNetworkInstance ")
863 String returnCode = execution.getVariable(Prefix + "networkReturnCode")
864 String networkResponse = execution.getVariable(Prefix + "updateNetworkResponse")
865 if (networkResponse==null) {
866 networkResponse="" // reset
869 msoLogger.debug(" Network Adapter update responseCode: " + returnCode)
871 String errorMessage = ""
872 if (returnCode == "200") {
873 execution.setVariable(Prefix + "isNetworkRollbackNeeded", true)
874 msoLogger.debug(networkResponse)
875 execution.setVariable(Prefix + "updateNetworkResponse", networkResponse)
876 msoLogger.debug(" Network Adapter update Success Response - " + "\n" + networkResponse)
878 // prepare rollback data
879 String rollbackData = utils.getNodeXml(networkResponse, "rollback", false).replace("tag0:","").replace(":tag0","")
880 rollbackData = rollbackData.replace("rollback>", "networkRollback>")
881 String rollbackNetwork =
882 """<rollbackNetworkRequest>
884 </rollbackNetworkRequest>"""
885 String rollbackNetworkXml = utils.formatXml(rollbackNetwork)
886 execution.setVariable(Prefix + "rollbackNetworkRequest", rollbackNetworkXml)
887 msoLogger.debug(" Network Adapter rollback data - " + "\n" + rollbackNetworkXml)
889 } else { // network error
890 if (returnCode.toInteger() > 399 && returnCode.toInteger() < 600) { //4xx, 5xx
891 if (networkResponse.contains("updateNetworkError")) {
892 networkResponse = networkResponse.replace('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>', '')
893 errorMessage = utils.getNodeText(networkResponse, "message")
894 errorMessage = "Received error from Network Adapter: " + errorMessage
895 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
897 } else { // CatchAll exception
898 if (returnCode == "500") {
899 errorMessage = "JBWEB000065: HTTP Status 500."
901 errorMessage = "Return code is " + returnCode
903 errorMessage = "Received error from Network Adapter: " + errorMessage
904 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
908 } else { // CatchAll exception
909 String dataErrorMessage = "Received error from Network Adapter. Return code is: " + returnCode
910 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
916 } catch (BpmnError e) {
919 } catch (Exception ex) {
920 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. validateUpdateNetworkResponse() - " + ex.getMessage()
921 msoLogger.debug(exceptionMessage)
922 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
929 public void validateSDNCResponse (DelegateExecution execution) {
931 execution.setVariable("prefix", Prefix)
933 msoLogger.trace("Inside validateSDNCResponse of DoUpdateNetworkInstance ")
935 String response = execution.getVariable(Prefix + "changeAssignSDNCResponse")
936 WorkflowException workflowException = null
938 workflowException = execution.getVariable(Prefix + "WorkflowException")
939 //execution.setVariable("WorkflowException", workflowException)
940 } catch (Exception ex) {
941 msoLogger.debug(" Sdnc 'WorkflowException' object is empty or null. ")
944 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
946 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
947 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
949 String changeAssignSDNCResponseDecodeXml = execution.getVariable(Prefix + "changeAssignSDNCResponse")
950 changeAssignSDNCResponseDecodeXml = changeAssignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
951 execution.setVariable(Prefix + "changeAssignSDNCResponse", changeAssignSDNCResponseDecodeXml)
953 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, prefix+'sdncResponseSuccess'
954 execution.setVariable(Prefix + "isSdncRollbackNeeded", true)
955 msoLogger.debug("Successfully Validated SDNC Response")
958 msoLogger.debug("Did NOT Successfully Validated SDNC Response")
959 throw new BpmnError("MSOWorkflowException")
965 public void postProcessResponse (DelegateExecution execution) {
967 execution.setVariable("prefix", Prefix)
969 msoLogger.trace("Inside postProcessResponse of DoUpdateNetworkInstance ")
972 msoLogger.debug(" ***** Is Exception Encountered (isException)? : " + execution.getVariable(Prefix + "isException"))
973 if (execution.getVariable(Prefix + "isException") == false) {
975 execution.setVariable("orchestrationStatus", "")
976 execution.setVariable("networkId", execution.getVariable(Prefix + "networkId"))
977 execution.setVariable("networkName", execution.getVariable(Prefix + "networkName"))
978 prepareSuccessRollbackData(execution) // populate rollbackData
979 execution.setVariable("WorkflowException", null)
980 execution.setVariable(Prefix + "Success", true)
981 msoLogger.debug(" ***** postProcessResponse(), GOOD !!!")
983 execution.setVariable(Prefix + "Success", false)
984 execution.setVariable("rollbackData", null)
985 String exceptionMessage = " Exception encountered in MSO Bpmn. "
986 if (execution.getVariable("workflowException") != null) { // Output of Rollback flow.
987 msoLogger.debug(" ***** workflowException: " + execution.getVariable("workflowException"))
988 WorkflowException wfex = execution.getVariable("workflowException")
989 exceptionMessage = wfex.getErrorMessage()
991 if (execution.getVariable(Prefix + "WorkflowException") != null) {
992 WorkflowException pwfex = execution.getVariable(Prefix + "WorkflowException")
993 exceptionMessage = pwfex.getErrorMessage()
996 // going to the Main flow: a-la-carte or macro
997 msoLogger.debug(" ***** postProcessResponse(), BAD !!!")
998 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
999 throw new BpmnError("MSOWorkflowException")
1002 } catch(BpmnError b){
1003 msoLogger.debug("Rethrowing MSOWorkflowException")
1007 } catch (Exception ex) {
1008 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. postProcessResponse() - " + ex.getMessage()
1009 msoLogger.debug(exceptionMessage)
1010 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
1017 public void prepareSDNCRollbackRequest (DelegateExecution execution) {
1019 execution.setVariable("prefix", Prefix)
1021 msoLogger.trace("Inside prepareSDNCRollbackRequest of DoUpdateNetworkInstance ")
1024 // for some reason the WorkflowException object is null after the sdnc rollback call task, need to save WorkflowException.
1025 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
1027 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1028 String updateNetworkInput = execution.getVariable(Prefix + "networkRequest")
1029 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1030 String changeAssignSDNCResponse = execution.getVariable(Prefix + "changeAssignSDNCResponse")
1031 String networkId = utils.getNodeText(changeAssignSDNCResponse, "network-id")
1033 String serviceInstanceId = utils.getNodeText(updateNetworkInput, "service-instance-id")
1035 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1036 String sndcTopologyRollbackRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, updateNetworkInput, serviceInstanceId, sdncCallback, "rollback", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
1037 String sndcTopologyRollbackRequestAsString = utils.formatXml(sndcTopologyRollbackRequest)
1038 execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRequestAsString)
1039 msoLogger.debug(" Preparing request for SDNC Topology assign's rollback/compensation . . . - " + "\n" + sndcTopologyRollbackRequestAsString)
1041 } catch (Exception ex) {
1042 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareSDNCRollbackRequest() - " + ex.getMessage()
1043 msoLogger.debug(exceptionMessage)
1044 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1050 public void prepareRollbackData(DelegateExecution execution) {
1052 execution.setVariable("prefix",Prefix)
1054 msoLogger.trace("Inside prepareRollbackData() of DoUpdateNetworkInstance ")
1058 Map<String, String> rollbackData = new HashMap<String, String>();
1059 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
1060 if (rollbackSDNCRequest != null) {
1061 if (rollbackSDNCRequest != "") {
1062 rollbackData.put("rollbackSDNCRequest", execution.getVariable(Prefix + "rollbackSDNCRequest"))
1065 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
1066 if (rollbackNetworkRequest != null) {
1067 if (rollbackNetworkRequest != "") {
1068 rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
1071 execution.setVariable("rollbackData", rollbackData)
1072 msoLogger.debug("** rollbackData : " + rollbackData)
1074 execution.setVariable("WorkflowException", execution.getVariable(Prefix + "WorkflowException"))
1075 msoLogger.debug("** WorkflowException : " + execution.getVariable("WorkflowException"))
1077 } catch (Exception ex) {
1078 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareRollbackData() - " + ex.getMessage()
1079 msoLogger.debug(exceptionMessage)
1080 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1086 public void prepareSuccessRollbackData(DelegateExecution execution) {
1088 execution.setVariable("prefix",Prefix)
1090 msoLogger.trace("Inside prepareSuccessRollbackData() of DoUpdateNetworkInstance ")
1094 if (execution.getVariable("sdncVersion") != '1610') {
1095 // skip: 1702 for 'changeassign' or equivalent not yet defined in SNDC, so no rollback.
1097 prepareSDNCRollbackRequest(execution)
1100 Map<String, String> rollbackData = new HashMap<String, String>();
1101 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
1102 if (rollbackSDNCRequest != null) {
1103 if (rollbackSDNCRequest != "") {
1104 rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
1107 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
1108 if (rollbackNetworkRequest != null) {
1109 if (rollbackNetworkRequest != "") {
1110 rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
1113 execution.setVariable("rollbackData", rollbackData)
1115 msoLogger.debug("** 'rollbackData' for Full Rollback : " + rollbackData)
1116 execution.setVariable("WorkflowException", null)
1119 } catch (Exception ex) {
1120 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage()
1121 msoLogger.debug(exceptionMessage)
1122 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1128 public void setExceptionFlag(DelegateExecution execution){
1130 execution.setVariable("prefix",Prefix)
1132 msoLogger.trace("Inside setExceptionFlag() of DoUpdateNetworkInstance ")
1136 execution.setVariable(Prefix + "isException", true)
1138 if (execution.getVariable("SavedWorkflowException1") != null) {
1139 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
1141 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
1143 msoLogger.debug(Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"))
1145 } catch(Exception ex){
1146 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. setExceptionFlag(): " + ex.getMessage()
1147 msoLogger.debug(exceptionMessage)
1148 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1154 // *******************************
1155 // Build Error Section
1156 // *******************************
1158 public void processJavaException(DelegateExecution execution){
1160 execution.setVariable("prefix",Prefix)
1162 msoLogger.debug("Caught a Java Exception")
1163 msoLogger.debug("Started processJavaException Method")
1164 msoLogger.debug("Variables List: " + execution.getVariables())
1165 execution.setVariable("UnexpectedError", "Caught a Java Lang Exception - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
1166 exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
1168 }catch(Exception e){
1169 msoLogger.debug("Caught Exception during processJavaException Method: " + e)
1170 execution.setVariable("UnexpectedError", "Exception in processJavaException method") // Adding this line temporarily until this flows error handling gets updated
1171 exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method")
1173 msoLogger.debug("Completed processJavaException Method")