2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Modifications Copyright (c) 2019 Samsung
8 * ================================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * ============LICENSE_END=========================================================
23 package org.onap.so.bpmn.infrastructure.scripts;
25 import javax.ws.rs.core.UriBuilder
26 import javax.xml.parsers.DocumentBuilder
27 import javax.xml.parsers.DocumentBuilderFactory
28 import org.apache.commons.lang3.*
29 import org.camunda.bpm.engine.delegate.BpmnError
30 import org.camunda.bpm.engine.delegate.DelegateExecution
31 import org.onap.so.bpmn.common.scripts.AaiUtil
32 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
33 import org.onap.so.bpmn.common.scripts.ExceptionUtil
34 import org.onap.so.bpmn.common.scripts.MsoUtils
35 import org.onap.so.bpmn.common.scripts.NetworkUtils
36 import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
37 import org.onap.so.bpmn.common.scripts.VidUtils
38 import org.onap.so.bpmn.core.UrnPropertiesReader
39 import org.onap.so.bpmn.core.WorkflowException
40 import org.onap.so.bpmn.core.json.JsonUtils
41 import org.onap.so.client.aai.AAIObjectType
42 import org.onap.so.client.aai.AAIResourcesClient
43 import org.onap.so.client.aai.entities.uri.AAIResourceUri
44 import org.onap.so.client.aai.entities.uri.AAIUriFactory
45 import org.onap.so.client.aai.entities.AAIResultWrapper
46 import org.onap.so.client.graphinventory.entities.uri.Depth
47 import org.onap.so.constants.Defaults
48 import org.slf4j.Logger
49 import org.slf4j.LoggerFactory
51 import org.springframework.web.util.UriUtils
52 import org.w3c.dom.Document
53 import org.w3c.dom.Element
54 import org.w3c.dom.NamedNodeMap
55 import org.w3c.dom.Node
56 import org.w3c.dom.NodeList;
57 import org.xml.sax.InputSource
58 import org.onap.aai.domain.yang.VpnBinding
59 import org.onap.aai.domain.yang.L3Network
60 import org.onap.aai.domain.yang.NetworkPolicy
61 import org.onap.aai.domain.yang.RouteTableReference
62 import org.onap.aai.domain.yang.RouteTarget
63 import org.onap.aai.domain.yang.Subnet
64 import javax.ws.rs.NotFoundException
67 import groovy.xml.XmlUtil
70 * This groovy class supports the <class>DoUpdateNetworkInstance.bpmn</class> process.
73 public class DoUpdateNetworkInstance extends AbstractServiceTaskProcessor {
74 private static final Logger logger = LoggerFactory.getLogger( DoUpdateNetworkInstance.class);
76 String Prefix="UPDNETI_"
77 ExceptionUtil exceptionUtil = new ExceptionUtil()
78 JsonUtils jsonUtil = new JsonUtils()
79 VidUtils vidUtils = new VidUtils(this)
80 NetworkUtils networkUtils = new NetworkUtils()
81 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
84 * This method is executed during the preProcessRequest task of the <class>DoUpdateNetworkInstance.bpmn</class> process.
87 public InitializeProcessVariables(DelegateExecution execution){
88 /* Initialize all the process variables in this block */
90 execution.setVariable(Prefix + "messageId", "")
91 execution.setVariable("BasicAuthHeaderValuePO", "")
92 execution.setVariable("BasicAuthHeaderValueSDNC", "")
93 execution.setVariable(Prefix + "networkRequest", "")
94 execution.setVariable(Prefix + "networkInputs", "")
95 execution.setVariable(Prefix + "networkOutputs", "")
96 execution.setVariable(Prefix + "requestId", "")
97 execution.setVariable(Prefix + "source", "")
98 execution.setVariable(Prefix + "networkId", "")
100 execution.setVariable(Prefix + "isPONR", false) // Point-of-no-return, means, rollback is not needed
102 // AAI query Cloud Region
103 execution.setVariable(Prefix + "queryCloudRegionRequest","")
104 execution.setVariable(Prefix + "queryCloudRegionReturnCode","")
105 execution.setVariable(Prefix + "queryCloudRegionResponse","")
106 execution.setVariable(Prefix + "cloudRegionPo","")
107 execution.setVariable(Prefix + "cloudRegionSdnc","")
108 execution.setVariable(Prefix + "isCloudRegionGood", false)
111 execution.setVariable(Prefix + "queryIdAAIRequest","")
112 execution.setVariable(Prefix + "queryIdAAIResponse", "")
113 execution.setVariable(Prefix + "aaiIdReturnCode", "")
115 // AAI query vpn binding
116 execution.setVariable(Prefix + "queryVpnBindingAAIRequest","")
117 execution.setVariable(Prefix + "queryVpnBindingAAIResponse", "")
118 execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "")
119 execution.setVariable(Prefix + "vpnBindings", null)
120 execution.setVariable(Prefix + "vpnCount", 0)
121 execution.setVariable(Prefix + "routeCollection", "")
123 // AAI query network policy
124 execution.setVariable(Prefix + "queryNetworkPolicyAAIRequest","")
125 execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", "")
126 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "")
127 execution.setVariable(Prefix + "networkPolicyUriList", null)
128 execution.setVariable(Prefix + "networkPolicyCount", 0)
129 execution.setVariable(Prefix + "networkCollection", "")
131 // AAI query route table reference
132 execution.setVariable(Prefix + "queryNetworkTableRefAAIRequest","")
133 execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", "")
134 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "")
135 execution.setVariable(Prefix + "networkTableRefUriList", null)
136 execution.setVariable(Prefix + "networkTableRefCount", 0)
137 execution.setVariable(Prefix + "tableRefCollection", "")
140 execution.setVariable(Prefix + "requeryIdAAIRequest","")
141 execution.setVariable(Prefix + "requeryIdAAIResponse", "")
142 execution.setVariable(Prefix + "aaiRequeryIdReturnCode", "")
144 // AAI update contrail
145 execution.setVariable(Prefix + "updateContrailAAIUrlRequest","")
146 execution.setVariable(Prefix + "updateContrailAAIPayloadRequest","")
147 execution.setVariable(Prefix + "updateContrailAAIResponse", "")
148 execution.setVariable(Prefix + "aaiUpdateContrailReturnCode", "")
150 execution.setVariable(Prefix + "updateNetworkRequest", "")
151 execution.setVariable(Prefix + "updateNetworkResponse", "")
152 execution.setVariable(Prefix + "rollbackNetworkRequest", "")
153 execution.setVariable(Prefix + "networkReturnCode", "")
154 execution.setVariable(Prefix + "isNetworkRollbackNeeded", false)
156 execution.setVariable(Prefix + "changeAssignSDNCRequest", "")
157 execution.setVariable(Prefix + "changeAssignSDNCResponse", "")
158 execution.setVariable(Prefix + "rollbackSDNCRequest", "")
159 execution.setVariable(Prefix + "sdncReturnCode", "")
160 execution.setVariable(Prefix + "isSdncRollbackNeeded", false)
161 execution.setVariable(Prefix + "sdncResponseSuccess", false)
163 execution.setVariable(Prefix + "isVnfBindingPresent", false)
164 execution.setVariable(Prefix + "Success", false)
165 execution.setVariable(Prefix + "serviceInstanceId", "")
167 execution.setVariable(Prefix + "isException", false)
171 // **************************************************
172 // Pre or Prepare Request Section
173 // **************************************************
175 * This method is executed during the preProcessRequest task of the <class>DoUpdateNetworkInstance.bpmn</class> process.
178 public void preProcessRequest (DelegateExecution execution) {
180 execution.setVariable("prefix",Prefix)
182 logger.trace("Inside preProcessRequest DoUpdateNetworkInstance Request ")
185 // initialize flow variables
186 InitializeProcessVariables(execution)
188 // GET Incoming request & validate 3 kinds of format.
189 execution.setVariable("action", "UPDATE")
190 String networkRequest = execution.getVariable("bpmnRequest")
191 if (networkRequest != null) {
192 if (networkRequest.contains("requestDetails")) {
193 // JSON format request is sent, create xml
195 def prettyJson = JsonOutput.prettyPrint(networkRequest.toString())
196 logger.debug(" Incoming message formatted . . . : " + '\n' + prettyJson)
197 networkRequest = vidUtils.createXmlNetworkRequestInfra(execution, networkRequest)
199 } catch (Exception ex) {
200 String dataErrorMessage = " Invalid json format Request - " + ex.getMessage()
201 logger.debug(dataErrorMessage)
202 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
205 // XML format request is sent
209 // vIPR format request is sent, create xml from individual variables
210 networkRequest = vidUtils.createXmlNetworkRequestInstance(execution)
213 networkRequest = utils.formatXml(networkRequest)
214 logger.debug(networkRequest)
215 execution.setVariable(Prefix + "networkRequest", networkRequest)
216 logger.debug(" network-request - " + '\n' + networkRequest)
218 // validate 'disableRollback' (aka, 'suppressRollback')
219 boolean rollbackEnabled = networkUtils.isRollbackEnabled(execution, networkRequest)
220 execution.setVariable(Prefix + "rollbackEnabled", rollbackEnabled)
221 logger.debug(Prefix + "rollbackEnabled - " + rollbackEnabled)
223 String networkInputs = utils.getNodeXml(networkRequest, "network-inputs", false).replace("tag0:","").replace(":tag0","")
224 execution.setVariable(Prefix + "networkInputs", networkInputs)
225 logger.debug(Prefix + "networkInputs - " + '\n' + networkInputs)
228 String messageId = execution.getVariable(Prefix + "messageId") // for testing
229 if (messageId == null || messageId == "") {
230 messageId = UUID.randomUUID()
231 logger.debug(" UPDNETI_messageId, random generated: " + messageId)
233 logger.debug(" UPDNETI_messageId, pre-assigned: " + messageId)
235 execution.setVariable(Prefix + "messageId", messageId)
237 String source = utils.getNodeText(networkRequest, "source")
238 execution.setVariable(Prefix + "source", source)
239 logger.debug(Prefix + "source - " + source)
241 String networkId = ""
242 if (utils.nodeExists(networkRequest, "network-id")) {
243 networkId = utils.getNodeText(networkRequest, "network-id")
244 if (networkId == 'null' || networkId == "") {
245 sendSyncError(execution)
246 // missing value of networkId
247 String dataErrorMessage = "Variable 'network-id' value/element is missing."
248 logger.debug(" Invalid Request - " + dataErrorMessage)
249 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
254 String lcpCloudRegion = ""
255 if (utils.nodeExists(networkRequest, "aic-cloud-region")) {
256 lcpCloudRegion = utils.getNodeText(networkRequest, "aic-cloud-region")
257 if ((lcpCloudRegion == 'null') || (lcpCloudRegion == "")) {
258 sendSyncError(execution)
259 String dataErrorMessage = "requestDetails has missing 'aic-cloud-region' value/element."
260 logger.debug(" Invalid Request - " + dataErrorMessage)
261 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
265 String serviceInstanceId = ""
266 if (utils.nodeExists(networkRequest, "service-instance-id")) {
267 serviceInstanceId = utils.getNodeText(networkRequest, "service-instance-id")
268 if ((serviceInstanceId == 'null') || (lcpCloudRegion == "")) {
269 sendSyncError(execution)
270 String dataErrorMessage = "Variable 'serviceInstanceId' value/element is missing."
271 logger.debug(" Invalid Request - " + dataErrorMessage)
272 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
276 // PO Authorization Info / headers Authorization=
277 String basicAuthValuePO = UrnPropertiesReader.getVariable("mso.adapters.po.auth",execution)
281 def encodedString = utils.getBasicAuth(basicAuthValuePO, UrnPropertiesReader.getVariable("mso.msoKey", execution))
282 execution.setVariable("BasicAuthHeaderValuePO",encodedString)
283 execution.setVariable("BasicAuthHeaderValueSDNC", encodedString)
285 } catch (IOException ex) {
286 String exceptionMessage = "Exception Encountered in DoUpdateNetworkInstance, PreProcessRequest() - "
287 String dataErrorMessage = exceptionMessage + " Unable to encode PO/SDNC user/password string - " + ex.getMessage()
288 logger.debug(dataErrorMessage)
289 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
292 // Set variables for Generic Get Sub Flow use
293 execution.setVariable(Prefix + "serviceInstanceId", serviceInstanceId)
294 logger.debug(Prefix + "serviceInstanceId - " + serviceInstanceId)
296 logger.debug(" Url for SDNC adapter: " + UrnPropertiesReader.getVariable("mso.adapters.sdnc.endpoint",execution))
298 String sdncVersion = execution.getVariable("sdncVersion")
299 logger.debug("sdncVersion? : " + sdncVersion)
301 // build 'networkOutputs'
302 networkId = utils.getNodeText(networkRequest, "network-id")
303 if ((networkId == null) || (networkId == "null")) {
306 String networkName = utils.getNodeText(networkRequest, "network-name")
307 if ((networkName == null) || (networkName == "null")) {
310 String networkOutputs =
312 <network-id>${MsoUtils.xmlEscape(networkId)}</network-id>
313 <network-name>${MsoUtils.xmlEscape(networkName)}</network-name>
314 </network-outputs>"""
315 execution.setVariable(Prefix + "networkOutputs", networkOutputs)
316 logger.debug(Prefix + "networkOutputs - " + '\n' + networkOutputs)
317 execution.setVariable(Prefix + "networkId", networkId)
318 execution.setVariable(Prefix + "networkName", networkName)
321 } catch (BpmnError e) {
324 } catch (Exception ex){
325 sendSyncError(execution)
327 String exceptionMessage = "Exception Encountered in DoUpdateNetworkInstance, PreProcessRequest() - " + ex.getMessage()
328 logger.debug(exceptionMessage)
329 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
335 * Gets the service instance uri from aai
338 public void getServiceInstance(DelegateExecution execution) {
339 logger.trace("getServiceInstance ")
341 String serviceInstanceId = execution.getVariable('serviceInstanceId')
343 AAIResourcesClient resourceClient = new AAIResourcesClient()
344 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, serviceInstanceId)
346 if(!resourceClient.exists(uri)){
347 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "Service Instance not found in aai")
349 Map<String, String> keys = uri.getURIKeys()
350 execution.setVariable("serviceType", keys.get("service-type"))
351 execution.setVariable("subscriberName", keys.get("global-customer-id"))
354 }catch(BpmnError e) {
356 }catch (Exception ex){
357 String msg = "Exception in getServiceInstance. " + ex.getMessage()
359 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
363 public void callRESTQueryAAICloudRegion (DelegateExecution execution) {
365 execution.setVariable("prefix", Prefix)
367 logger.debug(" ***** Inside callRESTQueryAAICloudRegion of DoUpdateNetworkInstance ***** " )
370 String networkInputs = execution.getVariable(Prefix + "networkInputs")
371 String cloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region")
374 String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
375 AaiUtil aaiUtil = new AaiUtil(this)
377 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION, Defaults.CLOUD_OWNER.toString(), cloudRegion)
378 def queryCloudRegionRequest = aaiUtil.createAaiUri(uri)
380 execution.setVariable(Prefix + "queryCloudRegionRequest", queryCloudRegionRequest)
382 String cloudRegionPo = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "PO", cloudRegion)
383 String cloudRegionSdnc = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "SDNC", cloudRegion)
385 if ((cloudRegionPo != "ERROR") && (cloudRegionSdnc != "ERROR")) {
386 execution.setVariable(Prefix + "cloudRegionPo", cloudRegionPo)
387 execution.setVariable(Prefix + "cloudRegionSdnc", cloudRegionSdnc)
388 execution.setVariable(Prefix + "isCloudRegionGood", true)
391 String dataErrorMessage = "QueryAAICloudRegion Unsuccessful. Return Code: " + execution.getVariable(Prefix + "queryCloudRegionReturnCode")
392 logger.debug(dataErrorMessage)
393 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
397 logger.debug(" is Cloud Region Good: " + execution.getVariable(Prefix + "isCloudRegionGood"))
399 } catch (BpmnError e) {
402 } catch (Exception ex) {
404 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow - callRESTQueryAAICloudRegion() - " + ex.getMessage()
405 logger.debug(exceptionMessage)
406 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
412 public void callRESTQueryAAINetworkId(DelegateExecution execution) {
414 execution.setVariable("prefix", Prefix)
416 logger.debug(" ***** Inside callRESTQueryAAINetworkId of DoUpdateNetworkInstance ***** " )
420 String networkRequest = execution.getVariable(Prefix + "networkRequest")
421 String networkId = utils.getNodeText(networkRequest, "network-id")
422 execution.setVariable(Prefix + "networkId", networkId)
424 AAIResourcesClient client = new AAIResourcesClient()
425 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId).depth(Depth.ONE)
426 AAIResultWrapper network = client.get(uri, NotFoundException.class)
428 execution.setVariable(Prefix + "aaiIdReturnCode", "200")
430 execution.setVariable(Prefix + "queryIdAAIResponse", network)
433 } catch (NotFoundException e) {
434 String dataErrorMessage = "Response Error from QueryAAINetworkId is 404 (Not Found)."
435 logger.debug(" AAI Query Failed. " + dataErrorMessage)
436 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
437 } catch (Exception ex) {
438 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTQueryAAINetworkId() - " + ex.getMessage()
439 logger.debug(exceptionMessage)
440 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
446 public void callRESTReQueryAAINetworkId(DelegateExecution execution) {
448 execution.setVariable("prefix", Prefix)
450 logger.debug(" ***** Inside callRESTReQueryAAINetworkId of DoUpdateNetworkInstance ***** " )
454 String networkRequest = execution.getVariable(Prefix + "networkRequest")
455 String networkId = utils.getNodeText(networkRequest, "network-id")
457 AAIResourcesClient client = new AAIResourcesClient()
458 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId).depth(Depth.ONE)
459 AAIResultWrapper network = client.get(uri, NotFoundException.class)
461 execution.setVariable(Prefix + "aaiRequeryIdReturnCode", "200")
462 execution.setVariable(Prefix + "requeryIdAAIResponse", network)
464 L3Network net = network.asBean(L3Network.class).get()
465 String netId = net.getNetworkId()
466 String netName = net.getNetworkName()
467 String networkOutputs =
469 <network-id>${MsoUtils.xmlEscape(netId)}</network-id>
470 <network-name>${MsoUtils.xmlEscape(netName)}</network-name>
471 </network-outputs>"""
472 execution.setVariable(Prefix + "networkOutputs", networkOutputs)
473 logger.debug(" networkOutputs - " + '\n' + networkOutputs)
475 } catch (NotFoundException e) {
476 String dataErrorMessage = "Response Error from ReQueryAAINetworkId is 404 (Not Found)."
477 logger.debug(" AAI ReQuery Failed. - " + dataErrorMessage)
478 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
479 } catch (Exception ex) {
480 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTReQueryAAINetworkId() - " + ex.getMessage()
481 logger.debug(exceptionMessage)
482 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
488 public void callRESTQueryAAINetworkVpnBinding(DelegateExecution execution) {
490 execution.setVariable("prefix", Prefix)
492 logger.debug(" ***** Inside callRESTQueryAAINetworkVpnBinding of DoUpdateNetworkInstance ***** " )
497 AAIResultWrapper queryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
498 if(queryIdAAIResponse.getRelationships().isPresent()){
499 List<AAIResourceUri> uris = queryIdAAIResponse.getRelationships().get().getRelatedAAIUris(AAIObjectType.VPN_BINDING)
501 logger.debug(Prefix + "vpnCount - " + uris.size())
503 if (uris.size() > 0) {
504 String routeTargets = ""
505 for(AAIResourceUri u : uris) {
507 AAIResourcesClient client = new AAIResourcesClient()
508 AAIResultWrapper wrapper = client.get(u.depth(Depth.TWO), NotFoundException.class)
509 Optional<VpnBinding> binding = wrapper.asBean(VpnBinding.class)
511 String routeTarget = ""
512 String routeRole = ""
513 if(binding.get().getRouteTargets() != null) {
514 List<RouteTarget> targets = binding.get().getRouteTargets().getRouteTarget()
515 for(RouteTarget target : targets) {
516 routeTarget = target.getGlobalRouteTarget()
517 routeRole = target.getRouteTargetRole()
518 routeTargets += "<routeTargets>" + '\n' +
519 " <routeTarget>" + routeTarget + "</routeTarget>" + '\n' +
520 " <routeTargetRole>" + routeRole + "</routeTargetRole>" + '\n' +
521 "</routeTargets>" + '\n'
527 execution.setVariable(Prefix + "routeCollection", routeTargets)
528 logger.debug(" UPDNETI_routeCollection - " + '\n' + routeTargets)
531 // reset return code to success
532 execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "200")
533 AaiUtil aaiUriUtil = new AaiUtil(this)
534 String schemaVersion = aaiUriUtil.getNamespace()
535 String aaiStubResponse =
536 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
537 <vpn-binding xmlns="${schemaVersion}">
538 <global-route-target/>
541 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
542 execution.setVariable(Prefix + "queryVpnBindingAAIResponse", aaiStubResponseAsXml)
543 execution.setVariable(Prefix + "routeCollection", "<routeTargets/>")
544 logger.debug(" No vpnBinding, using this stub as response - " + '\n' + aaiStubResponseAsXml)
549 } catch (NotFoundException e) {
550 logger.debug("Response Error from AAINetworkVpnBinding is 404 (Not Found).")
551 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Response Error from AAINetworkVpnBinding is 404 (Not Found).")
552 } catch (Exception ex) {
553 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTQueryAAINetworkVpnBinding() - " + ex.getMessage()
554 logger.debug(exceptionMessage)
555 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
561 public void callRESTQueryAAINetworkPolicy(DelegateExecution execution) {
563 execution.setVariable("prefix", Prefix)
565 logger.debug(" ***** Inside callRESTQueryAAINetworkPolicy of DoUpdateNetworkInstance ***** " )
569 AAIResultWrapper queryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
570 if(queryIdAAIResponse.getRelationships().isPresent()){
571 List<AAIResourceUri> uris = queryIdAAIResponse.getRelationships().get().getRelatedAAIUris(AAIObjectType.NETWORK_POLICY)
573 execution.setVariable(Prefix + "networkPolicyCount", uris.size())
574 logger.debug(Prefix + "networkPolicyCount - " + uris.size())
576 if (uris.size() > 0) {
578 String networkPolicies = ""
579 // AII loop call using list vpnBindings
580 for(AAIResourceUri u : uris) {
582 AAIResourcesClient client = new AAIResourcesClient()
583 NetworkPolicy p = client.get(u, NotFoundException.class).asBean(NetworkPolicy.class).get()
585 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
587 String networkPolicy = p.getNetworkPolicyFqdn()
588 networkPolicies += "<policyFqdns>" + networkPolicy + "</policyFqdns>" + '\n'
592 execution.setVariable(Prefix + "networkCollection", networkPolicies)
593 logger.debug(" UPDNETI_networkCollection - " + '\n' + networkPolicies)
596 // reset return code to success
597 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
598 AaiUtil aaiUriUtil = new AaiUtil(this)
599 String schemaVersion = aaiUriUtil.getNamespace()
600 String aaiStubResponse =
601 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
602 <network-policy xmlns="${schemaVersion}">
603 <network-policy-fqdn/>
606 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
607 execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", aaiStubResponseAsXml)
608 execution.setVariable(Prefix + "networkCollection", "<policyFqdns/>")
609 logger.debug(" No net policies, using this stub as response - " + '\n' + aaiStubResponseAsXml)
614 } catch (NotFoundException e) {
615 String dataErrorMessage = "Response Error from QueryAAINetworkPolicy is 404 (Not Found)."
616 logger.debug(dataErrorMessage)
617 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
618 } catch (Exception ex) {
619 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTQueryAAINetworkPolicy() - " + ex.getMessage()
620 logger.debug(exceptionMessage)
621 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
627 public void callRESTQueryAAINetworkTableRef(DelegateExecution execution) {
629 execution.setVariable("prefix", Prefix)
631 logger.debug(" ***** Inside callRESTQueryAAINetworkTableRef of DoUpdateNetworkInstance ***** " )
634 AAIResultWrapper queryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
635 if(queryIdAAIResponse.getRelationships().isPresent()){
636 List<AAIResourceUri> uris = queryIdAAIResponse.getRelationships().get().getRelatedAAIUris(AAIObjectType.ROUTE_TABLE_REFERENCE)
638 execution.setVariable(Prefix + "networkTableRefCount", uris.size())
639 logger.debug(Prefix + "networkTableRefCount - " + uris.size())
641 logger.debug(" UPDNETI_networkTableRefCount - " + uris.size())
642 if (uris.size() > 0) {
644 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "200")
646 // AII loop call using list vpnBindings
647 String networkTableRefs = ""
648 for(AAIResourceUri u : uris) {
650 AAIResourcesClient client = new AAIResourcesClient()
651 RouteTableReference rt = client.get(u, NotFoundException.class).asBean(RouteTableReference.class).get()
653 String networkTableRef = rt.getRouteTableReferenceFqdn()
654 networkTableRefs += "<routeTableFqdns>" + networkTableRef + "</routeTableFqdns>" + '\n'
658 execution.setVariable(Prefix + "tableRefCollection", networkTableRefs)
659 logger.debug(" UPDNETI_tableRefCollection - " + '\n' + networkTableRefs)
662 // reset return code to success
663 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "200")
664 AaiUtil aaiUriUtil = new AaiUtil(this)
665 String schemaVersion = aaiUriUtil.getNamespace()
666 String aaiStubResponse =
667 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
668 <route-table-references xmlns="${schemaVersion}">
669 <route-table-reference-fqdn/>
670 </route-table-references>
672 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
673 execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", aaiStubResponseAsXml)
674 execution.setVariable(Prefix + "tableRefCollection", "<routeTableFqdns/>")
675 logger.debug(" No net table references, using this stub as response - " + '\n' + aaiStubResponseAsXml)
680 } catch (NotFoundException e) {
681 String dataErrorMessage = "Response Error from QueryAAINetworkTableRef is 404 (Not Found)."
682 logger.debug(dataErrorMessage)
683 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
685 } catch (Exception ex) {
686 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTQueryAAINetworkTableRef() - " + ex.getMessage()
687 logger.debug(exceptionMessage)
688 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
694 public void callRESTUpdateContrailAAINetwork(DelegateExecution execution) {
695 execution.setVariable("prefix", Prefix)
696 logger.debug(" ***** Inside callRESTUpdateContrailAAINetwork of DoUpdateNetworkInstance ***** " )
699 String networkRequest = execution.getVariable(Prefix + "networkRequest")
700 String networkId = utils.getNodeText(networkRequest, "network-id")
701 AAIResultWrapper requeryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
702 String updateNetworkResponse = execution.getVariable(Prefix + "updateNetworkResponse")
704 L3Network oldL3Network = requeryIdAAIResponse.asBean(L3Network.class).get()
705 L3Network l3Network = new L3Network()
706 if (oldL3Network.getHeatStackId() != null) {
708 if (utils.nodeExists(updateNetworkResponse, 'networkStackId')) {
709 l3Network.setHeatStackId(utils.getNodeText(updateNetworkResponse, 'networkStackId'))
712 if (oldL3Network.getNeutronNetworkId() != null) {
714 if (utils.nodeExists(updateNetworkResponse, 'neutronNetworkId')) {
715 l3Network.setNeutronNetworkId(utils.getNodeText(updateNetworkResponse, 'neutronNetworkId'))
718 if (oldL3Network.getContrailNetworkFqdn() != null) {
720 if (utils.nodeExists(updateNetworkResponse, 'networkFqdn')) {
721 l3Network.setContrailNetworkFqdn(utils.getNodeText(updateNetworkResponse, 'networkFqdn'))
725 String status = utils.getNodeText(updateNetworkResponse, 'orchestration-status')
726 if(status.equals("pending-create") || status.equals("PendingCreate")){
727 l3Network.setOrchestrationStatus("Created")
729 l3Network.setOrchestrationStatus("Active")
732 AAIResourcesClient client = new AAIResourcesClient()
733 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId)
734 client.update(uri, l3Network)
736 List<Subnet> subnets = oldL3Network.getSubnets().getSubnet()
737 for(Subnet s:subnets){
738 String subnetOrchStatus = s.getOrchestrationStatus()
739 String subnetId = s.getSubnetId()
741 Subnet subnet = new Subnet()
742 String neutronSubnetId = networkUtils.extractNeutSubId(updateNetworkResponse, subnetId)
743 subnet.setNeutronSubnetId(neutronSubnetId)
744 if(subnetOrchStatus.equals("pending-create") || subnetOrchStatus.equals("PendingCreate") ){
745 subnet.setOrchestrationStatus("Created")
747 subnet.setOrchestrationStatus("Active")
750 AAIResourceUri subUri = AAIUriFactory.createResourceUri(AAIObjectType.SUBNET, networkId, subnetId)
751 client.update(subUri, subnet)
754 execution.setVariable(Prefix + "isPONR", true)
756 } catch (BpmnError e) {
758 } catch (NotFoundException e) {
759 String dataErrorMessage = " Response Error from UpdateContrailAAINetwork is 404 (Not Found)."
760 logger.debug(dataErrorMessage)
761 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
762 } catch (Exception ex) {
763 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTUpdateContrailAAINetwork() - " + ex.getMessage()
764 logger.debug(exceptionMessage)
765 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
771 public void prepareUpdateNetworkRequest (DelegateExecution execution) {
773 execution.setVariable("prefix", Prefix)
775 logger.trace("Inside prepareUpdateNetworkRequest of DoUpdateNetworkInstance ")
780 String requestId = execution.getVariable(Prefix + "requestId")
781 String messageId = execution.getVariable(Prefix + "messageId")
782 String source = execution.getVariable(Prefix + "source")
784 String requestInput = execution.getVariable(Prefix + "networkRequest")
785 L3Network queryIdResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
786 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionPo")
787 String backoutOnFailure = execution.getVariable(Prefix + "rollbackEnabled")
789 // Prepare Network request
790 String routeCollection = execution.getVariable(Prefix + "routeCollection")
791 String policyCollection = execution.getVariable(Prefix + "networkCollection")
792 String tableCollection = execution.getVariable(Prefix + "tableRefCollection")
793 String updateNetworkRequest = networkUtils.UpdateNetworkRequestV2(execution, requestId, messageId, requestInput, queryIdResponse, routeCollection, policyCollection, tableCollection, cloudRegionId, backoutOnFailure, source )
795 String buildUpdateNetworkRequestAsString = utils.formatXml(updateNetworkRequest)
796 buildUpdateNetworkRequestAsString = buildUpdateNetworkRequestAsString.replace(":w1aac13n0", "").replace("w1aac13n0:", "")
797 logger.debug(buildUpdateNetworkRequestAsString)
799 execution.setVariable(Prefix + "updateNetworkRequest", buildUpdateNetworkRequestAsString)
800 logger.debug(" UPDNETI_updateNetworkRequest - " + "\n" + buildUpdateNetworkRequestAsString)
802 } catch (Exception ex) {
803 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareUpdateNetworkRequest() - " + ex.getMessage()
804 logger.debug(exceptionMessage)
805 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
811 public void prepareSDNCRequest (DelegateExecution execution) {
813 execution.setVariable("prefix", Prefix)
815 logger.trace("Inside prepareSDNCRequest of DoUpdateNetworkInstance ")
819 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
820 String updateNetworkInput = execution.getVariable(Prefix + "networkRequest")
821 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
823 String networkId = ""
824 if (utils.nodeExists(updateNetworkInput, "network-id")) {
825 networkId = utils.getNodeText(updateNetworkInput, "network-id")
827 if (networkId == null) {networkId = ""}
829 String serviceInstanceId = utils.getNodeText(updateNetworkInput, "service-instance-id")
831 AAIResultWrapper wrapper = execution.getVariable(Prefix + "queryIdAAIResponse")
832 L3Network queryAAIResponse = wrapper.asBean(L3Network.class).get()
834 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
835 String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, updateNetworkInput, serviceInstanceId, sdncCallback, "changeassign", "NetworkActivateRequest", cloudRegionId, networkId, queryAAIResponse, null)
837 String sndcTopologyUpdateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
838 logger.debug(sndcTopologyUpdateRequesAsString)
839 execution.setVariable(Prefix + "changeAssignSDNCRequest", sndcTopologyUpdateRequesAsString)
840 logger.debug(" UPDNETI_changeAssignSDNCRequest - " + "\n" + sndcTopologyUpdateRequesAsString)
843 } catch (Exception ex) {
844 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareSDNCRequest() - " + ex.getMessage()
845 logger.debug(exceptionMessage)
846 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
855 // **************************************************
856 // Post or Validate Response Section
857 // **************************************************
859 public void validateUpdateNetworkResponse (DelegateExecution execution) {
861 execution.setVariable("prefix", Prefix)
863 logger.trace("Inside validateUpdateNetworkResponse of DoUpdateNetworkInstance ")
866 String returnCode = execution.getVariable(Prefix + "networkReturnCode")
867 String networkResponse = execution.getVariable(Prefix + "updateNetworkResponse")
868 if (networkResponse==null) {
869 networkResponse="" // reset
872 logger.debug(" Network Adapter update responseCode: " + returnCode)
874 String errorMessage = ""
875 if (returnCode == "200") {
876 execution.setVariable(Prefix + "isNetworkRollbackNeeded", true)
877 logger.debug(networkResponse)
878 execution.setVariable(Prefix + "updateNetworkResponse", networkResponse)
879 logger.debug(" Network Adapter update Success Response - " + "\n" + networkResponse)
881 // prepare rollback data
882 String rollbackData = utils.getNodeXml(networkResponse, "rollback", false).replace("tag0:","").replace(":tag0","")
883 rollbackData = rollbackData.replace("rollback>", "networkRollback>")
884 String rollbackNetwork =
885 """<rollbackNetworkRequest>
887 </rollbackNetworkRequest>"""
888 String rollbackNetworkXml = utils.formatXml(rollbackNetwork)
889 execution.setVariable(Prefix + "rollbackNetworkRequest", rollbackNetworkXml)
890 logger.debug(" Network Adapter rollback data - " + "\n" + rollbackNetworkXml)
892 } else { // network error
893 if (returnCode.toInteger() > 399 && returnCode.toInteger() < 600) { //4xx, 5xx
894 if (networkResponse.contains("updateNetworkError")) {
895 networkResponse = networkResponse.replace('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>', '')
896 errorMessage = utils.getNodeText(networkResponse, "message")
897 errorMessage = "Received error from Network Adapter: " + errorMessage
898 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
900 } else { // CatchAll exception
901 if (returnCode == "500") {
902 errorMessage = "JBWEB000065: HTTP Status 500."
904 errorMessage = "Return code is " + returnCode
906 errorMessage = "Received error from Network Adapter: " + errorMessage
907 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
911 } else { // CatchAll exception
912 String dataErrorMessage = "Received error from Network Adapter. Return code is: " + returnCode
913 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
919 } catch (BpmnError e) {
922 } catch (Exception ex) {
923 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. validateUpdateNetworkResponse() - " + ex.getMessage()
924 logger.debug(exceptionMessage)
925 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
932 public void validateSDNCResponse (DelegateExecution execution) {
934 execution.setVariable("prefix", Prefix)
936 logger.trace("Inside validateSDNCResponse of DoUpdateNetworkInstance ")
938 String response = execution.getVariable(Prefix + "changeAssignSDNCResponse")
939 WorkflowException workflowException = null
941 workflowException = execution.getVariable(Prefix + "WorkflowException")
942 //execution.setVariable("WorkflowException", workflowException)
943 } catch (Exception ex) {
944 logger.debug(" Sdnc 'WorkflowException' object is empty or null. ")
947 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
949 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
950 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
952 String changeAssignSDNCResponseDecodeXml = execution.getVariable(Prefix + "changeAssignSDNCResponse")
953 changeAssignSDNCResponseDecodeXml = changeAssignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
954 execution.setVariable(Prefix + "changeAssignSDNCResponse", changeAssignSDNCResponseDecodeXml)
956 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, prefix+'sdncResponseSuccess'
957 execution.setVariable(Prefix + "isSdncRollbackNeeded", true)
958 logger.debug("Successfully Validated SDNC Response")
961 logger.debug("Did NOT Successfully Validated SDNC Response")
962 throw new BpmnError("MSOWorkflowException")
968 public void postProcessResponse (DelegateExecution execution) {
970 execution.setVariable("prefix", Prefix)
972 logger.trace("Inside postProcessResponse of DoUpdateNetworkInstance ")
975 logger.debug(" ***** Is Exception Encountered (isException)? : " + execution.getVariable(Prefix + "isException"))
976 if (execution.getVariable(Prefix + "isException") == false) {
978 execution.setVariable("orchestrationStatus", "")
979 execution.setVariable("networkId", execution.getVariable(Prefix + "networkId"))
980 execution.setVariable("networkName", execution.getVariable(Prefix + "networkName"))
981 prepareSuccessRollbackData(execution) // populate rollbackData
982 execution.setVariable("WorkflowException", null)
983 execution.setVariable(Prefix + "Success", true)
984 logger.debug(" ***** postProcessResponse(), GOOD !!!")
986 execution.setVariable(Prefix + "Success", false)
987 execution.setVariable("rollbackData", null)
988 String exceptionMessage = " Exception encountered in MSO Bpmn. "
989 if (execution.getVariable("workflowException") != null) { // Output of Rollback flow.
990 logger.debug(" ***** workflowException: " + execution.getVariable("workflowException"))
991 WorkflowException wfex = execution.getVariable("workflowException")
992 exceptionMessage = wfex.getErrorMessage()
994 if (execution.getVariable(Prefix + "WorkflowException") != null) {
995 WorkflowException pwfex = execution.getVariable(Prefix + "WorkflowException")
996 exceptionMessage = pwfex.getErrorMessage()
999 // going to the Main flow: a-la-carte or macro
1000 logger.debug(" ***** postProcessResponse(), BAD !!!")
1001 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1002 throw new BpmnError("MSOWorkflowException")
1005 } catch(BpmnError b){
1006 logger.debug("Rethrowing MSOWorkflowException")
1010 } catch (Exception ex) {
1011 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. postProcessResponse() - " + ex.getMessage()
1012 logger.debug(exceptionMessage)
1013 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
1020 public void prepareSDNCRollbackRequest (DelegateExecution execution) {
1022 execution.setVariable("prefix", Prefix)
1024 logger.trace("Inside prepareSDNCRollbackRequest of DoUpdateNetworkInstance ")
1027 // for some reason the WorkflowException object is null after the sdnc rollback call task, need to save WorkflowException.
1028 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
1030 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1031 String updateNetworkInput = execution.getVariable(Prefix + "networkRequest")
1032 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1033 String changeAssignSDNCResponse = execution.getVariable(Prefix + "changeAssignSDNCResponse")
1034 String networkId = utils.getNodeText(changeAssignSDNCResponse, "network-id")
1036 String serviceInstanceId = utils.getNodeText(updateNetworkInput, "service-instance-id")
1038 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1039 String sndcTopologyRollbackRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, updateNetworkInput, serviceInstanceId, sdncCallback, "rollback", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
1040 String sndcTopologyRollbackRequestAsString = utils.formatXml(sndcTopologyRollbackRequest)
1041 execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRequestAsString)
1042 logger.debug(" Preparing request for SDNC Topology assign's rollback/compensation . . . - " + "\n" + sndcTopologyRollbackRequestAsString)
1044 } catch (Exception ex) {
1045 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareSDNCRollbackRequest() - " + ex.getMessage()
1046 logger.debug(exceptionMessage)
1047 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1053 public void prepareRollbackData(DelegateExecution execution) {
1055 execution.setVariable("prefix",Prefix)
1057 logger.trace("Inside prepareRollbackData() of DoUpdateNetworkInstance ")
1061 Map<String, String> rollbackData = new HashMap<String, String>();
1062 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
1063 if (rollbackSDNCRequest != null) {
1064 if (rollbackSDNCRequest != "") {
1065 rollbackData.put("rollbackSDNCRequest", execution.getVariable(Prefix + "rollbackSDNCRequest"))
1068 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
1069 if (rollbackNetworkRequest != null) {
1070 if (rollbackNetworkRequest != "") {
1071 rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
1074 execution.setVariable("rollbackData", rollbackData)
1075 logger.debug("** rollbackData : " + rollbackData)
1077 execution.setVariable("WorkflowException", execution.getVariable(Prefix + "WorkflowException"))
1078 logger.debug("** WorkflowException : " + execution.getVariable("WorkflowException"))
1080 } catch (Exception ex) {
1081 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareRollbackData() - " + ex.getMessage()
1082 logger.debug(exceptionMessage)
1083 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1089 public void prepareSuccessRollbackData(DelegateExecution execution) {
1091 execution.setVariable("prefix",Prefix)
1093 logger.trace("Inside prepareSuccessRollbackData() of DoUpdateNetworkInstance ")
1097 if (execution.getVariable("sdncVersion") != '1610') {
1098 // skip: 1702 for 'changeassign' or equivalent not yet defined in SNDC, so no rollback.
1100 prepareSDNCRollbackRequest(execution)
1103 Map<String, String> rollbackData = new HashMap<String, String>();
1104 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
1105 if (rollbackSDNCRequest != null) {
1106 if (rollbackSDNCRequest != "") {
1107 rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
1110 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
1111 if (rollbackNetworkRequest != null) {
1112 if (rollbackNetworkRequest != "") {
1113 rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
1116 execution.setVariable("rollbackData", rollbackData)
1118 logger.debug("** 'rollbackData' for Full Rollback : " + rollbackData)
1119 execution.setVariable("WorkflowException", null)
1122 } catch (Exception ex) {
1123 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage()
1124 logger.debug(exceptionMessage)
1125 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1131 public void setExceptionFlag(DelegateExecution execution){
1133 execution.setVariable("prefix",Prefix)
1135 logger.trace("Inside setExceptionFlag() of DoUpdateNetworkInstance ")
1139 execution.setVariable(Prefix + "isException", true)
1141 if (execution.getVariable("SavedWorkflowException1") != null) {
1142 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
1144 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
1146 logger.debug(Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"))
1148 } catch(Exception ex){
1149 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. setExceptionFlag(): " + ex.getMessage()
1150 logger.debug(exceptionMessage)
1151 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1157 // *******************************
1158 // Build Error Section
1159 // *******************************
1161 public void processJavaException(DelegateExecution execution){
1163 execution.setVariable("prefix",Prefix)
1165 logger.debug("Caught a Java Exception")
1166 logger.debug("Started processJavaException Method")
1167 logger.debug("Variables List: " + execution.getVariables())
1168 execution.setVariable("UnexpectedError", "Caught a Java Lang Exception - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
1169 exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
1171 }catch(Exception e){
1172 logger.debug("Caught Exception during processJavaException Method: " + e)
1173 execution.setVariable("UnexpectedError", "Exception in processJavaException method") // Adding this line temporarily until this flows error handling gets updated
1174 exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method")
1176 logger.debug("Completed processJavaException Method")