Merge "Fix AAI Service Delete failed issue."
[so.git] / bpmn / MSOInfrastructureBPMN / src / main / groovy / org / openecomp / mso / bpmn / infrastructure / scripts / DoDeleteVnfAndModules.groovy
index 92456b0..3f7ffbf 100644 (file)
-/*-\r
- * ============LICENSE_START=======================================================\r
- * OPENECOMP - MSO\r
- * ================================================================================\r
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.\r
- * ================================================================================\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- * \r
- *      http://www.apache.org/licenses/LICENSE-2.0\r
- * \r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- * ============LICENSE_END=========================================================\r
- */\r
-package org.openecomp.mso.bpmn.infrastructure.scripts\r
-\r
-import java.util.UUID;\r
-\r
-import org.json.JSONObject;\r
-import org.json.JSONArray;\r
-\r
-import org.camunda.bpm.engine.delegate.BpmnError\r
-import org.camunda.bpm.engine.runtime.Execution;\r
-\r
-import static org.apache.commons.lang3.StringUtils.*;\r
-\r
-import org.openecomp.mso.bpmn.core.json.JsonUtils\r
-import org.openecomp.mso.rest.APIResponse\r
-import org.openecomp.mso.rest.RESTClient\r
-import org.openecomp.mso.rest.RESTConfig\r
-import org.openecomp.mso.bpmn.common.scripts.AaiUtil\r
-import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor\r
-import org.openecomp.mso.bpmn.common.scripts.CatalogDbUtils\r
-import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil\r
-import org.openecomp.mso.bpmn.common.scripts.VidUtils\r
-import org.openecomp.mso.bpmn.core.RollbackData\r
-import org.openecomp.mso.bpmn.core.WorkflowException\r
-\r
-/**\r
- * This class supports the macro VID Flow\r
- * with the deletion of a generic vnf and related VF modules.\r
- */\r
-class DoDeleteVnfAndModules extends AbstractServiceTaskProcessor {\r
-\r
-       String Prefix="DDVAM_"\r
-       ExceptionUtil exceptionUtil = new ExceptionUtil()\r
-       JsonUtils jsonUtil = new JsonUtils()\r
-       VidUtils vidUtils = new VidUtils(this)  \r
-\r
-       /**\r
-        * This method gets and validates the incoming\r
-        * request.\r
-        *\r
-        * @param - execution\r
-        *      \r
-        */\r
-       public void preProcessRequest(Execution execution) {\r
-               def isDebugEnabled = execution.getVariable("isDebugLogEnabled")\r
-               execution.setVariable("prefix",Prefix)\r
-               utils.log("DEBUG", " *** STARTED DoDeleteVnfAndModules PreProcessRequest Process*** ", isDebugEnabled)\r
-\r
-               try{\r
-                       // Get Variables                                \r
-                       \r
-                       String cloudConfiguration = execution.getVariable("cloudConfiguration")                 \r
-                       \r
-                       String requestId = execution.getVariable("requestId")\r
-                       execution.setVariable("mso-request-id", requestId)\r
-                       utils.log("DEBUG", "Incoming Request Id is: " + requestId, isDebugEnabled)\r
-\r
-                       String serviceInstanceId = execution.getVariable("serviceInstanceId")                   \r
-                       utils.log("DEBUG", "Incoming Service Instance Id is: " + serviceInstanceId, isDebugEnabled)\r
-\r
-                       String vnfId = execution.getVariable("vnfId")                   \r
-                       utils.log("DEBUG", "Incoming Vnf Id is: " + vnfId, isDebugEnabled)                      \r
-                       \r
-                       String source = "VID"\r
-                       execution.setVariable("source", source)\r
-                       utils.log("DEBUG", "Incoming Source is: " + source, isDebugEnabled)\r
-                       \r
-                       execution.setVariable("DDVAM_moduleCount", 0)\r
-                       execution.setVariable("DDVAM_nextModule", 0)\r
-                       \r
-                       \r
-               }catch(BpmnError b){\r
-                       utils.log("DEBUG", "Rethrowing MSOWorkflowException", isDebugEnabled)\r
-                       throw b\r
-               }catch(Exception e){\r
-                       utils.log("DEBUG", " Error Occured in DoCreateVnfAndModules PreProcessRequest method!" + e.getMessage(), isDebugEnabled)\r
-                       exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured in DoCreateVnf PreProcessRequest")\r
-\r
-               }\r
-               utils.log("DEBUG", "*** COMPLETED DoCreateVnfAndModules PreProcessRequest Process ***", isDebugEnabled)\r
-       }       \r
-\r
-       \r
-       \r
-       public void preProcessAddOnModule(Execution execution){\r
-               def isDebugLogEnabled = execution.getVariable("isDebugLogEnabled")\r
-               execution.setVariable("prefix", Prefix)\r
-               logDebug(" ======== STARTED preProcessAddOnModule ======== ", isDebugLogEnabled)\r
-               \r
-               try {                   \r
-                       JSONArray addOnModules = (JSONArray) execution.getVariable("addOnModules")\r
-                       int addOnIndex = (int) execution.getVariable("addOnModulesDeployed")\r
-                       \r
-                       JSONObject addOnModule = addOnModules[addOnIndex]\r
-                       \r
-                       def newVfModuleId = UUID.randomUUID().toString()\r
-                       execution.setVariable("addOnVfModuleId", newVfModuleId)\r
-                       \r
-                       execution.setVariable("instancesOfThisModelDeployed", 0)\r
-                       \r
-                       JSONObject addOnVfModuleModelInfoObject = jsonUtil.getJsonValueForKey(addOnModule, "modelInfo")\r
-                       String addOnVfModuleModelInfo = addOnVfModuleModelInfoObject.toString()\r
-                       execution.setVariable("addOnVfModuleModelInfo", addOnVfModuleModelInfo)\r
-                       String addOnVfModuleLabel = jsonUtil.getJsonValueForKey(addOnModule, "vfModuleLabel")\r
-                       execution.setVariable("addOnVfModuleLabel", addOnVfModuleLabel)\r
-                       String addOnPersonaModelId = jsonUtil.getJsonValueForKey(addOnVfModuleModelInfoObject, "modelInvariantId")\r
-                       execution.setVariable("addOnPersonaModelId", addOnPersonaModelId)\r
-                       String addOnInitialCount = jsonUtil.getJsonValueForKey(addOnModule, "initialCount")\r
-                       execution.setVariable("initialCount", addOnInitialCount)\r
-                                       \r
-               \r
-               }catch(Exception e){\r
-                       utils.log("ERROR", "Exception Occured Processing preProcessAddOnModule. Exception is:\n" + e, isDebugLogEnabled)\r
-                       exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occurred during preProcessAddOnModule Method:\n" + e.getMessage())\r
-               }\r
-               logDebug("======== COMPLETED preProcessSDNCAssignRequest ======== ", isDebugLogEnabled)\r
-       }\r
-       \r
-       /**\r
-        * Using the received vnfId and vfModuleId, query AAI to get the corresponding VNF info.\r
-        * A 200 response is expected with the VNF info in the response body. Will find out the base module info.\r
-        *\r
-        * @param execution The flow's execution instance.\r
-        */\r
-       public void queryAAIVfModule(Execution execution) {\r
-               def isDebugLogEnabled=execution.getVariable("isDebugLogEnabled")\r
-               def method = getClass().getSimpleName() + '.queryAAIVfModule(' +\r
-                       'execution=' + execution.getId() +\r
-                       ')'\r
-               logDebug('Entered ' + method, isDebugLogEnabled)\r
-\r
-               try {\r
-                       def vnfId = execution.getVariable('DvnfId')\r
-                       \r
-                       AaiUtil aaiUriUtil = new AaiUtil(this)\r
-                       String  aai_uri = aaiUriUtil.getNetworkGenericVnfUri(execution)\r
-                       logDebug('AAI URI is: ' + aai_uri, isDebugLogEnabled)\r
-\r
-                       String endPoint = execution.getVariable("URN_aai_endpoint") + "${aai_uri}/" + UriUtils.encode(vnfId, "UTF-8") + "?depth=1"\r
-                       utils.logAudit("AAI endPoint: " + endPoint)\r
-\r
-                       try {\r
-                               RESTConfig config = new RESTConfig(endPoint);\r
-                               def responseData = ''\r
-                               def aaiRequestId = UUID.randomUUID().toString()\r
-                               RESTClient client = new RESTClient(config).\r
-                                       addHeader('X-TransactionId', aaiRequestId).\r
-                                       addHeader('X-FromAppId', 'MSO').\r
-                                       addHeader('Content-Type', 'application/xml').\r
-                                       addHeader('Accept','application/xml');\r
-                               logDebug('sending GET to AAI endpoint \'' + endPoint + '\'', isDebugLogEnabled)\r
-                               APIResponse response = client.httpGet()\r
-                               utils.logAudit("createVfModule - invoking httpGet() to AAI")\r
-\r
-                               responseData = response.getResponseBodyAsString()\r
-                               if (responseData != null) {\r
-                                       logDebug("Received generic VNF data: " + responseData, isDebugLogEnabled)\r
-\r
-                               }\r
-\r
-                               utils.logAudit("createVfModule - queryAAIVfModule Response: " + responseData)\r
-                               utils.logAudit("createVfModule - queryAAIVfModule ResponseCode: " + response.getStatusCode())\r
-\r
-                               execution.setVariable('DCVFM_queryAAIVfModuleResponseCode', response.getStatusCode())\r
-                               execution.setVariable('DCVFM_queryAAIVfModuleResponse', responseData)\r
-                               logDebug('Response code:' + response.getStatusCode(), isDebugLogEnabled)\r
-                               logDebug('Response:' + System.lineSeparator() + responseData, isDebugLogEnabled)\r
-                               //Map<String, String>[] vfModules = new HashMap<String,String>[]\r
-                               List<Map<String,String>> vfModulesList = new ArrayList<Map<String,String>>();\r
-                               if (response.getStatusCode() == 200) {\r
-                                       // Parse the VNF record from A&AI to find base module info\r
-                                       logDebug('Parsing the VNF data to find base module info', isDebugLogEnabled)\r
-                                       if (responseData != null) {\r
-                                               def vfModulesText = utils.getNodeXml(responseData, "vf-modules")\r
-                                               def xmlVfModules= new XmlSlurper().parseText(vfModulesText)\r
-                                               def vfModules = xmlVfModules.'**'.findAll {it.name() == "vf-module"}\r
-                                               execution.setVariable("DDVAM_moduleCount", vfModules.size())\r
-                                               int vfModulesSize = 0\r
-                                               for (i in 0..vfModules.size()-1) {\r
-                                                       def vfModuleXml = groovy.xml.XmlUtil.serialize(vfModules[i])\r
-                                                       \r
-                                                       Map<String, String> vfModuleEntry = new HashMap<String, String>()\r
-                                                       def vfModuleId = utils.getNodeText1(vfModuleXml, "vf-module-id")\r
-                                                       vfModuleEntry.put("vfModuleId", vfModuleName)\r
-                                                       def vfModuleName = utils.getNodeText1(vfModuleXml, "vf-module-name")\r
-                                                       vfModuleEntry.put("vfModuleName", vfModuleName)         \r
-                                                       vfModulesList.add(vfModuleEntry)                                        \r
-                                               }\r
-                                               \r
-                                       }                                       \r
-                               }\r
-                               execution.setVariable("DDVAM_vfModules", vfModules)\r
-                       } catch (Exception ex) {\r
-                               ex.printStackTrace()\r
-                               logDebug('Exception occurred while executing AAI GET:' + ex.getMessage(),isDebugLogEnabled)\r
-                               exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'AAI GET Failed:' + ex.getMessage())\r
-                       }\r
-                       logDebug('Exited ' + method, isDebugLogEnabled)\r
-               } catch (BpmnError e) {\r
-                       throw e;\r
-               } catch (Exception e) {\r
-                       logError('Caught exception in ' + method, e)\r
-                       exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Error in queryAAIVfModule(): ' + e.getMessage())\r
-               }\r
-       }\r
-       \r
-       public void prepareNextModuleToDelete(Execution execution){\r
-               def isDebugLogEnabled = execution.getVariable("isDebugLogEnabled")\r
-               execution.setVariable("prefix", Prefix)\r
-               logDebug(" ======== STARTED prepareNextModuleToDelete ======== ", isDebugLogEnabled)\r
-               \r
-               try {\r
-                       int i = execution.getVariable("DDVAM_nextModule")\r
-                       def vfModules = execution.getVariable("DDVAM_vfModules")\r
-                       def vfModule = vfModules[i]\r
-                       \r
-                       def vfModuleId = vfModule.get("vfModuleId")\r
-                       execution.setVariable("DDVAM_vfModuleId", vfModuleId)\r
-                       \r
-                       def vfModuleName = vfModule.get("vfModuleName")\r
-                       execution.setVariable("DDVAM_vfModuleName", vfModuleName)\r
-                       \r
-                       \r
-                       // HARDCODED FOR NOW\r
-                       def vfModuleModelInfo = ""\r
-                       execution.setVariable("DDVAM_vfModuleModelInfo", vfModuleModelInfo)                     \r
-                       \r
-               }catch(Exception e){\r
-                       utils.log("ERROR", "Exception Occured Processing preProcessAddOnModule. Exception is:\n" + e, isDebugLogEnabled)\r
-                       exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occurred during preProcessAddOnModule Method:\n" + e.getMessage())\r
-               }\r
-               logDebug("======== COMPLETED preProcessSDNCAssignRequest ======== ", isDebugLogEnabled)\r
-       }\r
-       \r
-       \r
-       \r
-       \r
-}\r
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.openecomp.mso.bpmn.infrastructure.scripts
+
+import java.util.UUID;
+
+import org.json.JSONObject;
+import org.json.JSONArray;
+import org.camunda.bpm.engine.delegate.BpmnError
+import org.camunda.bpm.engine.runtime.Execution;
+
+import static org.apache.commons.lang3.StringUtils.*;
+
+import org.openecomp.mso.bpmn.core.json.JsonUtils
+import org.openecomp.mso.rest.APIResponse
+import org.openecomp.mso.rest.RESTClient
+import org.openecomp.mso.rest.RESTConfig
+import org.openecomp.mso.bpmn.common.scripts.AaiUtil
+import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor
+import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil
+import org.openecomp.mso.bpmn.common.scripts.SDNCAdapterUtils
+import org.openecomp.mso.bpmn.common.scripts.VidUtils
+import org.openecomp.mso.bpmn.core.RollbackData
+import org.openecomp.mso.bpmn.core.WorkflowException
+import org.springframework.web.util.UriUtils;
+
+/**
+ * This class supports the macro VID Flow
+ * with the deletion of a generic vnf and related VF modules.
+ */
+class DoDeleteVnfAndModules extends AbstractServiceTaskProcessor {
+
+       String Prefix="DDVAM_"
+       ExceptionUtil exceptionUtil = new ExceptionUtil()
+       JsonUtils jsonUtil = new JsonUtils()
+       VidUtils vidUtils = new VidUtils(this)
+       SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
+
+       /**
+        * This method gets and validates the incoming
+        * request.
+        *
+        * @param - execution
+        *      
+        */
+       public void preProcessRequest(Execution execution) {
+               def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
+               execution.setVariable("prefix",Prefix)
+               utils.log("DEBUG", " *** STARTED DoDeleteVnfAndModules PreProcessRequest Process*** ", isDebugEnabled)
+
+               try{
+                       // Get Variables                                
+                       
+                       String cloudConfiguration = execution.getVariable("cloudConfiguration")         
+                       utils.log("DEBUG", "Cloud Configuration: " + cloudConfiguration, isDebugEnabled)        
+                       
+                       String requestId = execution.getVariable("msoRequestId")
+                       execution.setVariable("requestId", requestId)                   
+                       execution.setVariable("mso-request-id", requestId)
+                       utils.log("DEBUG", "Incoming Request Id is: " + requestId, isDebugEnabled)
+
+                       String serviceInstanceId = execution.getVariable("serviceInstanceId")                   
+                       utils.log("DEBUG", "Incoming Service Instance Id is: " + serviceInstanceId, isDebugEnabled)
+
+                       String vnfId = execution.getVariable("vnfId")                   
+                       utils.log("DEBUG", "Incoming Vnf Id is: " + vnfId, isDebugEnabled)                      
+                       
+                       String source = "VID"
+                       execution.setVariable("DDVAM_source", source)
+                       utils.log("DEBUG", "Incoming Source is: " + source, isDebugEnabled)
+                       
+                       execution.setVariable("DDVAM_isVidRequest", "true")
+                       
+                       String sdncVersion = execution.getVariable("sdncVersion")
+                       if (sdncVersion == null) {
+                               sdncVersion = "1702"
+                       }
+                       execution.setVariable("DDVAM_sdncVersion", sdncVersion)
+                       utils.log("DEBUG", "Incoming Sdnc Version is: " + sdncVersion, isDebugEnabled)
+                       
+                       String sdncCallbackUrl = (String) execution.getVariable('URN_mso_workflow_sdncadapter_callback')
+                       if (sdncCallbackUrl == null || sdncCallbackUrl.trim().isEmpty()) {
+                               def msg = 'Required variable \'URN_mso_workflow_sdncadapter_callback\' is missing'
+                               logError(msg)
+                               exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg)
+                       }
+                       execution.setVariable("sdncCallbackUrl", sdncCallbackUrl)
+                       utils.logAudit("SDNC Callback URL: " + sdncCallbackUrl)
+                       logDebug("SDNC Callback URL is: " + sdncCallbackUrl, isDebugEnabled)
+                       
+                       if (!sdncVersion.equals("1702")) {
+                               //String vnfModelInfo = execution.getVariable("vnfModelInfo")
+                               //String serviceModelInfo = execution.getVariable("serviceModelInfo")
+                               
+                               String serviceId = execution.getVariable("productFamilyId")
+                               execution.setVariable("DDVAM_serviceId", serviceId)
+                               utils.log("DEBUG", "Incoming Service Id is: " + serviceId, isDebugEnabled)
+                               
+                                       
+                               //String modelInvariantId = jsonUtil.getJsonValue(vnfModelInfo, "modelInvariantId")
+                               //execution.setVariable("DDVAM_modelInvariantId", modelInvariantId)
+                               //utils.log("DEBUG", "Incoming Invariant Id is: " + modelInvariantId, isDebugEnabled)
+                               
+                               //String modelVersionId = jsonUtil.getJsonValue(vnfModelInfo, "modelVersionId")
+                               //if (modelVersionId == null) {
+                               //      modelVersionId = ""
+                               //}
+                               //execution.setVariable("DDVAM_modelVersionId", modelVersionId)
+                               //utils.log("DEBUG", "Incoming Version Id is: " + modelVersionId, isDebugEnabled)
+       
+                               //String modelVersion = jsonUtil.getJsonValue(vnfModelInfo, "modelVersion")
+                               //execution.setVariable("DDVAM_modelVersion", modelVersion)
+                               //utils.log("DEBUG", "Incoming Model Version is: " + modelVersion, isDebugEnabled)
+                               
+                               //String modelName = jsonUtil.getJsonValue(vnfModelInfo, "modelName")
+                               //execution.setVariable("DDVAM_modelName", modelName)
+                               //utils.log("DEBUG", "Incoming Model Name is: " + modelName, isDebugEnabled)
+                               
+                               //String modelCustomizationId = jsonUtil.getJsonValue(vnfModelInfo, "modelCustomizationId")
+                               //if (modelCustomizationId == null) {
+                               //      modelCustomizationId = ""
+                               //}
+                               //execution.setVariable("DDVAM_modelCustomizationId", modelCustomizationId)
+                               //utils.log("DEBUG", "Incoming Model Customization Id is: " + modelCustomizationId, isDebugEnabled)
+                                       
+                               String cloudSiteId = execution.getVariable("lcpCloudRegionId")
+                               execution.setVariable("DDVAM_cloudSiteId", cloudSiteId)
+                               utils.log("DEBUG", "Incoming Cloud Site Id is: " + cloudSiteId, isDebugEnabled)
+                                       
+                               String tenantId = execution.getVariable("tenantId")
+                               execution.setVariable("DDVAM_tenantId", tenantId)
+                               utils.log("DEBUG", "Incoming Tenant Id is: " + tenantId, isDebugEnabled)
+                               
+                               String globalSubscriberId = execution.getVariable("globalSubscriberId")
+                               if (globalSubscriberId == null) {
+                                       globalSubscriberId = ""
+                               }
+                               execution.setVariable("DDVAM_globalSubscriberId", globalSubscriberId)
+                               utils.log("DEBUG", "Incoming Global Subscriber Id is: " + globalSubscriberId, isDebugEnabled)
+                       }
+                       execution.setVariable("DDVAM_moduleCount", 0)
+                       execution.setVariable("DDVAM_nextModule", 0)
+                       
+                       
+               }catch(BpmnError b){
+                       utils.log("DEBUG", "Rethrowing MSOWorkflowException", isDebugEnabled)
+                       throw b
+               }catch(Exception e){
+                       utils.log("DEBUG", " Error Occured in DoCreateVnfAndModules PreProcessRequest method!" + e.getMessage(), isDebugEnabled)
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured in DoCreateVnf PreProcessRequest")
+
+               }
+               utils.log("DEBUG", "*** COMPLETED DoDeleteVnfAndModules PreProcessRequest Process ***", isDebugEnabled)
+       }       
+
+       
+       
+       public void preProcessAddOnModule(Execution execution){
+               def isDebugLogEnabled = execution.getVariable("isDebugLogEnabled")
+               execution.setVariable("prefix", Prefix)
+               logDebug(" ======== STARTED preProcessAddOnModule ======== ", isDebugLogEnabled)
+               
+               try {                   
+                       JSONArray addOnModules = (JSONArray) execution.getVariable("addOnModules")
+                       int addOnIndex = (int) execution.getVariable("addOnModulesDeployed")
+                       
+                       JSONObject addOnModule = addOnModules[addOnIndex]
+                       
+                       def newVfModuleId = UUID.randomUUID().toString()
+                       execution.setVariable("addOnVfModuleId", newVfModuleId)
+                       
+                       execution.setVariable("instancesOfThisModelDeployed", 0)
+                       
+                       JSONObject addOnVfModuleModelInfoObject = jsonUtil.getJsonValueForKey(addOnModule, "modelInfo")
+                       String addOnVfModuleModelInfo = addOnVfModuleModelInfoObject.toString()
+                       execution.setVariable("addOnVfModuleModelInfo", addOnVfModuleModelInfo)
+                       String addOnVfModuleLabel = jsonUtil.getJsonValueForKey(addOnModule, "vfModuleLabel")
+                       execution.setVariable("addOnVfModuleLabel", addOnVfModuleLabel)
+                       String addOnPersonaModelId = jsonUtil.getJsonValueForKey(addOnVfModuleModelInfoObject, "modelInvariantUuid")
+                       execution.setVariable("addOnPersonaModelId", addOnPersonaModelId)
+                       String addOnInitialCount = jsonUtil.getJsonValueForKey(addOnModule, "initialCount")
+                       execution.setVariable("initialCount", addOnInitialCount)
+                                       
+               
+               }catch(Exception e){
+                       utils.log("ERROR", "Exception Occured Processing preProcessAddOnModule. Exception is:\n" + e, isDebugLogEnabled)
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occurred during preProcessAddOnModule Method:\n" + e.getMessage())
+               }
+               logDebug("======== COMPLETED preProcessSDNCAssignRequest ======== ", isDebugLogEnabled)
+       }
+       
+       /**
+        * Using the received vnfId and vfModuleId, query AAI to get the corresponding VNF info.
+        * A 200 response is expected with the VNF info in the response body. Will find out the base module info.
+        *
+        * @param execution The flow's execution instance.
+        */
+       public void queryAAIVfModule(Execution execution) {
+               def isDebugLogEnabled=execution.getVariable("isDebugLogEnabled")
+               def method = getClass().getSimpleName() + '.queryAAIVfModule(' +
+                       'execution=' + execution.getId() +
+                       ')'
+               logDebug('Entered ' + method, isDebugLogEnabled)
+
+               try {
+                       def vnfId = execution.getVariable('vnfId')
+                       
+                       AaiUtil aaiUriUtil = new AaiUtil(this)
+                       String  aai_uri = aaiUriUtil.getNetworkGenericVnfUri(execution)
+                       logDebug('AAI URI is: ' + aai_uri, isDebugLogEnabled)
+
+                       String endPoint = execution.getVariable("URN_aai_endpoint") + "${aai_uri}/" + UriUtils.encode(vnfId, "UTF-8") + "?depth=1"
+                       utils.logAudit("AAI endPoint: " + endPoint)
+
+                       try {
+                               utils.logAudit("createVfModule - invoking httpGet() to AAI")
+                               APIResponse response = aaiUriUtil.executeAAIGetCall(execution, endPoint)
+
+                               def responseData = response.getResponseBodyAsString()
+                               if (responseData != null) {
+                                       logDebug("Received generic VNF data: " + responseData, isDebugLogEnabled)
+
+                               }
+
+                               utils.logAudit("createVfModule - queryAAIVfModule Response: " + responseData)
+                               utils.logAudit("createVfModule - queryAAIVfModule ResponseCode: " + response.getStatusCode())
+
+                               execution.setVariable('DCVFM_queryAAIVfModuleResponseCode', response.getStatusCode())
+                               execution.setVariable('DCVFM_queryAAIVfModuleResponse', responseData)
+                               logDebug('Response code:' + response.getStatusCode(), isDebugLogEnabled)
+                               logDebug('Response:' + System.lineSeparator() + responseData, isDebugLogEnabled)
+                               //Map<String, String>[] vfModules = new HashMap<String,String>[]
+                               def vfModulesList = new ArrayList<Map<String,String>>()
+                               def vfModules = null
+                               def vfModuleBaseEntry = null
+                               if (response.getStatusCode() == 200) {
+                                       // Parse the VNF record from A&AI to find base module info
+                                       logDebug('Parsing the VNF data to find base module info', isDebugLogEnabled)
+                                       if (responseData != null) {
+                                               def vfModulesText = utils.getNodeXml(responseData, "vf-modules")
+                                               logDebug("vModulesText: " + vfModulesText, isDebugLogEnabled)
+                                               if (vfModulesText != null && !vfModulesText.trim().isEmpty()) {
+                                                       def xmlVfModules= new XmlSlurper().parseText(vfModulesText)
+                                                       vfModules = xmlVfModules.'**'.findAll {it.name() == "vf-module"}
+                                                       execution.setVariable("DDVAM_moduleCount", vfModules.size())
+                                                       int vfModulesSize = 0
+                                                       for (i in 0..vfModules.size()-1) {
+                                                               def vfModuleXml = groovy.xml.XmlUtil.serialize(vfModules[i])
+                                                       
+                                                               Map<String, String> vfModuleEntry = new HashMap<String, String>()
+                                                               def vfModuleId = utils.getNodeText1(vfModuleXml, "vf-module-id")
+                                                               vfModuleEntry.put("vfModuleId", vfModuleId)
+                                                               def vfModuleName = utils.getNodeText1(vfModuleXml, "vf-module-name")
+                                                               vfModuleEntry.put("vfModuleName", vfModuleName)
+                                                               
+                                                               def isBaseVfModule = utils.getNodeText(vfModuleXml, "is-base-vf-module")
+                                                               // Save base vf module for last
+                                                               if (isBaseVfModule == "true") {
+                                                                       vfModuleBaseEntry = vfModuleEntry
+                                                               }
+                                                               else {                                          
+                                                                       vfModulesList.add(vfModuleEntry)
+                                                               }
+                                                       }
+                                                       if (vfModuleBaseEntry != null) {
+                                                               vfModulesList.add(vfModuleBaseEntry)
+                                                       }                                       
+                                               }
+                                               
+                                       }                                       
+                               }
+                               execution.setVariable("DDVAM_vfModules", vfModulesList)
+                       } catch (Exception ex) {
+                               ex.printStackTrace()
+                               logDebug('Exception occurred while executing AAI GET:' + ex.getMessage(),isDebugLogEnabled)
+                               exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'AAI GET Failed:' + ex.getMessage())
+                       }
+                       logDebug('Exited ' + method, isDebugLogEnabled)
+               } catch (BpmnError e) {
+                       throw e;
+               } catch (Exception e) {
+                       logError('Caught exception in ' + method, e)
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Error in queryAAIVfModule(): ' + e.getMessage())
+               }
+       }
+       
+       public void prepareNextModuleToDelete(Execution execution){
+               def isDebugLogEnabled = execution.getVariable("isDebugLogEnabled")
+               execution.setVariable("prefix", Prefix)
+               logDebug(" ======== STARTED prepareNextModuleToDelete ======== ", isDebugLogEnabled)
+               
+               try {
+                       int i = execution.getVariable("DDVAM_nextModule")
+                       def vfModules = execution.getVariable("DDVAM_vfModules")
+                       def vfModule = vfModules[i]
+                       
+                       def vfModuleId = vfModule.get("vfModuleId")
+                       execution.setVariable("DDVAM_vfModuleId", vfModuleId)
+                       
+                       def vfModuleName = vfModule.get("vfModuleName")
+                       execution.setVariable("DDVAM_vfModuleName", vfModuleName)
+                       
+                       
+                       // HARDCODED FOR NOW
+                       def vfModuleModelInfo = ""
+                       execution.setVariable("DDVAM_vfModuleModelInfo", vfModuleModelInfo)                     
+                       
+               }catch(Exception e){
+                       utils.log("ERROR", "Exception Occured Processing preProcessAddOnModule. Exception is:\n" + e, isDebugLogEnabled)
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occurred during prepareNextModuleToDelete Method:\n" + e.getMessage())
+               }
+               logDebug("======== COMPLETED prepareNextModuleToDelete ======== ", isDebugLogEnabled)
+       }
+       
+       public void preProcessSDNCDeactivateRequest(Execution execution){
+               def isDebugLogEnabled = execution.getVariable("isDebugLogEnabled")
+               execution.setVariable("prefix", Prefix)
+               logDebug(" ======== STARTED preProcessSDNCDeactivateRequest ======== ", isDebugLogEnabled)
+               def vnfId = execution.getVariable("vnfId")
+               def serviceInstanceId = execution.getVariable("serviceInstanceId")              
+
+               try{
+                       //Build SDNC Request
+                       
+                       String deactivateSDNCRequest = buildSDNCRequest(execution, serviceInstanceId, "deactivate")
+
+                       deactivateSDNCRequest = utils.formatXml(deactivateSDNCRequest)
+                       execution.setVariable("DDVAM_deactivateSDNCRequest", deactivateSDNCRequest)
+                       logDebug("Outgoing DeactivateSDNCRequest is: \n" + deactivateSDNCRequest, isDebugLogEnabled)
+                       utils.logAudit("Outgoing DeactivateSDNCRequest is: \n" + deactivateSDNCRequest)
+
+               }catch(Exception e){
+                       utils.log("ERROR", "Exception Occured Processing preProcessSDNCDeactivateRequest. Exception is:\n" + e, isDebugLogEnabled)
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occurred during preProcessSDNCDeactivateRequest Method:\n" + e.getMessage())
+               }
+               logDebug("======== COMPLETED preProcessSDNCDeactivateRequest ======== ", isDebugLogEnabled)
+       }
+       
+       public void preProcessSDNCUnassignRequest(Execution execution) {
+               def method = getClass().getSimpleName() + '.preProcessSDNCUnassignRequest(' +
+                       'execution=' + execution.getId() +
+                       ')'
+               def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+               logDebug('Entered ' + method, isDebugLogEnabled)
+               execution.setVariable("prefix", Prefix)
+               logDebug(" ======== STARTED preProcessSDNCUnassignRequest Process ======== ", isDebugLogEnabled)
+               try{
+                       String vnfId = execution.getVariable("vnfId")
+                       String serviceInstanceId = execution.getVariable("serviceInstanceId")
+
+                       String unassignSDNCRequest = buildSDNCRequest(execution, serviceInstanceId, "unassign")
+
+                       execution.setVariable("DDVAM_unassignSDNCRequest", unassignSDNCRequest)
+                       logDebug("Outgoing UnassignSDNCRequest is: \n" + unassignSDNCRequest, isDebugLogEnabled)
+                       utils.logAudit("Outgoing UnassignSDNCRequest is: \n"  + unassignSDNCRequest)
+
+               }catch(Exception e){
+                       log.debug("Exception Occured Processing preProcessSDNCUnassignRequest. Exception is:\n" + e, isDebugLogEnabled)
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occured during  preProcessSDNCUnassignRequest Method:\n" + e.getMessage())
+               }
+               logDebug("======== COMPLETED  preProcessSDNCUnassignRequest Process ======== ", isDebugLogEnabled)
+       }
+       
+       public String buildSDNCRequest(Execution execution, String svcInstId, String action){
+               
+                               String uuid = execution.getVariable('testReqId') // for junits
+                               if(uuid==null){
+                                       uuid = execution.getVariable("msoRequestId") + "-" +    System.currentTimeMillis()
+                               }
+                               def callbackURL = execution.getVariable("sdncCallbackUrl")
+                               def requestId = execution.getVariable("msoRequestId")
+                               def serviceId = execution.getVariable("DDVAM_serviceId")                                
+                               def tenantId = execution.getVariable("DDVAM_tenantId")
+                               def source = execution.getVariable("DDVAM_source")
+                               def vnfId = execution.getVariable("vnfId")
+                               def serviceInstanceId = execution.getVariable("serviceInstanceId")
+                               def cloudSiteId = execution.getVariable("DDVAM_cloudSiteId")                            
+                               def modelCustomizationId = execution.getVariable("DDVAM_modelCustomizationId")                          
+                               //def serviceModelInfo = execution.getVariable("serviceModelInfo")
+                               //def vnfModelInfo = execution.getVariable("vnfModelInfo")
+                               //String serviceEcompModelInformation = sdncAdapterUtils.modelInfoToEcompModelInformation(serviceModelInfo)
+                               //String vnfEcompModelInformation = sdncAdapterUtils.modelInfoToEcompModelInformation(vnfModelInfo)                             
+                               def globalSubscriberId = execution.getVariable("DDVAM_globalSubscriberId")
+                               def sdncVersion = execution.getVariable("DDVAM_sdncVersion")                                            
+                               
+                               String sdncRequest =
+                               """<sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:ns5="http://org.openecomp/mso/request/types/v1"
+                                                                                                       xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1"
+                                                                                                       xmlns:sdncadapter="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
+          <sdncadapter:RequestHeader>
+                               <sdncadapter:RequestId>${uuid}</sdncadapter:RequestId>
+                               <sdncadapter:SvcInstanceId>${svcInstId}</sdncadapter:SvcInstanceId>
+                               <sdncadapter:SvcAction>${action}</sdncadapter:SvcAction>
+                               <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation>
+                               <sdncadapter:CallbackUrl>${callbackURL}</sdncadapter:CallbackUrl>
+                               <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
+               </sdncadapter:RequestHeader>
+       <sdncadapterworkflow:SDNCRequestData>
+               <request-information>
+                       <request-id>${requestId}</request-id>
+                       <request-action>DeleteVnfInstance</request-action>
+                       <source>${source}</source>
+                       <notification-url/>
+                       <order-number/>
+                       <order-version/>
+               </request-information>
+               <service-information>
+                       <service-id/>
+                       <subscription-service-type/>                    
+                       <service-instance-id>${serviceInstanceId}</service-instance-id>
+                       <global-customer-id/>
+               </service-information>
+               <vnf-information>
+                       <vnf-id>${vnfId}</vnf-id>
+                       <vnf-type/>                     
+               </vnf-information>
+               <vnf-request-input>                     
+                       <vnf-name/>
+                       <tenant>${tenantId}</tenant>
+                       <aic-cloud-region>${cloudSiteId}</aic-cloud-region>                     
+               </vnf-request-input>
+       </sdncadapterworkflow:SDNCRequestData>
+       </sdncadapterworkflow:SDNCAdapterWorkflowRequest>"""
+               
+                       utils.logAudit("sdncRequest:  " + sdncRequest)
+                       return sdncRequest
+       }
+               
+       public void validateSDNCResponse(Execution execution, String response, String method){
+               def isDebugLogEnabled=execution.getVariable("isDebugLogEnabled")
+               execution.setVariable("prefix",Prefix)
+               logDebug(" *** STARTED ValidateSDNCResponse Process*** ", isDebugLogEnabled)
+
+               WorkflowException workflowException = execution.getVariable("WorkflowException")
+               boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
+
+               utils.logAudit("workflowException: " + workflowException)
+
+               SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
+               sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
+
+               utils.logAudit("SDNCResponse: " + response)
+
+               String sdncResponse = response
+               if(execution.getVariable(Prefix + 'sdncResponseSuccess') == true){
+                       logDebug("Received a Good Response from SDNC Adapter for " + method + " SDNC Call.  Response is: \n" + sdncResponse, isDebugLogEnabled)                 
+               }else{
+                       logDebug("Received a BAD Response from SDNC Adapter for " + method + " SDNC Call.", isDebugLogEnabled)
+                       throw new BpmnError("MSOWorkflowException")
+               }
+               logDebug(" *** COMPLETED ValidateSDNCResponse Process*** ", isDebugLogEnabled)
+       }
+       
+       
+       
+       
+       
+       
+       
+}