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.Response
26 import org.camunda.bpm.engine.delegate.BpmnError
27 import org.camunda.bpm.engine.delegate.DelegateExecution
28 import org.onap.aai.domain.yang.L3Network
29 import org.onap.aaiclient.client.aai.AAIObjectType
30 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
31 import org.onap.aaiclient.client.aai.entities.Relationships
32 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
33 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
34 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder
35 import org.onap.aaiclient.client.graphinventory.entities.uri.Depth
36 import org.onap.logging.filter.base.ErrorCode
37 import org.onap.logging.filter.base.ONAPComponents;
38 import org.onap.so.bpmn.common.scripts.AaiUtil
39 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
40 import org.onap.so.bpmn.common.scripts.ExceptionUtil
41 import org.onap.so.bpmn.common.scripts.MsoUtils
42 import org.onap.so.bpmn.common.scripts.NetworkUtils
43 import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
44 import org.onap.so.bpmn.common.scripts.VidUtils
45 import org.onap.so.bpmn.core.UrnPropertiesReader
46 import org.onap.so.bpmn.core.WorkflowException
47 import org.onap.so.bpmn.core.json.JsonUtils
48 import org.onap.so.client.HttpClient
49 import org.onap.so.client.HttpClientFactory
50 import org.onap.so.constants.Defaults
51 import org.onap.so.logger.LoggingAnchor
52 import org.onap.so.logger.MessageEnum
53 import org.slf4j.Logger
54 import org.slf4j.LoggerFactory
55 import org.springframework.web.util.UriUtils
56 import groovy.json.JsonOutput
58 public class DoDeleteNetworkInstance extends AbstractServiceTaskProcessor {
59 private static final Logger logger = LoggerFactory.getLogger( DoDeleteNetworkInstance.class);
61 String Prefix= "DELNWKI_"
62 String groovyClassName = "DoDeleteNetworkInstance"
63 ExceptionUtil exceptionUtil = new ExceptionUtil()
64 JsonUtils jsonUtil = new JsonUtils()
65 VidUtils vidUtils = new VidUtils(this)
66 NetworkUtils networkUtils = new NetworkUtils()
67 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
69 public InitializeProcessVariables(DelegateExecution execution){
70 /* Initialize all the process variables in this block */
72 execution.setVariable(Prefix + "networkRequest", "")
73 execution.setVariable(Prefix + "isSilentSuccess", false)
74 execution.setVariable(Prefix + "Success", false)
76 execution.setVariable(Prefix + "requestId", "")
77 execution.setVariable(Prefix + "source", "")
78 execution.setVariable(Prefix + "lcpCloudRegion", "")
79 execution.setVariable(Prefix + "networkInputs", "")
80 execution.setVariable(Prefix + "tenantId", "")
82 execution.setVariable(Prefix + "queryAAIResponse", "")
83 execution.setVariable(Prefix + "aaiReturnCode", "")
84 execution.setVariable(Prefix + "isAAIGood", false)
85 execution.setVariable(Prefix + "isVfRelationshipExist", false)
87 // AAI query Cloud Region
88 execution.setVariable(Prefix + "queryCloudRegionRequest","")
89 execution.setVariable(Prefix + "queryCloudRegionReturnCode","")
90 execution.setVariable(Prefix + "queryCloudRegionResponse","")
91 execution.setVariable(Prefix + "cloudRegionPo","")
92 execution.setVariable(Prefix + "cloudRegionSdnc","")
94 execution.setVariable(Prefix + "deleteNetworkRequest", "")
95 execution.setVariable(Prefix + "deleteNetworkResponse", "")
96 execution.setVariable(Prefix + "networkReturnCode", "")
97 execution.setVariable(Prefix + "rollbackNetworkRequest", "")
99 execution.setVariable(Prefix + "deleteSDNCRequest", "")
100 execution.setVariable(Prefix + "deleteSDNCResponse", "")
101 execution.setVariable(Prefix + "sdncReturnCode", "")
102 execution.setVariable(Prefix + "sdncResponseSuccess", false)
104 execution.setVariable(Prefix + "deactivateSDNCRequest", "")
105 execution.setVariable(Prefix + "deactivateSDNCResponse", "")
106 execution.setVariable(Prefix + "deactivateSdncReturnCode", "")
107 execution.setVariable(Prefix + "isSdncDeactivateRollbackNeeded", "")
109 execution.setVariable(Prefix + "rollbackDeactivateSDNCRequest", "")
110 execution.setVariable(Prefix + "isException", false)
115 // **************************************************
116 // Pre or Prepare Request Section
117 // **************************************************
119 public void preProcessRequest (DelegateExecution execution) {
121 execution.setVariable("prefix",Prefix)
123 logger.trace("Inside preProcessRequest() of " + groovyClassName + " Request ")
125 // initialize flow variables
126 InitializeProcessVariables(execution)
129 // get incoming message/input
130 execution.setVariable("action", "DELETE")
131 String deleteNetwork = execution.getVariable("bpmnRequest")
132 if (deleteNetwork != null) {
133 if (deleteNetwork.contains("requestDetails")) {
134 // JSON format request is sent, create xml
136 def prettyJson = JsonOutput.prettyPrint(deleteNetwork.toString())
137 logger.debug(" Incoming message formatted . . . : " + '\n' + prettyJson)
138 deleteNetwork = vidUtils.createXmlNetworkRequestInfra(execution, deleteNetwork)
140 } catch (Exception ex) {
141 String dataErrorMessage = " Invalid json format Request - " + ex.getMessage()
142 logger.debug(dataErrorMessage)
143 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
146 // XML format request is sent
150 // vIPR format request is sent, create xml from individual variables
151 deleteNetwork = vidUtils.createXmlNetworkRequestInstance(execution)
154 deleteNetwork = utils.formatXml(deleteNetwork)
155 logger.debug(deleteNetwork)
156 execution.setVariable(Prefix + "networkRequest", deleteNetwork)
157 logger.debug(Prefix + "networkRequest - " + '\n' + deleteNetwork)
159 // validate 'backout-on-failure' to override 'mso.rollback'
160 boolean rollbackEnabled = networkUtils.isRollbackEnabled(execution, deleteNetwork)
161 execution.setVariable(Prefix + "rollbackEnabled", rollbackEnabled)
162 logger.debug(Prefix + "rollbackEnabled - " + rollbackEnabled)
164 String networkInputs = utils.getNodeXml(deleteNetwork, "network-inputs", false).replace("tag0:","").replace(":tag0","")
165 execution.setVariable(Prefix + "networkInputs", networkInputs)
168 String messageId = execution.getVariable("testMessageId") // for testing
169 if (messageId == null || messageId == "") {
170 messageId = UUID.randomUUID()
171 logger.debug(Prefix + "messageId, random generated: " + messageId)
173 logger.debug(Prefix + "messageId, pre-assigned: " + messageId)
175 execution.setVariable(Prefix + "messageId", messageId)
177 String source = utils.getNodeText(deleteNetwork, "source")
178 execution.setVariable(Prefix + "source", source)
179 logger.debug(Prefix + "source - " + source)
181 String networkId = ""
182 if (utils.nodeExists(networkInputs, "network-id")) {
183 networkId = utils.getNodeText(networkInputs, "network-id")
184 if (networkId == null || networkId == "" || networkId == 'null' ) {
185 sendSyncError(execution)
186 // missing value of network-id
187 String dataErrorMessage = "network-request has missing 'network-id' element/value."
188 logger.debug(" Invalid Request - " + dataErrorMessage)
189 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
193 // lcpCloudRegion or tenantId not sent, will be extracted from query AA&I
194 def lcpCloudRegion = null
195 if (utils.nodeExists(networkInputs, "aic-cloud-region")) {
196 lcpCloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region")
197 if (lcpCloudRegion == 'null') {
198 lcpCloudRegion = null
201 execution.setVariable(Prefix + "lcpCloudRegion", lcpCloudRegion)
202 logger.debug("lcpCloudRegion : " + lcpCloudRegion)
204 String tenantId = null
205 if (utils.nodeExists(networkInputs, "tenant-id")) {
206 tenantId = utils.getNodeText(networkInputs, "tenant-id")
207 if (tenantId == 'null') {
212 execution.setVariable(Prefix + "tenantId", tenantId)
213 logger.debug("tenantId : " + tenantId)
215 String sdncVersion = execution.getVariable("sdncVersion")
216 logger.debug("sdncVersion? : " + sdncVersion)
218 // PO Authorization Info / headers Authorization=
219 String basicAuthValuePO = UrnPropertiesReader.getVariable("mso.adapters.po.auth", execution)
222 def encodedString = utils.getBasicAuth(basicAuthValuePO, UrnPropertiesReader.getVariable("mso.msoKey", execution))
223 execution.setVariable("BasicAuthHeaderValuePO",encodedString)
224 execution.setVariable("BasicAuthHeaderValueSDNC", encodedString)
226 } catch (IOException ex) {
227 String dataErrorMessage = " Unable to encode PO/SDNC user/password string - " + ex.getMessage()
228 logger.debug(dataErrorMessage )
229 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
232 } catch (BpmnError e) {
235 } catch (Exception ex){
237 String exceptionMessage = "Exception Encountered in DoDeleteNetworkInstance, PreProcessRequest() - " + ex.getMessage()
238 logger.debug(exceptionMessage)
239 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
246 public void callRESTQueryAAI (DelegateExecution execution) {
248 execution.setVariable("prefix",Prefix)
250 logger.debug(" ***** Inside callRESTQueryAAI() of DoDoDeleteNetworkInstance ***** " )
253 String networkInputs = execution.getVariable(Prefix + "networkInputs")
254 String networkId = utils.getNodeText(networkInputs, "network-id")
255 networkId = UriUtils.encode(networkId,"UTF-8")
256 ExceptionUtil exceptionUtil = new ExceptionUtil()
257 Boolean isVfRelationshipExist = false
259 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId).depth(Depth.ALL)
260 Optional<L3Network> l3Network = getAAIClient().get(L3Network.class,uri);
261 AAIResultWrapper wrapper = getAAIClient().get(uri);
262 Optional<Relationships> relationships = wrapper.getRelationships()
264 if (l3Network.isPresent()) {
265 execution.setVariable(Prefix + "aaiReturnCode", 200)
266 execution.setVariable(Prefix + "queryAAIResponse", l3Network.get())
267 execution.setVariable(Prefix + "isAAIGood", true)
268 if (relationships.isPresent()){
269 if(!relationships.get().getRelatedAAIUris(AAIObjectType.VF_MODULE).isEmpty()){
270 execution.setVariable(Prefix + "isVfRelationshipExist", true)
271 isVfRelationshipExist = true
272 String relationshipMessage = "AAI Query Success Response but 'vf-module' relationship exist, not allowed to delete: network Id: " + networkId
273 exceptionUtil.buildWorkflowException(execution, 2500, relationshipMessage)
275 List<AAIResourceUri> tenantURIList = relationships.get().getRelatedAAIUris(AAIObjectType.TENANT)
276 for(AAIResourceUri tenantURI: tenantURIList){
277 if(execution.getVariable(Prefix + "tenantId") == null) {
278 String tenantId = tenantURI.getURIKeys().get(AAIFluentTypeBuilder.Types.TENANT.getUriParams().tenantId)
279 execution.setVariable(Prefix + "tenantId", tenantId)
280 logger.debug(" Get AAI getTenantId() : " + tenantId)
283 List<AAIResourceUri> cloudRegionURIList = relationships.get().getRelatedAAIUris(AAIObjectType.CLOUD_REGION)
284 for(AAIResourceUri tenantURI: cloudRegionURIList){
285 if(execution.getVariable(Prefix + "lcpCloudRegion") == null) {
286 String lcpCloudRegion = tenantURI.getURIKeys().get(AAIFluentTypeBuilder.Types.CLOUD_REGION.getUriParams().cloudRegionId)
287 execution.setVariable(Prefix + "lcpCloudRegion", lcpCloudRegion)
288 logger.debug(" Get AAI getCloudRegion() : " + lcpCloudRegion)
293 logger.debug(Prefix + "isVfRelationshipExist - " + isVfRelationshipExist)
295 // not found // empty aai response
296 execution.setVariable(Prefix + "aaiReturnCode", 404)
297 execution.setVariable(Prefix + "isAAIGood", false)
298 execution.setVariable(Prefix + "isSilentSuccess", true)
299 logger.debug(" AAI Query is Silent Success")
301 logger.debug(" AAI Query call, isAAIGood? : " + execution.getVariable(Prefix + "isAAIGood"))
302 } catch (Exception ex) {
304 String exceptionMessage = "Exception Encountered in DoDeleteNetworkInstance, callRESTQueryAAI() - " + ex.getMessage()
305 logger.debug(exceptionMessage)
306 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
312 public void callRESTQueryAAICloudRegion (DelegateExecution execution) {
314 execution.setVariable("prefix", Prefix)
316 logger.debug(" ***** Inside callRESTQueryAAICloudRegion of DoDeleteNetworkInstance ***** " )
319 String networkInputs = execution.getVariable(Prefix + "networkInputs")
320 // String cloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region")
321 String cloudRegion = execution.getVariable(Prefix + "lcpCloudRegion")
323 AaiUtil aaiUtil = new AaiUtil(this)
325 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION, Defaults.CLOUD_OWNER.toString(), cloudRegion)
326 def queryCloudRegionRequest = aaiUtil.createAaiUri(uri)
328 execution.setVariable(Prefix + "queryCloudRegionRequest", queryCloudRegionRequest)
330 String cloudRegionPo = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "PO", cloudRegion)
331 String cloudRegionSdnc = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "SDNC", cloudRegion)
333 if ((cloudRegionPo != "ERROR") && (cloudRegionSdnc != "ERROR")) {
334 execution.setVariable(Prefix + "cloudRegionPo", cloudRegionPo)
335 execution.setVariable(Prefix + "cloudRegionSdnc", cloudRegionSdnc)
338 String dataErrorMessage = "QueryAAICloudRegion Unsuccessful. Return Code: " + execution.getVariable(Prefix + "queryCloudRegionReturnCode")
339 logger.debug(dataErrorMessage)
340 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
344 } catch (BpmnError e) {
347 } catch (Exception ex) {
349 String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, callRESTQueryAAICloudRegion(). Unexpected Response from AAI - " + ex.getMessage()
350 logger.debug(exceptionMessage)
351 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
357 public void prepareNetworkRequest (DelegateExecution execution) {
359 execution.setVariable("prefix", Prefix)
361 logger.trace("Inside prepareNetworkRequest of DoDeleteNetworkInstance ")
362 ExceptionUtil exceptionUtil = new ExceptionUtil()
365 String networkRequest = execution.getVariable(Prefix + "networkRequest")
366 String cloudSiteId = execution.getVariable(Prefix + "cloudRegionPo")
367 String tenantId = execution.getVariable(Prefix + "tenantId")
369 L3Network l3Network = execution.getVariable(Prefix + "queryAAIResponse")
370 String networkType = l3Network.getNetworkType()
371 String networkId = l3Network.getNetworkId()
373 String networkStackId = ""
374 networkStackId = l3Network.getHeatStackId()
375 if (networkStackId == 'null' || networkStackId == "" || networkStackId == null) {
376 networkStackId = "force_delete"
379 String requestId = execution.getVariable("msoRequestId")
380 if (requestId != null) {
381 execution.setVariable("mso-request-id", requestId)
383 requestId = execution.getVariable("mso-request-id")
385 String serviceInstanceId = execution.getVariable("serviceInstanceId")
387 // Added new Elements
388 String messageId = execution.getVariable(Prefix + "messageId")
389 String notificationUrl = "" //TODO - is this coming from URN? What variable/value to use?
390 //String notificationUrl = execution.getVariable("URN_?????") //TODO - is this coming from URN? What variable/value to use?
392 String modelCustomizationUuid = ""
393 if (utils.nodeExists(networkRequest, "networkModelInfo")) {
394 String networkModelInfo = utils.getNodeXml(networkRequest, "networkModelInfo", false).replace("tag0:","").replace(":tag0","")
395 modelCustomizationUuid = utils.getNodeText(networkModelInfo, "modelCustomizationUuid")
397 modelCustomizationUuid = utils.getNodeText(networkRequest, "modelCustomizationId")
400 String deleteNetworkRequest = """
401 <deleteNetworkRequest>
402 <cloudSiteId>${MsoUtils.xmlEscape(cloudSiteId)}</cloudSiteId>
403 <tenantId>${MsoUtils.xmlEscape(tenantId)}</tenantId>
404 <networkId>${MsoUtils.xmlEscape(networkId)}</networkId>
405 <networkStackId>${MsoUtils.xmlEscape(networkStackId)}</networkStackId>
406 <networkType>${MsoUtils.xmlEscape(networkType)}</networkType>
407 <modelCustomizationUuid>${MsoUtils.xmlEscape(modelCustomizationUuid)}</modelCustomizationUuid>
408 <skipAAI>true</skipAAI>
410 <requestId>${MsoUtils.xmlEscape(requestId)}</requestId>
411 <serviceInstanceId>${MsoUtils.xmlEscape(serviceInstanceId)}</serviceInstanceId>
413 <messageId>${MsoUtils.xmlEscape(messageId)}</messageId>
414 <notificationUrl>${MsoUtils.xmlEscape(notificationUrl)}</notificationUrl>
415 </deleteNetworkRequest>
418 logger.debug(Prefix + "deleteNetworkRequest - " + "\n" + deleteNetworkRequest)
420 String buildDeleteNetworkRequestAsString = utils.formatXml(deleteNetworkRequest)
421 logger.debug(buildDeleteNetworkRequestAsString)
422 logger.debug(Prefix + "deleteNetworkRequestAsString - " + "\n" + buildDeleteNetworkRequestAsString)
424 String restURL = UrnPropertiesReader.getVariable("mso.adapters.network.rest.endpoint", execution)
425 execution.setVariable("mso.adapters.network.rest.endpoint", restURL + "/" + networkId)
426 logger.debug("mso.adapters.network.rest.endpoint - " + "\n" + restURL + "/" + networkId)
428 execution.setVariable(Prefix + "deleteNetworkRequest", buildDeleteNetworkRequestAsString)
429 logger.debug(Prefix + "deleteNetworkRequest - " + "\n" + buildDeleteNetworkRequestAsString)
431 catch (Exception ex) {
433 String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareNetworkRequest(). Unexpected Response from AAI - " + ex.getMessage()
434 logger.debug(exceptionMessage)
435 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
441 * This method is used instead of an HTTP Connector task because the
442 * connector does not allow DELETE with a body.
444 public void sendRequestToVnfAdapter(DelegateExecution execution) {
445 def method = getClass().getSimpleName() + '.sendRequestToVnfAdapter(' +
446 'execution=' + execution.getId() +
449 logger.trace('Entered ' + method)
453 String vnfAdapterUrl = UrnPropertiesReader.getVariable("mso.adapters.network.rest.endpoint",execution)
454 String vnfAdapterRequest = execution.getVariable(Prefix + "deleteNetworkRequest")
456 URL url = new URL(vnfAdapterUrl)
457 HttpClient httpClient = new HttpClientFactory().newXmlClient(url, ONAPComponents.OPENSTACK_ADAPTER)
458 httpClient.accept = "application/xml"
459 httpClient.addAdditionalHeader("Authorization", execution.getVariable("BasicAuthHeaderValuePO"))
460 Response response = httpClient.delete(vnfAdapterRequest)
462 execution.setVariable(Prefix + "deleteNetworkResponse", response.readEntity(String.class))
463 execution.setVariable(Prefix + "networkReturnCode", response.getStatus())
465 } catch (Exception ex) {
467 String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, sendRequestToVnfAdapter() - " + ex.getMessage()
468 logger.error(LoggingAnchor.FIVE, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), exceptionMessage,
469 "BPMN", ErrorCode.UnknownError.getValue(),
470 "Exception is:\n" + ex);
471 logger.debug(exceptionMessage)
472 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
478 public void prepareSDNCRequest (DelegateExecution execution) {
480 execution.setVariable("prefix", Prefix)
482 logger.trace("Inside prepareSDNCRequest of DoDeleteNetworkInstance ")
486 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
487 String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
489 String networkId = ""
490 if (utils.nodeExists(deleteNetworkInput, "network-id")) {
491 networkId = utils.getNodeText(deleteNetworkInput, "network-id")
493 if (networkId == 'null') {networkId = ""}
495 String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
497 // get/set 'msoRequestId' and 'mso-request-id'
498 String requestId = execution.getVariable("msoRequestId")
499 if (requestId != null) {
500 execution.setVariable("mso-request-id", requestId)
502 requestId = execution.getVariable("mso-request-id")
504 execution.setVariable(Prefix + "requestId", requestId)
505 logger.debug(Prefix + "requestId " + requestId)
506 L3Network queryAAIResponse = execution.getVariable(Prefix + "queryAAIResponse")
508 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
509 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
510 // 1. prepare delete topology via SDNC Adapter SUBFLOW call
511 String sndcTopologyDeleteRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "delete", "DisconnectNetworkRequest", cloudRegionId, networkId, queryAAIResponse, null)
512 String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyDeleteRequest)
513 logger.debug(sndcTopologyDeleteRequesAsString)
514 execution.setVariable(Prefix + "deleteSDNCRequest", sndcTopologyDeleteRequesAsString)
515 logger.debug(Prefix + "deleteSDNCRequest - " + "\n" + sndcTopologyDeleteRequesAsString)
517 } catch (Exception ex) {
519 String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareSDNCRequest() - " + ex.getMessage()
520 logger.error(LoggingAnchor.FIVE, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), exceptionMessage,
521 "BPMN", ErrorCode.UnknownError.getValue(),
522 "Exception is:\n" + ex);
523 logger.debug(exceptionMessage)
524 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
530 public void prepareRpcSDNCRequest (DelegateExecution execution) {
532 execution.setVariable("prefix", Prefix)
534 logger.trace("Inside prepareRpcSDNCRequest of DoDeleteNetworkInstance ")
538 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
539 String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
541 String networkId = ""
542 if (utils.nodeExists(deleteNetworkInput, "network-id")) {
543 networkId = utils.getNodeText(deleteNetworkInput, "network-id")
545 if (networkId == 'null') {networkId = ""}
547 String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
549 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
550 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
551 // 1. prepare delete topology via SDNC Adapter SUBFLOW call
552 String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "unassign", "DeleteNetworkInstance", cloudRegionId, networkId, null)
553 String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
554 logger.debug(sndcTopologyDeleteRequesAsString)
555 execution.setVariable(Prefix + "deleteSDNCRequest", sndcTopologyDeleteRequesAsString)
556 logger.debug(Prefix + "deleteSDNCRequest - " + "\n" + sndcTopologyDeleteRequesAsString)
558 } catch (Exception ex) {
560 String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareSDNCRequest() - " + ex.getMessage()
561 logger.error(LoggingAnchor.FIVE, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), exceptionMessage,
562 "BPMN", ErrorCode.UnknownError.getValue(),
563 "Exception is:\n" + ex);
564 logger.debug(exceptionMessage)
565 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
572 public void prepareRpcSDNCDeactivate(DelegateExecution execution) {
574 execution.setVariable("prefix",Prefix)
576 logger.trace("Inside prepareRpcSDNCDeactivate() of DoDeleteNetworkInstance ")
581 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
582 String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
583 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
584 String networkId = ""
585 if (utils.nodeExists(deleteNetworkInput, "network-id")) {
586 networkId = utils.getNodeText(deleteNetworkInput, "network-id")
588 if (networkId == 'null') {networkId = ""}
589 String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
591 String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "deactivate", "DeleteNetworkInstance", cloudRegionId, networkId, null)
592 String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
593 execution.setVariable(Prefix + "deactivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
594 logger.debug(" Preparing request for RPC SDNC Topology deactivate - " + "\n" + sndcTopologyRollbackRpcRequestAsString)
597 } catch (Exception ex) {
598 String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRpcSDNCActivateRollback() - " + ex.getMessage()
599 logger.debug(exceptionMessage)
600 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
606 public void validateSDNCResponse (DelegateExecution execution) {
608 execution.setVariable("prefix", Prefix)
610 logger.trace("Inside validateSDNCResponse of DoDeleteNetworkInstance ")
612 String response = execution.getVariable(Prefix + "deleteSDNCResponse")
613 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
614 WorkflowException workflowException = execution.getVariable("WorkflowException")
616 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
617 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
619 String deleteSDNCResponseDecodeXml = execution.getVariable(Prefix + "deleteSDNCResponse")
620 deleteSDNCResponseDecodeXml = deleteSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
621 execution.setVariable(Prefix + "deleteSDNCResponse", deleteSDNCResponseDecodeXml)
623 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, prefix+'sdncResponseSuccess'
624 execution.setVariable(Prefix + "isSdncRollbackNeeded", true) //
625 execution.setVariable(Prefix + "isPONR", true)
626 logger.debug("Successfully Validated SDNC Response")
628 logger.debug("Did NOT Successfully Validated SDNC Response")
629 throw new BpmnError("MSOWorkflowException")
634 public void validateRpcSDNCDeactivateResponse (DelegateExecution execution) {
636 execution.setVariable("prefix",Prefix)
638 logger.trace("Inside validateRpcSDNCDeactivateResponse() of DoDeleteNetworkInstance ")
640 String response = execution.getVariable(Prefix + "deactivateSDNCResponse")
641 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
642 WorkflowException workflowException = execution.getVariable("WorkflowException")
644 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
645 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
647 String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "deactivateSDNCResponse")
648 assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
649 execution.setVariable(Prefix + "deactivateSDNCResponse", assignSDNCResponseDecodeXml)
651 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, Prefix+'sdncResponseSuccess'
652 execution.setVariable(Prefix + "isSdncDeactivateRollbackNeeded", true)
653 logger.debug("Successfully Validated Rpc SDNC Activate Response")
656 logger.debug("Did NOT Successfully Validated Rpc SDNC Deactivate Response")
657 throw new BpmnError("MSOWorkflowException")
662 public void prepareRpcSDNCDeactivateRollback(DelegateExecution execution) {
664 execution.setVariable("prefix",Prefix)
666 logger.trace("Inside prepareRpcSDNCDeactivateRollback() of DoDeleteNetworkInstance ")
671 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
672 String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
673 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
674 String deactivateSDNCResponse = execution.getVariable(Prefix + "deactivateSDNCResponse")
675 String networkId = utils.getNodeText(deactivateSDNCResponse, "network-id")
676 if (networkId == 'null') {networkId = ""}
677 String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
679 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
680 String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "activate", "CreateNetworkInstance", cloudRegionId, networkId, null)
681 String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
682 execution.setVariable(Prefix + "rollbackDeactivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
683 logger.debug(" Preparing request for RPC SDNC Topology 'activate-CreateNetworkInstance' rollback . . . - " + "\n" + sndcTopologyRollbackRpcRequestAsString)
686 } catch (Exception ex) {
687 String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRpcSDNCDeactivateRollback() - " + ex.getMessage()
688 logger.debug(exceptionMessage)
689 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
695 public void prepareRollbackData(DelegateExecution execution) {
697 execution.setVariable("prefix",Prefix)
699 logger.trace("Inside prepareRollbackData() of DoDeleteNetworkInstance ")
703 Map<String, String> rollbackData = new HashMap<String, String>();
704 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
705 if (rollbackNetworkRequest != null) {
706 if (rollbackNetworkRequest != "") {
707 rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
710 String rollbackDeactivateSDNCRequest = execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest")
711 if (rollbackDeactivateSDNCRequest != null) {
712 if (rollbackDeactivateSDNCRequest != "") {
713 rollbackData.put("rollbackDeactivateSDNCRequest", execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest"))
716 execution.setVariable("rollbackData", rollbackData)
717 logger.debug("** rollbackData : " + rollbackData)
719 execution.setVariable("WorkflowException", execution.getVariable("WorkflowException"))
720 logger.debug("** WorkflowException : " + execution.getVariable("WorkflowException"))
722 } catch (Exception ex) {
723 String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRollbackData() - " + ex.getMessage()
724 logger.debug(exceptionMessage)
725 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
731 public void postProcessResponse (DelegateExecution execution) {
733 execution.setVariable("prefix", Prefix)
735 logger.trace("Inside postProcessResponse of DoDeleteNetworkInstance ")
739 logger.debug(" ***** Is Exception Encountered (isException)? : " + execution.getVariable(Prefix + "isException"))
740 if (execution.getVariable(Prefix + "isException") == false) {
741 execution.setVariable(Prefix + "Success", true)
742 execution.setVariable("WorkflowException", null)
743 if (execution.getVariable(Prefix + "isSilentSuccess") == true) {
744 execution.setVariable("rolledBack", false)
746 execution.setVariable("rolledBack", true)
748 prepareSuccessRollbackData(execution) // populate rollbackData
751 execution.setVariable(Prefix + "Success", false)
752 execution.setVariable("rollbackData", null)
753 String exceptionMessage = " Exception encountered in MSO Bpmn. "
754 if (execution.getVariable("workflowException") != null) { // Output of Rollback flow.
755 logger.debug(" ***** workflowException: " + execution.getVariable("workflowException"))
756 WorkflowException wfex = execution.getVariable("workflowException")
757 exceptionMessage = wfex.getErrorMessage()
759 if (execution.getVariable(Prefix + "WorkflowException") != null) {
760 WorkflowException pwfex = execution.getVariable(Prefix + "WorkflowException")
761 exceptionMessage = pwfex.getErrorMessage()
763 if (execution.getVariable("WorkflowException") != null) {
764 WorkflowException pwfex = execution.getVariable("WorkflowException")
765 exceptionMessage = pwfex.getErrorMessage()
770 // going to the Main flow: a-la-carte or macro
771 logger.debug(" ***** postProcessResponse(), BAD !!!")
772 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
773 throw new BpmnError("MSOWorkflowException")
777 } catch(BpmnError b){
778 logger.debug("Rethrowing MSOWorkflowException")
781 } catch (Exception ex) {
783 String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, postProcessResponse() - " + ex.getMessage()
784 logger.debug(exceptionMessage)
785 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
786 throw new BpmnError("MSOWorkflowException")
792 public void prepareSuccessRollbackData(DelegateExecution execution) {
794 execution.setVariable("prefix",Prefix)
796 logger.trace("Inside prepareSuccessRollbackData() of DoDeleteNetworkInstance ")
800 if (execution.getVariable("sdncVersion") != '1610') {
801 prepareRpcSDNCDeactivateRollback(execution)
802 prepareRpcSDNCUnassignRollback(execution)
804 prepareSDNCRollback(execution)
807 Map<String, String> rollbackData = new HashMap<String, String>();
808 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
809 if (rollbackSDNCRequest != null) {
810 if (rollbackSDNCRequest != "") {
811 rollbackData.put("rollbackSDNCRequest", execution.getVariable(Prefix + "rollbackSDNCRequest"))
814 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
815 if (rollbackNetworkRequest != null) {
816 if (rollbackNetworkRequest != "") {
817 rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
820 String rollbackDeactivateSDNCRequest = execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest")
821 if (rollbackDeactivateSDNCRequest != null) {
822 if (rollbackDeactivateSDNCRequest != "") {
823 rollbackData.put("rollbackDeactivateSDNCRequest", execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest"))
826 execution.setVariable("rollbackData", rollbackData)
828 logger.debug("** rollbackData : " + rollbackData)
829 execution.setVariable("WorkflowException", null)
832 } catch (Exception ex) {
833 String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage()
834 logger.debug(exceptionMessage)
835 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
841 public void prepareRpcSDNCUnassignRollback(DelegateExecution execution) {
843 execution.setVariable("prefix",Prefix)
845 logger.trace("Inside prepareRpcSDNCUnassignRollbac() of DoDeleteNetworkInstance ")
850 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
851 String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
853 String deleteSDNCResponse = execution.getVariable(Prefix + "deleteSDNCResponse")
854 String networkId = utils.getNodeText(deleteSDNCResponse, "network-id")
855 if (networkId == 'null') {networkId = ""}
856 String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
858 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
859 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
860 // 1. prepare delete topology via SDNC Adapter SUBFLOW call
861 String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "assign", "CreateNetworkInstance", cloudRegionId, networkId, null)
862 String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
863 logger.debug(sndcTopologyDeleteRequesAsString)
864 execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyDeleteRequesAsString)
865 logger.debug(Prefix + "rollbackSDNCRequest" + "\n" + sndcTopologyDeleteRequesAsString)
866 logger.debug(" Preparing request for RPC SDNC Topology 'assign-CreateNetworkInstance' rollback . . . - " + "\n" + sndcTopologyDeleteRequesAsString)
869 } catch (Exception ex) {
870 String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRpcSDNCUnassignRollback() - " + ex.getMessage()
871 logger.debug(exceptionMessage)
872 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
878 public void prepareSDNCRollback (DelegateExecution execution) {
880 execution.setVariable("prefix", Prefix)
882 logger.trace("Inside prepareSDNCRollback of DoDeleteNetworkInstance ")
887 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
888 String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
890 String networkId = ""
891 if (utils.nodeExists(deleteNetworkInput, "network-id")) {
892 networkId = utils.getNodeText(deleteNetworkInput, "network-id")
894 if (networkId == 'null') {networkId = ""}
896 String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
898 // get/set 'msoRequestId' and 'mso-request-id'
899 String requestId = execution.getVariable("msoRequestId")
900 if (requestId != null) {
901 execution.setVariable("mso-request-id", requestId)
903 requestId = execution.getVariable("mso-request-id")
905 execution.setVariable(Prefix + "requestId", requestId)
907 L3Network queryAAIResponse = execution.getVariable(Prefix + "queryAAIResponse")
909 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
910 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
911 // 1. prepare delete topology via SDNC Adapter SUBFLOW call
912 String sndcTopologyDeleteRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "rollback", "DisconnectNetworkRequest", cloudRegionId, networkId, queryAAIResponse, null)
913 String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyDeleteRequest)
914 logger.debug(sndcTopologyDeleteRequesAsString)
915 execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyDeleteRequesAsString)
916 logger.debug(Prefix + "rollbackSDNCRequest - " + "\n" + sndcTopologyDeleteRequesAsString)
917 logger.debug(" Preparing request for RPC SDNC Topology 'rollback-DisconnectNetworkRequest' rollback . . . - " + "\n" + sndcTopologyDeleteRequesAsString)
920 } catch (Exception ex) {
922 String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareSDNCRollback() - " + ex.getMessage()
923 logger.error(LoggingAnchor.FIVE, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), exceptionMessage,
924 "BPMN", ErrorCode.UnknownError.getValue(),
925 "Exception is:\n" + ex);
926 logger.debug(exceptionMessage)
927 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
933 public void setExceptionFlag(DelegateExecution execution){
935 execution.setVariable("prefix",Prefix)
937 logger.trace("Inside setExceptionFlag() of DoDeleteNetworkInstance ")
941 execution.setVariable(Prefix + "isException", true)
943 if (execution.getVariable("SavedWorkflowException1") != null) {
944 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
946 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
948 logger.debug(Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"))
950 } catch(Exception ex){
951 String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance flow. setExceptionFlag(): " + ex.getMessage()
952 logger.debug(exceptionMessage)
953 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
959 // *******************************
960 // Build Error Section
961 // *******************************
963 public void processJavaException(DelegateExecution execution){
965 execution.setVariable("prefix",Prefix)
967 logger.debug("Caught a Java Exception")
968 logger.debug("Started processJavaException Method")
969 logger.debug("Variables List: " + execution.getVariables())
970 execution.setVariable("UnexpectedError", "Caught a Java Lang Exception") // Adding this line temporarily until this flows error handling gets updated
971 exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
974 logger.debug("Caught Exception during processJavaException Method: " + e)
975 execution.setVariable("UnexpectedError", "Exception in processJavaException method") // Adding this line temporarily until this flows error handling gets updated
976 exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method")
978 logger.debug("Completed processJavaException Method of " + Prefix)