ca4643dea004350f2344bbf46fae4ec230b7ea03
[so.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.so.bpmn.infrastructure.scripts
22
23 import org.camunda.bpm.engine.delegate.BpmnError
24 import org.camunda.bpm.engine.delegate.DelegateExecution
25 import org.onap.aai.domain.yang.L3Network
26 import org.onap.so.bpmn.common.scripts.AaiUtil
27 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
28 import org.onap.so.bpmn.common.scripts.ExceptionUtil
29 import org.onap.so.bpmn.common.scripts.MsoUtils
30 import org.onap.so.bpmn.common.scripts.NetworkUtils
31 import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
32 import org.onap.so.bpmn.common.scripts.VidUtils
33 import org.onap.so.bpmn.core.UrnPropertiesReader
34 import org.onap.so.bpmn.core.WorkflowException
35 import org.onap.so.bpmn.core.json.JsonUtils
36 import org.onap.so.client.HttpClient
37 import org.onap.so.client.aai.AAIObjectType
38 import org.onap.so.client.aai.entities.AAIResultWrapper
39 import org.onap.so.client.aai.entities.Relationships
40 import org.onap.so.client.aai.entities.uri.AAIResourceUri
41 import org.onap.so.client.aai.entities.uri.AAIUriFactory
42 import org.onap.so.client.graphinventory.entities.uri.Depth
43 import org.onap.so.constants.Defaults
44 import org.onap.so.logger.MessageEnum
45 import org.onap.so.logger.MsoLogger
46
47 import org.springframework.web.util.UriUtils
48 import org.onap.so.utils.TargetEntity
49
50 import groovy.json.JsonOutput
51 import javax.ws.rs.core.Response
52
53 public class DoDeleteNetworkInstance extends AbstractServiceTaskProcessor {
54         private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, DoDeleteNetworkInstance.class);
55
56         String Prefix= "DELNWKI_"
57         String groovyClassName = "DoDeleteNetworkInstance"
58         ExceptionUtil exceptionUtil = new ExceptionUtil()
59         JsonUtils jsonUtil = new JsonUtils()
60         VidUtils vidUtils = new VidUtils(this)
61         NetworkUtils networkUtils = new NetworkUtils()
62         SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
63
64         public InitializeProcessVariables(DelegateExecution execution){
65                 /* Initialize all the process variables in this block */
66
67                 execution.setVariable(Prefix + "networkRequest", "")
68                 execution.setVariable(Prefix + "isSilentSuccess", false)
69                 execution.setVariable(Prefix + "Success", false)
70
71                 execution.setVariable(Prefix + "requestId", "")
72                 execution.setVariable(Prefix + "source", "")
73                 execution.setVariable(Prefix + "lcpCloudRegion", "")
74                 execution.setVariable(Prefix + "networkInputs", "")
75                 execution.setVariable(Prefix + "tenantId", "")
76
77                 execution.setVariable(Prefix + "queryAAIResponse", "")
78                 execution.setVariable(Prefix + "aaiReturnCode", "")
79                 execution.setVariable(Prefix + "isAAIGood", false)
80                 execution.setVariable(Prefix + "isVfRelationshipExist", false)
81
82                 // AAI query Cloud Region
83                 execution.setVariable(Prefix + "queryCloudRegionRequest","")
84                 execution.setVariable(Prefix + "queryCloudRegionReturnCode","")
85                 execution.setVariable(Prefix + "queryCloudRegionResponse","")
86                 execution.setVariable(Prefix + "cloudRegionPo","")
87                 execution.setVariable(Prefix + "cloudRegionSdnc","")
88
89                 execution.setVariable(Prefix + "deleteNetworkRequest", "")
90                 execution.setVariable(Prefix + "deleteNetworkResponse", "")
91                 execution.setVariable(Prefix + "networkReturnCode", "")
92                 execution.setVariable(Prefix + "rollbackNetworkRequest", "")
93
94                 execution.setVariable(Prefix + "deleteSDNCRequest", "")
95                 execution.setVariable(Prefix + "deleteSDNCResponse", "")
96                 execution.setVariable(Prefix + "sdncReturnCode", "")
97                 execution.setVariable(Prefix + "sdncResponseSuccess", false)
98
99                 execution.setVariable(Prefix + "deactivateSDNCRequest", "")
100                 execution.setVariable(Prefix + "deactivateSDNCResponse", "")
101                 execution.setVariable(Prefix + "deactivateSdncReturnCode", "")
102                 execution.setVariable(Prefix + "isSdncDeactivateRollbackNeeded", "")
103
104                 execution.setVariable(Prefix + "rollbackDeactivateSDNCRequest", "")
105                 execution.setVariable(Prefix + "isException", false)
106
107
108         }
109
110         // **************************************************
111         //     Pre or Prepare Request Section
112         // **************************************************
113
114         public void preProcessRequest (DelegateExecution execution) {
115
116                 execution.setVariable("prefix",Prefix)
117
118                 msoLogger.trace("Inside preProcessRequest() of " + groovyClassName + " Request ")
119
120                 // initialize flow variables
121                 InitializeProcessVariables(execution)
122
123                 try {
124                         // get incoming message/input
125                         execution.setVariable("action", "DELETE")
126                         String deleteNetwork = execution.getVariable("bpmnRequest")
127                         if (deleteNetwork != null) {
128                                 if (deleteNetwork.contains("requestDetails")) {
129                                         // JSON format request is sent, create xml
130                                         try {
131                                                 def prettyJson = JsonOutput.prettyPrint(deleteNetwork.toString())
132                                                 msoLogger.debug(" Incoming message formatted . . . : " + '\n' + prettyJson)
133                                                 deleteNetwork =  vidUtils.createXmlNetworkRequestInfra(execution, deleteNetwork)
134
135                                         } catch (Exception ex) {
136                                                 String dataErrorMessage = " Invalid json format Request - " + ex.getMessage()
137                                                 msoLogger.debug(dataErrorMessage)
138                                                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
139                                         }
140                                 } else {
141                                            // XML format request is sent
142
143                                 }
144                         } else {
145                                         // vIPR format request is sent, create xml from individual variables
146                                 deleteNetwork = vidUtils.createXmlNetworkRequestInstance(execution)
147                         }
148
149                         deleteNetwork = utils.formatXml(deleteNetwork)
150                         msoLogger.debug(deleteNetwork)
151                         execution.setVariable(Prefix + "networkRequest", deleteNetwork)
152                         msoLogger.debug(Prefix + "networkRequest - " + '\n' + deleteNetwork)
153
154                         // validate 'backout-on-failure' to override 'mso.rollback'
155                         boolean rollbackEnabled = networkUtils.isRollbackEnabled(execution, deleteNetwork)
156                         execution.setVariable(Prefix + "rollbackEnabled", rollbackEnabled)
157                         msoLogger.debug(Prefix + "rollbackEnabled - " + rollbackEnabled)
158
159                         String networkInputs = utils.getNodeXml(deleteNetwork, "network-inputs", false).replace("tag0:","").replace(":tag0","")
160                         execution.setVariable(Prefix + "networkInputs", networkInputs)
161
162                         // prepare messageId
163                         String messageId = execution.getVariable("testMessageId")  // for testing
164                         if (messageId == null || messageId == "") {
165                                         messageId = UUID.randomUUID()
166                                         msoLogger.debug(Prefix + "messageId, random generated: " + messageId)
167                         } else {
168                                         msoLogger.debug(Prefix + "messageId, pre-assigned: " + messageId)
169                         }
170                         execution.setVariable(Prefix + "messageId", messageId)
171
172                         String source = utils.getNodeText(deleteNetwork, "source")
173                         execution.setVariable(Prefix + "source", source)
174                         msoLogger.debug(Prefix + "source - " + source)
175
176                         String networkId = ""
177                         if (utils.nodeExists(networkInputs, "network-id")) {
178                                 networkId = utils.getNodeText(networkInputs, "network-id")
179                                 if (networkId == null || networkId == "" || networkId == 'null' ) {
180                                         sendSyncError(execution)
181                                         // missing value of network-id
182                                         String dataErrorMessage = "network-request has missing 'network-id' element/value."
183                                         msoLogger.debug(" Invalid Request - " + dataErrorMessage)
184                                         exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
185                                 }
186                         }
187
188                         // lcpCloudRegion or tenantId not sent, will be extracted from query AA&I
189                         def lcpCloudRegion = null
190                         if (utils.nodeExists(networkInputs, "aic-cloud-region")) {
191                                 lcpCloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region")
192                                 if (lcpCloudRegion == 'null') {
193                                         lcpCloudRegion = null
194                                 }
195                         }
196                         execution.setVariable(Prefix + "lcpCloudRegion", lcpCloudRegion)
197                         msoLogger.debug("lcpCloudRegion : " + lcpCloudRegion)
198
199                         String tenantId = null
200                         if (utils.nodeExists(networkInputs, "tenant-id")) {
201                                 tenantId = utils.getNodeText(networkInputs, "tenant-id")
202                                 if (tenantId == 'null') {
203                                         tenantId = null
204                                 }
205
206                         }
207                         execution.setVariable(Prefix + "tenantId", tenantId)
208                         msoLogger.debug("tenantId : " + tenantId)
209
210                         String sdncVersion = execution.getVariable("sdncVersion")
211                         msoLogger.debug("sdncVersion? : " + sdncVersion)
212
213                         // PO Authorization Info / headers Authorization=
214                         String basicAuthValuePO = UrnPropertiesReader.getVariable("mso.adapters.po.auth", execution)
215
216                         try {
217                                 def encodedString = utils.getBasicAuth(basicAuthValuePO, UrnPropertiesReader.getVariable("mso.msoKey", execution))
218                                 execution.setVariable("BasicAuthHeaderValuePO",encodedString)
219                                 execution.setVariable("BasicAuthHeaderValueSDNC", encodedString)
220
221                         } catch (IOException ex) {
222                                 String dataErrorMessage = " Unable to encode PO/SDNC user/password string - " + ex.getMessage()
223                                 msoLogger.debug(dataErrorMessage )
224                                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
225                         }
226
227                 } catch (BpmnError e) {
228                         throw e;
229
230                 } catch (Exception ex){
231                          // caught exception
232                         String exceptionMessage = "Exception Encountered in DoDeleteNetworkInstance, PreProcessRequest() - " + ex.getMessage()
233                         msoLogger.debug(exceptionMessage)
234                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
235
236                 }
237
238         }
239
240
241         public void callRESTQueryAAI (DelegateExecution execution) {
242
243                 execution.setVariable("prefix",Prefix)
244
245                 msoLogger.debug(" ***** Inside callRESTQueryAAI() of DoDoDeleteNetworkInstance ***** " )
246
247                 // get variables
248                 String networkInputs  = execution.getVariable(Prefix + "networkInputs")
249                 String networkId   = utils.getNodeText(networkInputs, "network-id")
250                 networkId = UriUtils.encode(networkId,"UTF-8")
251                 ExceptionUtil exceptionUtil = new ExceptionUtil()
252                 Boolean isVfRelationshipExist = false
253                 try {
254                         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId).depth(Depth.ALL)
255                         Optional<L3Network> l3Network = getAAIClient().get(L3Network.class,uri);
256                         AAIResultWrapper wrapper = getAAIClient().get(uri);
257                         Optional<Relationships> relationships = wrapper.getRelationships()
258
259                         if (l3Network.isPresent()) {
260                                 execution.setVariable(Prefix + "aaiReturnCode", 200)
261                                 execution.setVariable(Prefix + "queryAAIResponse", l3Network.get())
262                                 execution.setVariable(Prefix + "isAAIGood", true)
263                                 if (relationships.isPresent()){
264                                         if(relationships.get().getRelatedAAIUris(AAIObjectType.VF_MODULE).isEmpty()){
265                                                 execution.setVariable(Prefix + "isVfRelationshipExist", true)
266                                                 isVfRelationshipExist = true
267                                                 String relationshipMessage = "AAI Query Success Response but 'vf-module' relationship exist, not allowed to delete: network Id: " + networkId
268                                                 exceptionUtil.buildWorkflowException(execution, 2500, relationshipMessage)
269                                         }else{
270                                                 List<AAIResourceUri> tenantURIList = relationships.get().getRelatedAAIUris(AAIObjectType.TENANT)
271                                                 for(AAIResourceUri tenantURI: tenantURIList){
272                                                         if(execution.getVariable(Prefix + "tenantId") == null) {
273                                                                 String tenantId = tenantURI.getURIKeys().get("tenant-id")
274                                                                 execution.setVariable(Prefix + "tenantId", tenantId)
275                                                                 msoLogger.debug(" Get AAI getTenantId()  : " + tenantId)
276                                                         }
277                                                 }
278                                                 List<AAIResourceUri> cloudRegionURIList = relationships.get().getRelatedAAIUris(AAIObjectType.CLOUD_REGION)
279                                                 for(AAIResourceUri tenantURI: cloudRegionURIList){
280                                                         if(execution.getVariable(Prefix + "lcpCloudRegion") == null) {
281                                                                 String lcpCloudRegion = tenantURI.getURIKeys().get("cloud-region-id")
282                                                                 execution.setVariable(Prefix + "lcpCloudRegion", lcpCloudRegion)
283                                                                 msoLogger.debug(" Get AAI getCloudRegion()  : " + lcpCloudRegion)
284                                                         }
285                                                 }
286                                         }
287                                 }
288                                 msoLogger.debug(Prefix + "isVfRelationshipExist - " + isVfRelationshipExist)
289                         } else {
290                                 // not found // empty aai response
291                                 execution.setVariable(Prefix + "aaiReturnCode", 404)
292                                 execution.setVariable(Prefix + "isAAIGood", false)
293                                 execution.setVariable(Prefix + "isSilentSuccess", true)
294                                 msoLogger.debug(" AAI Query is Silent Success")
295                         }
296                         msoLogger.debug(" AAI Query call, isAAIGood? : " + execution.getVariable(Prefix + "isAAIGood"))
297                 } catch (Exception ex) {
298                    // caught exception
299                    String exceptionMessage = "Exception Encountered in DoDeleteNetworkInstance, callRESTQueryAAI() - " + ex.getMessage()
300                    msoLogger.debug(exceptionMessage)
301                    exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
302
303                 }
304
305         }
306
307         public void callRESTQueryAAICloudRegion (DelegateExecution execution) {
308
309                 execution.setVariable("prefix", Prefix)
310
311                 msoLogger.debug(" ***** Inside callRESTQueryAAICloudRegion of DoDeleteNetworkInstance ***** " )
312
313                 try {
314                         String networkInputs  = execution.getVariable(Prefix + "networkInputs")
315                         // String cloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region")
316                         String cloudRegion = execution.getVariable(Prefix + "lcpCloudRegion")
317                         // Prepare AA&I url
318                         AaiUtil aaiUtil = new AaiUtil(this)
319
320                         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION, Defaults.CLOUD_OWNER.toString(), cloudRegion)
321                         def queryCloudRegionRequest = aaiUtil.createAaiUri(uri)
322
323                         execution.setVariable(Prefix + "queryCloudRegionRequest", queryCloudRegionRequest)
324
325                         String cloudRegionPo = aaiUtil.getAAICloudReqion(execution,  queryCloudRegionRequest, "PO", cloudRegion)
326                         String cloudRegionSdnc = aaiUtil.getAAICloudReqion(execution,  queryCloudRegionRequest, "SDNC", cloudRegion)
327
328                         if ((cloudRegionPo != "ERROR") && (cloudRegionSdnc != "ERROR")) {
329                                 execution.setVariable(Prefix + "cloudRegionPo", cloudRegionPo)
330                                 execution.setVariable(Prefix + "cloudRegionSdnc", cloudRegionSdnc)
331
332                         } else {
333                                 String dataErrorMessage = "QueryAAICloudRegion Unsuccessful. Return Code: " + execution.getVariable(Prefix + "queryCloudRegionReturnCode")
334                                 msoLogger.debug(dataErrorMessage)
335                                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
336
337                         }
338
339                 } catch (BpmnError e) {
340                 throw e;
341
342                 } catch (Exception ex) {
343                         // caught exception
344                         String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, callRESTQueryAAICloudRegion(). Unexpected Response from AAI - " + ex.getMessage()
345                         msoLogger.debug(exceptionMessage)
346                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
347
348                 }
349
350         }
351
352         public void prepareNetworkRequest (DelegateExecution execution) {
353
354                 execution.setVariable("prefix", Prefix)
355
356                 msoLogger.trace("Inside prepareNetworkRequest of DoDeleteNetworkInstance ")
357                 ExceptionUtil exceptionUtil = new ExceptionUtil()
358                 try {
359                         // get variables
360                         String networkRequest = execution.getVariable(Prefix + "networkRequest")
361                         String cloudSiteId = execution.getVariable(Prefix + "cloudRegionPo")
362                         String tenantId = execution.getVariable(Prefix + "tenantId")
363
364                         L3Network l3Network = execution.getVariable(Prefix + "queryAAIResponse")
365                         String networkType = l3Network.getNetworkType()
366                         String networkId = l3Network.getNetworkId()
367
368                         String networkStackId = ""
369                         networkStackId = l3Network.getHeatStackId()
370                         if (networkStackId == 'null' || networkStackId == "" || networkStackId == null) {
371                                 networkStackId = "force_delete"
372                         }
373
374                         String requestId = execution.getVariable("msoRequestId")
375                         if (requestId != null) {
376                                 execution.setVariable("mso-request-id", requestId)
377                         } else {
378                                 requestId = execution.getVariable("mso-request-id")
379                         }
380                         String serviceInstanceId = execution.getVariable("serviceInstanceId")
381
382                         // Added new Elements
383                         String messageId = execution.getVariable(Prefix + "messageId")
384                         String notificationUrl = ""                                   //TODO - is this coming from URN? What variable/value to use?
385                         //String notificationUrl = execution.getVariable("URN_?????") //TODO - is this coming from URN? What variable/value to use?
386
387                         String modelCustomizationUuid = ""
388                         if (utils.nodeExists(networkRequest, "networkModelInfo")) {
389                                 String networkModelInfo = utils.getNodeXml(networkRequest, "networkModelInfo", false).replace("tag0:","").replace(":tag0","")
390                                 modelCustomizationUuid = utils.getNodeText(networkModelInfo, "modelCustomizationUuid")
391                         } else {
392                             modelCustomizationUuid = utils.getNodeText(networkRequest, "modelCustomizationId")
393                         }
394
395                         String deleteNetworkRequest = """
396                                           <deleteNetworkRequest>
397                                             <cloudSiteId>${MsoUtils.xmlEscape(cloudSiteId)}</cloudSiteId>
398                                             <tenantId>${MsoUtils.xmlEscape(tenantId)}</tenantId>
399                                             <networkId>${MsoUtils.xmlEscape(networkId)}</networkId>
400                                                 <networkStackId>${MsoUtils.xmlEscape(networkStackId)}</networkStackId>
401                                             <networkType>${MsoUtils.xmlEscape(networkType)}</networkType>
402                                                 <modelCustomizationUuid>${MsoUtils.xmlEscape(modelCustomizationUuid)}</modelCustomizationUuid>
403                                                 <skipAAI>true</skipAAI>
404                                             <msoRequest>
405                                                <requestId>${MsoUtils.xmlEscape(requestId)}</requestId>
406                                                <serviceInstanceId>${MsoUtils.xmlEscape(serviceInstanceId)}</serviceInstanceId>
407                                             </msoRequest>
408                                                 <messageId>${MsoUtils.xmlEscape(messageId)}</messageId>
409                                                 <notificationUrl>${MsoUtils.xmlEscape(notificationUrl)}</notificationUrl>
410                                           </deleteNetworkRequest>
411                                                 """.trim()
412
413                         msoLogger.debug(Prefix + "deleteNetworkRequest - " + "\n" +  deleteNetworkRequest)
414                         // Format Response
415                         String buildDeleteNetworkRequestAsString = utils.formatXml(deleteNetworkRequest)
416                         msoLogger.debug(buildDeleteNetworkRequestAsString)
417                         msoLogger.debug(Prefix + "deleteNetworkRequestAsString - " + "\n" +  buildDeleteNetworkRequestAsString)
418
419                         String restURL = UrnPropertiesReader.getVariable("mso.adapters.network.rest.endpoint", execution)
420                         execution.setVariable("mso.adapters.network.rest.endpoint", restURL + "/" + networkId)
421                         msoLogger.debug("mso.adapters.network.rest.endpoint - " + "\n" +  restURL + "/" + networkId)
422
423                         execution.setVariable(Prefix + "deleteNetworkRequest", buildDeleteNetworkRequestAsString)
424                         msoLogger.debug(Prefix + "deleteNetworkRequest - " + "\n" +  buildDeleteNetworkRequestAsString)
425                 }
426                 catch (Exception ex) {
427                         // caught exception
428                         String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareNetworkRequest(). Unexpected Response from AAI - " + ex.getMessage()
429                         msoLogger.debug(exceptionMessage)
430                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
431
432                 }
433         }
434
435         /**
436          * This method is used instead of an HTTP Connector task because the
437          * connector does not allow DELETE with a body.
438          */
439         public void sendRequestToVnfAdapter(DelegateExecution execution) {
440                 def method = getClass().getSimpleName() + '.sendRequestToVnfAdapter(' +
441                         'execution=' + execution.getId() +
442                         ')'
443
444                 msoLogger.trace('Entered ' + method)
445
446                 try {
447
448                         String vnfAdapterUrl = UrnPropertiesReader.getVariable("mso.adapters.network.rest.endpoint",execution)
449                         String vnfAdapterRequest = execution.getVariable(Prefix + "deleteNetworkRequest")
450
451                         URL url = new URL(vnfAdapterUrl)
452                         HttpClient httpClient = new HttpClient(url, "application/xml", TargetEntity.OPENSTACK_ADAPTER)
453                         httpClient.addAdditionalHeader("Authorization", execution.getVariable("BasicAuthHeaderValuePO"))
454                         Response response = httpClient.delete(vnfAdapterRequest)
455
456
457                         execution.setVariable(Prefix + "networkReturnCode", response.getStatus())
458
459                 } catch (Exception ex) {
460                         // caught exception
461                         String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, sendRequestToVnfAdapter() - " + ex.getMessage()
462                         msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, exceptionMessage, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, "Exception is:\n" + ex);
463                         msoLogger.debug(exceptionMessage)
464                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
465
466                 }
467         }
468
469
470         public void prepareSDNCRequest (DelegateExecution execution) {
471
472                 execution.setVariable("prefix", Prefix)
473
474                 msoLogger.trace("Inside prepareSDNCRequest of DoDeleteNetworkInstance ")
475
476                 try {
477                         // get variables
478                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
479                         String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
480
481                         String networkId = ""
482                         if (utils.nodeExists(deleteNetworkInput, "network-id")) {
483                                 networkId = utils.getNodeText(deleteNetworkInput, "network-id")
484                         }
485                         if (networkId == 'null') {networkId = ""}
486
487                         String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
488
489                         // get/set 'msoRequestId' and 'mso-request-id'
490                         String requestId = execution.getVariable("msoRequestId")
491                         if (requestId != null) {
492                                 execution.setVariable("mso-request-id", requestId)
493                         } else {
494                             requestId = execution.getVariable("mso-request-id")
495                         }
496                         execution.setVariable(Prefix + "requestId", requestId)
497                         msoLogger.debug(Prefix + "requestId " + requestId)
498                         L3Network queryAAIResponse = execution.getVariable(Prefix + "queryAAIResponse")
499
500                         SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
501                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
502                         // 1. prepare delete topology via SDNC Adapter SUBFLOW call
503                         String sndcTopologyDeleteRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "delete", "DisconnectNetworkRequest", cloudRegionId, networkId, queryAAIResponse, null)
504                     String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyDeleteRequest)
505                         msoLogger.debug(sndcTopologyDeleteRequesAsString)
506                         execution.setVariable(Prefix + "deleteSDNCRequest", sndcTopologyDeleteRequesAsString)
507                         msoLogger.debug(Prefix + "deleteSDNCRequest - " + "\n" +  sndcTopologyDeleteRequesAsString)
508
509                 } catch (Exception ex) {
510                         // caught exception
511                         String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareSDNCRequest() - " + ex.getMessage()
512                         msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, exceptionMessage, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, "Exception is:\n" + ex);
513                         msoLogger.debug(exceptionMessage)
514                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
515
516                 }
517
518         }
519
520         public void prepareRpcSDNCRequest (DelegateExecution execution) {
521
522                 execution.setVariable("prefix", Prefix)
523
524                 msoLogger.trace("Inside prepareRpcSDNCRequest of DoDeleteNetworkInstance ")
525
526                 try {
527                         // get variables
528                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
529                         String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
530
531                         String networkId = ""
532                         if (utils.nodeExists(deleteNetworkInput, "network-id")) {
533                                 networkId = utils.getNodeText(deleteNetworkInput, "network-id")
534                         }
535                         if (networkId == 'null') {networkId = ""}
536
537                         String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
538
539                         SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
540                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
541                         // 1. prepare delete topology via SDNC Adapter SUBFLOW call
542                         String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "unassign", "DeleteNetworkInstance", cloudRegionId, networkId, null)
543                         String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
544                         msoLogger.debug(sndcTopologyDeleteRequesAsString)
545                         execution.setVariable(Prefix + "deleteSDNCRequest", sndcTopologyDeleteRequesAsString)
546                         msoLogger.debug(Prefix + "deleteSDNCRequest - " + "\n" +  sndcTopologyDeleteRequesAsString)
547
548                 } catch (Exception ex) {
549                         // caught exception
550                         String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareSDNCRequest() - " + ex.getMessage()
551                         msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, exceptionMessage, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, "Exception is:\n" + ex);
552                         msoLogger.debug(exceptionMessage)
553                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
554
555                 }
556
557         }
558
559
560         public void prepareRpcSDNCDeactivate(DelegateExecution execution) {
561
562                 execution.setVariable("prefix",Prefix)
563
564                 msoLogger.trace("Inside prepareRpcSDNCDeactivate() of DoDeleteNetworkInstance ")
565
566                 try {
567
568                         // get variables
569                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
570                         String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
571                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
572                         String networkId = ""
573                         if (utils.nodeExists(deleteNetworkInput, "network-id")) {
574                                 networkId = utils.getNodeText(deleteNetworkInput, "network-id")
575                         }
576                         if (networkId == 'null') {networkId = ""}
577                         String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
578
579                         String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "deactivate", "DeleteNetworkInstance", cloudRegionId, networkId, null)
580                         String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
581                         execution.setVariable(Prefix + "deactivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
582                         msoLogger.debug(" Preparing request for RPC SDNC Topology deactivate - " + "\n" +  sndcTopologyRollbackRpcRequestAsString)
583
584
585                 } catch (Exception ex) {
586                         String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRpcSDNCActivateRollback() - " + ex.getMessage()
587                         msoLogger.debug(exceptionMessage)
588                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
589
590                 }
591
592         }
593
594         // **************************************************
595         //     Post or Validate Response Section
596         // **************************************************
597
598         public void validateNetworkResponse (DelegateExecution execution) {
599
600                 execution.setVariable("prefix", Prefix)
601
602                 msoLogger.trace("Inside validateNetworkResponse of DoDeleteNetworkInstance ")
603
604                 try {
605                         String returnCode = execution.getVariable(Prefix + "networkReturnCode")
606                         String networkResponse = execution.getVariable(Prefix + "deleteNetworkResponse")
607
608                         msoLogger.debug(" Network Adapter responseCode: " + returnCode)
609                         msoLogger.debug("Network Adapter Response - " + "\n" + networkResponse)
610                         msoLogger.debug(networkResponse)
611
612                         String errorMessage = ""
613                         if (returnCode == "200") {
614                                 msoLogger.debug(" Network Adapter Response is successful - " + "\n" + networkResponse)
615
616                                 // prepare rollback data
617                                 String rollbackData = utils.getNodeXml(networkResponse, "rollback", false).replace("tag0:","").replace(":tag0","")
618                                 if ((rollbackData == null) || (rollbackData.isEmpty())) {
619                                         msoLogger.debug(" Network Adapter 'rollback' data is not Sent: " + "\n" + networkResponse)
620                                         execution.setVariable(Prefix + "rollbackNetworkRequest", "")
621                                 } else {
622                                     String rollbackNetwork =
623                                           """<NetworkAdapter:rollbackNetwork xmlns:NetworkAdapter="http://org.onap.so/network">
624                                                         ${rollbackData}
625                                                  </NetworkAdapter:rollbackNetwork>"""
626                                     String rollbackNetworkXml = utils.formatXml(rollbackNetwork)
627                                     execution.setVariable(Prefix + "rollbackNetworkRequest", rollbackNetworkXml)
628                                     msoLogger.debug(" Network Adapter rollback data - " + "\n" + rollbackNetworkXml)
629                                 }
630
631
632                         } else { // network error
633                            if (returnCode.toInteger() > 399 && returnCode.toInteger() < 600) {   //4xx, 5xx
634                                    if (networkResponse.contains("deleteNetworkError")  ) {
635                                            networkResponse = networkResponse.replace('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>', '')
636                                            errorMessage  = utils.getNodeText(networkResponse, "message")
637                                            errorMessage  = "Received error from Network Adapter: " + errorMessage
638                                            exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
639
640                                    } else { // CatchAll exception
641                                            if (returnCode == "500") {
642                                                    errorMessage = "JBWEB000065: HTTP Status 500."
643                                        } else {
644                                                errorMessage = "Return code is " + returnCode
645                                        }
646                                            errorMessage  = "Received error from Network Adapter: " + errorMessage
647                                            exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
648
649                                    }
650
651                            } else { // CatchAll exception
652                                    String dataErrorMessage  = "Received error from Network Adapter. Return code is: " + returnCode
653                                    exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
654
655                            }
656
657                         }
658
659                 } catch (BpmnError e) {
660                         throw e;
661
662                 } catch (Exception ex) {
663                         // caught exception
664                         String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, validateNetworkResponse() - " + ex.getMessage()
665                         msoLogger.debug(exceptionMessage)
666                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
667
668                 }
669
670         }
671
672         public void validateSDNCResponse (DelegateExecution execution) {
673
674                 execution.setVariable("prefix", Prefix)
675
676                 msoLogger.trace("Inside validateSDNCResponse of DoDeleteNetworkInstance ")
677
678                 String response = execution.getVariable(Prefix + "deleteSDNCResponse")
679                 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
680                 WorkflowException workflowException = execution.getVariable("WorkflowException")
681
682                 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
683                 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
684                 // reset variable
685                 String deleteSDNCResponseDecodeXml = execution.getVariable(Prefix + "deleteSDNCResponse")
686                 deleteSDNCResponseDecodeXml = deleteSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
687                 execution.setVariable(Prefix + "deleteSDNCResponse", deleteSDNCResponseDecodeXml)
688
689                 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) {  // from sdnc util, prefix+'sdncResponseSuccess'
690                         execution.setVariable(Prefix + "isSdncRollbackNeeded", true)      //
691                         execution.setVariable(Prefix + "isPONR", true)
692                         msoLogger.debug("Successfully Validated SDNC Response")
693                 } else {
694                         msoLogger.debug("Did NOT Successfully Validated SDNC Response")
695                         throw new BpmnError("MSOWorkflowException")
696                 }
697
698         }
699
700         public void validateRpcSDNCDeactivateResponse (DelegateExecution execution) {
701
702                 execution.setVariable("prefix",Prefix)
703
704                 msoLogger.trace("Inside validateRpcSDNCDeactivateResponse() of DoDeleteNetworkInstance ")
705
706                 String response = execution.getVariable(Prefix + "deactivateSDNCResponse")
707                 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
708                 WorkflowException workflowException = execution.getVariable("WorkflowException")
709
710                 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
711                 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
712                 // reset variable
713                 String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "deactivateSDNCResponse")
714                 assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
715                 execution.setVariable(Prefix + "deactivateSDNCResponse", assignSDNCResponseDecodeXml)
716
717                 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) {  // from sdnc util, Prefix+'sdncResponseSuccess'
718                         execution.setVariable(Prefix + "isSdncDeactivateRollbackNeeded", true)
719                         msoLogger.debug("Successfully Validated Rpc SDNC Activate Response")
720
721                 } else {
722                         msoLogger.debug("Did NOT Successfully Validated Rpc SDNC Deactivate Response")
723                         throw new BpmnError("MSOWorkflowException")
724                 }
725
726         }
727
728         public void prepareRpcSDNCDeactivateRollback(DelegateExecution execution) {
729
730                 execution.setVariable("prefix",Prefix)
731
732                 msoLogger.trace("Inside prepareRpcSDNCDeactivateRollback() of DoDeleteNetworkInstance ")
733
734                 try {
735
736                         // get variables
737                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
738                         String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
739                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
740                         String deactivateSDNCResponse = execution.getVariable(Prefix + "deactivateSDNCResponse")
741                         String networkId = utils.getNodeText(deactivateSDNCResponse, "network-id")
742                         if (networkId == 'null') {networkId = ""}
743                         String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
744
745                         // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
746                         String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "activate", "CreateNetworkInstance", cloudRegionId, networkId, null)
747                         String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
748                         execution.setVariable(Prefix + "rollbackDeactivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
749                         msoLogger.debug(" Preparing request for RPC SDNC Topology 'activate-CreateNetworkInstance' rollback . . . - " + "\n" +  sndcTopologyRollbackRpcRequestAsString)
750
751
752                 } catch (Exception ex) {
753                         String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRpcSDNCDeactivateRollback() - " + ex.getMessage()
754                         msoLogger.debug(exceptionMessage)
755                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
756
757                 }
758
759         }
760
761         public void prepareRollbackData(DelegateExecution execution) {
762
763                 execution.setVariable("prefix",Prefix)
764
765                 msoLogger.trace("Inside prepareRollbackData() of DoDeleteNetworkInstance ")
766
767                 try {
768
769                         Map<String, String> rollbackData = new HashMap<String, String>();
770                         String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
771                         if (rollbackNetworkRequest != null) {
772                                 if (rollbackNetworkRequest != "") {
773                                    rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
774                             }
775                         }
776                         String rollbackDeactivateSDNCRequest = execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest")
777                         if (rollbackDeactivateSDNCRequest != null) {
778                                 if (rollbackDeactivateSDNCRequest != "") {
779                                 rollbackData.put("rollbackDeactivateSDNCRequest", execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest"))
780                             }
781                         }
782                         execution.setVariable("rollbackData", rollbackData)
783                         msoLogger.debug("** rollbackData : " + rollbackData)
784
785                         execution.setVariable("WorkflowException", execution.getVariable("WorkflowException"))
786                         msoLogger.debug("** WorkflowException : " + execution.getVariable("WorkflowException"))
787
788                 } catch (Exception ex) {
789                         String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRollbackData() - " + ex.getMessage()
790                         msoLogger.debug(exceptionMessage)
791                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
792
793                 }
794
795         }
796
797         public void postProcessResponse (DelegateExecution execution) {
798
799                 execution.setVariable("prefix", Prefix)
800
801                 msoLogger.trace("Inside postProcessResponse of DoDeleteNetworkInstance ")
802
803                 try {
804
805                         msoLogger.debug(" ***** Is Exception Encountered (isException)? : " + execution.getVariable(Prefix + "isException"))
806                         if (execution.getVariable(Prefix + "isException") == false) {
807                                 execution.setVariable(Prefix + "Success", true)
808                                 execution.setVariable("WorkflowException", null)
809                                 if (execution.getVariable(Prefix + "isSilentSuccess") == true) {
810                                         execution.setVariable("rolledBack", false)
811                                 } else {
812                                     execution.setVariable("rolledBack", true)
813                                 }
814                                 prepareSuccessRollbackData(execution) // populate rollbackData
815
816                         } else {
817                                 execution.setVariable(Prefix + "Success", false)
818                                 execution.setVariable("rollbackData", null)
819                                 String exceptionMessage = " Exception encountered in MSO Bpmn. "
820                                 if (execution.getVariable("workflowException") != null) {  // Output of Rollback flow.
821                                    msoLogger.debug(" ***** workflowException: " + execution.getVariable("workflowException"))
822                                    WorkflowException wfex = execution.getVariable("workflowException")
823                                    exceptionMessage = wfex.getErrorMessage()
824                                 } else {
825                                if (execution.getVariable(Prefix + "WorkflowException") != null) {
826                                       WorkflowException pwfex = execution.getVariable(Prefix + "WorkflowException")
827                                       exceptionMessage = pwfex.getErrorMessage()
828                                } else {
829                                       if (execution.getVariable("WorkflowException") != null) {
830                                              WorkflowException pwfex = execution.getVariable("WorkflowException")
831                                              exceptionMessage = pwfex.getErrorMessage()
832                                           }
833                                }
834                                 }
835
836                                 // going to the Main flow: a-la-carte or macro
837                                 msoLogger.debug(" ***** postProcessResponse(), BAD !!!")
838                                 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
839                                 throw new BpmnError("MSOWorkflowException")
840
841                         }
842
843                 } catch(BpmnError b){
844                     msoLogger.debug("Rethrowing MSOWorkflowException")
845                     throw b
846
847                 } catch (Exception ex) {
848                         // caught exception
849                         String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, postProcessResponse() - " + ex.getMessage()
850                         msoLogger.debug(exceptionMessage)
851                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
852                         throw new BpmnError("MSOWorkflowException")
853
854         }
855
856         }
857
858         public void prepareSuccessRollbackData(DelegateExecution execution) {
859
860                 execution.setVariable("prefix",Prefix)
861
862                 msoLogger.trace("Inside prepareSuccessRollbackData() of DoDeleteNetworkInstance ")
863
864                 try {
865
866                         if (execution.getVariable("sdncVersion") != '1610') {
867                                 prepareRpcSDNCDeactivateRollback(execution)
868                                 prepareRpcSDNCUnassignRollback(execution)
869                         } else {
870                             prepareSDNCRollback(execution)
871                         }
872
873                         Map<String, String> rollbackData = new HashMap<String, String>();
874                         String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
875                         if (rollbackSDNCRequest != null) {
876                                 if (rollbackSDNCRequest != "") {
877                                    rollbackData.put("rollbackSDNCRequest", execution.getVariable(Prefix + "rollbackSDNCRequest"))
878                                 }
879                         }
880                         String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
881                         if (rollbackNetworkRequest != null) {
882                                 if (rollbackNetworkRequest != "") {
883                                    rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
884                             }
885                         }
886                         String rollbackDeactivateSDNCRequest = execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest")
887                         if (rollbackDeactivateSDNCRequest != null) {
888                                 if (rollbackDeactivateSDNCRequest != "") {
889                                 rollbackData.put("rollbackDeactivateSDNCRequest", execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest"))
890                             }
891                         }
892                         execution.setVariable("rollbackData", rollbackData)
893
894                         msoLogger.debug("** rollbackData : " + rollbackData)
895                         execution.setVariable("WorkflowException", null)
896
897
898                 } catch (Exception ex) {
899                         String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage()
900                         msoLogger.debug(exceptionMessage)
901                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
902
903                 }
904
905         }
906
907         public void prepareRpcSDNCUnassignRollback(DelegateExecution execution) {
908
909                 execution.setVariable("prefix",Prefix)
910
911                 msoLogger.trace("Inside prepareRpcSDNCUnassignRollbac() of DoDeleteNetworkInstance ")
912
913                 try {
914
915                         // get variables
916                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
917                         String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
918
919                         String deleteSDNCResponse = execution.getVariable(Prefix + "deleteSDNCResponse")
920                         String networkId = utils.getNodeText(deleteSDNCResponse, "network-id")
921                         if (networkId == 'null') {networkId = ""}
922                         String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
923
924                         SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
925                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
926                         // 1. prepare delete topology via SDNC Adapter SUBFLOW call
927                         String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "assign", "CreateNetworkInstance", cloudRegionId, networkId, null)
928                         String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
929                         msoLogger.debug(sndcTopologyDeleteRequesAsString)
930                         execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyDeleteRequesAsString)
931                         msoLogger.debug(Prefix + "rollbackSDNCRequest" + "\n" +  sndcTopologyDeleteRequesAsString)
932                         msoLogger.debug(" Preparing request for RPC SDNC Topology 'assign-CreateNetworkInstance' rollback . . . - " + "\n" +  sndcTopologyDeleteRequesAsString)
933
934
935                 } catch (Exception ex) {
936                         String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRpcSDNCUnassignRollback() - " + ex.getMessage()
937                         msoLogger.debug(exceptionMessage)
938                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
939
940                 }
941
942         }
943
944         public void prepareSDNCRollback (DelegateExecution execution) {
945
946                 execution.setVariable("prefix", Prefix)
947
948                 msoLogger.trace("Inside prepareSDNCRollback of DoDeleteNetworkInstance ")
949
950                 try {
951
952                         // get variables
953                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
954                         String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
955
956                         String networkId = ""
957                         if (utils.nodeExists(deleteNetworkInput, "network-id")) {
958                                 networkId = utils.getNodeText(deleteNetworkInput, "network-id")
959                         }
960                         if (networkId == 'null') {networkId = ""}
961
962                         String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
963
964                         // get/set 'msoRequestId' and 'mso-request-id'
965                         String requestId = execution.getVariable("msoRequestId")
966                         if (requestId != null) {
967                                 execution.setVariable("mso-request-id", requestId)
968                         } else {
969                             requestId = execution.getVariable("mso-request-id")
970                         }
971                         execution.setVariable(Prefix + "requestId", requestId)
972
973                         L3Network queryAAIResponse = execution.getVariable(Prefix + "queryAAIResponse")
974
975                         SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
976                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
977                         // 1. prepare delete topology via SDNC Adapter SUBFLOW call
978                         String sndcTopologyDeleteRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "rollback", "DisconnectNetworkRequest", cloudRegionId, networkId, queryAAIResponse, null)
979                     String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyDeleteRequest)
980                         msoLogger.debug(sndcTopologyDeleteRequesAsString)
981                         execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyDeleteRequesAsString)
982                         msoLogger.debug(Prefix + "rollbackSDNCRequest - " + "\n" +  sndcTopologyDeleteRequesAsString)
983                         msoLogger.debug(" Preparing request for RPC SDNC Topology 'rollback-DisconnectNetworkRequest' rollback . . . - " + "\n" +  sndcTopologyDeleteRequesAsString)
984
985
986                 } catch (Exception ex) {
987                         // caught exception
988                         String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareSDNCRollback() - " + ex.getMessage()
989                         msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, exceptionMessage, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, "Exception is:\n" + ex);
990                         msoLogger.debug(exceptionMessage)
991                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
992
993                 }
994
995         }
996
997         public void setExceptionFlag(DelegateExecution execution){
998
999                 execution.setVariable("prefix",Prefix)
1000
1001                 msoLogger.trace("Inside setExceptionFlag() of DoDeleteNetworkInstance ")
1002
1003                 try {
1004
1005                         execution.setVariable(Prefix + "isException", true)
1006
1007                         if (execution.getVariable("SavedWorkflowException1") != null) {
1008                                 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
1009                         } else {
1010                                 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
1011                         }
1012                         msoLogger.debug(Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"))
1013
1014                 } catch(Exception ex){
1015                           String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance flow. setExceptionFlag(): " + ex.getMessage()
1016                         msoLogger.debug(exceptionMessage)
1017                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1018                 }
1019
1020         }
1021
1022
1023         // *******************************
1024         //     Build Error Section
1025         // *******************************
1026
1027         public void processJavaException(DelegateExecution execution){
1028
1029                 execution.setVariable("prefix",Prefix)
1030                 try{
1031                         msoLogger.debug("Caught a Java Exception")
1032                         msoLogger.debug("Started processJavaException Method")
1033                         msoLogger.debug("Variables List: " + execution.getVariables())
1034                         execution.setVariable("UnexpectedError", "Caught a Java Lang Exception")  // Adding this line temporarily until this flows error handling gets updated
1035                         exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
1036
1037                 }catch(Exception e){
1038                         msoLogger.debug("Caught Exception during processJavaException Method: " + e)
1039                         execution.setVariable("UnexpectedError", "Exception in processJavaException method")  // Adding this line temporarily until this flows error handling gets updated
1040                         exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method")
1041                 }
1042                 msoLogger.debug("Completed processJavaException Method of " + Prefix)
1043         }
1044
1045 }