Merge "Reorder modifiers"
[so.git] / bpmn / MSOInfrastructureBPMN / src / main / groovy / org / openecomp / mso / bpmn / infrastructure / scripts / DoDeleteResourcesV1.groovy
index 6e19a34..1a36a4e 100644 (file)
@@ -43,8 +43,6 @@ import org.openecomp.mso.bpmn.core.json.JsonUtils
 import org.openecomp.mso.bpmn.infrastructure.properties.BPMNProperties
 
 import static org.apache.commons.lang3.StringUtils.isBlank
-import static org.apache.commons.lang3.StringUtils.isBlank
-
 
 /**
  * input for script :
@@ -144,18 +142,16 @@ public class DoDeleteResourcesV1 extends AbstractServiceTaskProcessor {
         utils.log("INFO"," ***** Exit preProcessRequest *****",  isDebugEnabled)
     }
 
-    public void sequenceResource(execution){
+    public void sequenceResource(DelegateExecution execution){
         def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
 
         utils.log("INFO", " ======== STARTED sequenceResource Process ======== ", isDebugEnabled)
         List<Resource> sequencedResourceList = new ArrayList<Resource>()
-        List<String> wanResources = new ArrayList<String>()
+        List<Resource> wanResources = new ArrayList<Resource>()
 
         // get delete resource list and order list
         List<Resource> delResourceList = execution.getVariable("deleteResourceList")
-        // existing resource list
-        List<ServiceInstance> existResourceList = execution.getVariable("realNSRessources")
-
+        
         def resourceSequence = BPMNProperties.getResourceSequenceProp()
 
         if(resourceSequence != null) {
@@ -175,53 +171,49 @@ public class DoDeleteResourcesV1 extends AbstractServiceTaskProcessor {
             //this is defaule sequence
             List<VnfResource> vnfResourceList = new ArrayList<VnfResource>()
             List<AllottedResource> arResourceList = new ArrayList<AllottedResource>()
-
             for (Resource rc : delResourceList) {
                 if (rc instanceof VnfResource) {
                     vnfResourceList.add(rc)
                 } else if (rc instanceof NetworkResource) {
-                    networkResourceList.add(rc)
+                       wanResources.add(rc)
                 } else if (rc instanceof AllottedResource) {
                     arResourceList.add(rc)
                 }
             }
 
             sequencedResourceList.addAll(arResourceList)
-            sequencedResourceList.addAll(networkResourceList)
+            sequencedResourceList.addAll(wanResources)
             sequencedResourceList.addAll(vnfResourceList)
         }
 
         String isContainsWanResource = wanResources.isEmpty() ? "false" : "true"
         execution.setVariable("isContainsWanResource", isContainsWanResource)
         execution.setVariable("currentResourceIndex", 0)
-        execution.setVariable("resourceSequence", resourceSequence)
+        execution.setVariable("sequencedResourceList", sequencedResourceList)
         utils.log("INFO", "resourceSequence: " + resourceSequence, isDebugEnabled)
-        execution.setVariable("wanResources", wanResources)
         utils.log("INFO", " ======== END sequenceResource Process ======== ", isDebugEnabled)
     }
 
     /**
      * prepare delete parameters
      */
-    public void preResourceDelete(execution, resourceName){
+    public void preResourceDelete(DelegateExecution execution){
 
         def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
 
         utils.log("INFO", " ======== STARTED preResourceDelete Process ======== ", isDebugEnabled)
 
-        List<Resource> existResourceList = execution.getVariable("deleteResourceList")
+        List<Resource> sequencedResourceList = execution.getVariable("sequencedResourceList")
 
         int currentIndex = execution.getVariable("currentResourceIndex")
-        Resource curResource = existResourceList.get(currentIndex);
+        Resource curResource = sequencedResourceList.get(currentIndex);
 
         String resourceInstanceUUID = curResource.getResourceId()
         String resourceTemplateUUID = curResource.getModelInfo().getModelUuid()
         execution.setVariable("resourceInstanceId", resourceInstanceUUID)
-        execution.setVariable("resourceUuid", resourceTemplateUUID)
-        execution.setVariable("resourceType", curResource.getModelInfo().getModelName())
         execution.setVariable("currentResource", curResource)
         utils.log("INFO", "Delete Resource Info resourceTemplate Id :" + resourceTemplateUUID + "  resourceInstanceId: "
-                + resourceInstanceUUID + " resourceType: " + resourceName, isDebugEnabled)
+                + resourceInstanceUUID + " resourceModelName: " + curResource.getModelInfo().getModelName(), isDebugEnabled)
 
         utils.log("INFO", " ======== END preResourceDelete Process ======== ", isDebugEnabled)
     }
@@ -230,7 +222,7 @@ public class DoDeleteResourcesV1 extends AbstractServiceTaskProcessor {
     /**
      * Execute delete workflow for resource
      */
-    public void executeResourceDelete(execution, resourceName) {
+    public void executeResourceDelete(DelegateExecution execution) {
         def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
         utils.log("INFO", "======== Start executeResourceDelete Process ======== ", isDebugEnabled)
         String requestId = execution.getVariable("msoRequestId")
@@ -238,46 +230,164 @@ public class DoDeleteResourcesV1 extends AbstractServiceTaskProcessor {
         String serviceType = execution.getVariable("serviceType")
 
         String resourceInstanceId = execution.getVariable("resourceInstanceId")
-        String resourceUuid = execution.getVariable("resourceUuid")
 
-        String requestAction = execution.getVariable("operationType")
-        JSONObject resourceRecipe = cutils.getResourceRecipe(execution, resourceUuid, requestAction)
+        Resource currentResource = execution.getVariable("currentResource")
+        String action = "deleteInstance"
+        JSONObject resourceRecipe = cutils.getResourceRecipe(execution, currentResource.getModelInfo().getModelUuid(), action)
         String recipeUri = resourceRecipe.getString("orchestrationUri")
         int recipeTimeout = resourceRecipe.getInt("recipeTimeout")
         String recipeParamXsd = resourceRecipe.get("paramXSD")
 
-        Resource currentResource = execution.getVariable("currentResource")
 
         ResourceInput resourceInput = new ResourceInput();
         resourceInput.setServiceInstanceId(serviceInstanceId)
         resourceInput.setResourceInstanceName(currentResource.getResourceInstanceName())
-        resourceInput.setGlobalSubscriberId("globalSubscriberId")
-        ModelInfo modelInfo = new ModelInfo()
-        modelInfo.setModelCustomizationUuid(currentResource.getModelInfo().getModelCustomizationUuid())
-        modelInfo.setModelUuid(currentResource.getModelInfo().getModelCustomizationUuid())
-        modelInfo.setModelInvariantUuid(currentResource.getModelInfo().getModelInvariantUuid())
-        resourceInput.setServiceModelInfo(modelInfo)
+        resourceInput.setResourceInstancenUuid(currentResource.getResourceId())
+        resourceInput.setOperationId(execution.getVariable("operationId"))
+        resourceInput.setOperationType(execution.getVariable("operationType"))
+        String globalSubscriberId = execution.getVariable("globalSubscriberId") 
+        resourceInput.setGlobalSubscriberId(globalSubscriberId)
+        resourceInput.setResourceModelInfo(currentResource.getModelInfo());
+           ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
+               resourceInput.setServiceModelInfo(serviceDecomposition.getModelInfo());
         resourceInput.setServiceType(serviceType)
 
         String recipeURL = BPMNProperties.getProperty("bpelURL", "http://mso:8080") + recipeUri
 
-        HttpResponse resp = BpmnRestClient.post(recipeURL, requestId, recipeTimeout, requestAction, serviceInstanceId, serviceType, resourceInput.toString(), recipeParamXsd)
+        HttpResponse resp = BpmnRestClient.post(recipeURL, requestId, recipeTimeout, action, serviceInstanceId, serviceType, resourceInput.toString(), recipeParamXsd)
         utils.log("INFO", " ======== END executeResourceDelete Process ======== ", isDebugEnabled)
     }
 
 
-    public void parseNextResource(execution){
+    public void parseNextResource(DelegateExecution execution){
         def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
         utils.log("INFO", "======== Start parseNextResource Process ======== ", isDebugEnabled)
         def currentIndex = execution.getVariable("currentResourceIndex")
         def nextIndex =  currentIndex + 1
         execution.setVariable("currentResourceIndex", nextIndex)
-        List<String> resourceSequence = execution.getVariable("resourceSequence")
-        if(nextIndex >= resourceSequence.size()){
+        List<String> sequencedResourceList = execution.getVariable("sequencedResourceList")
+        if(nextIndex >= sequencedResourceList.size()){
             execution.setVariable("allResourceFinished", "true")
         }else{
             execution.setVariable("allResourceFinished", "false")
         }
         utils.log("INFO", "======== COMPLETED parseNextResource Process ======== ", isDebugEnabled)
     }
+    
+    public void prepareFinishedProgressForResource(DelegateExecution execution) {
+
+        String serviceInstanceId = execution.getVariable("serviceInstanceId")
+        String serviceType = execution.getVariable("serviceType")
+        String resourceInstanceId = execution.getVariable("resourceInstanceId")
+        Resource currentResource = execution.getVariable("currentResource")
+        String resourceCustomizationUuid = currentResource.getModelInfo().getModelCustomizationUuid()
+        String resourceModelName = currentResource.getModelInfo().getModelName()
+        String operationType = execution.getVariable("operationType")
+        String progress = "100"
+        String status = "finished"
+        String statusDescription = "The resource instance does not exist for " + resourceModelName
+        String operationId = execution.getVariable("operationId")
+
+        String body = """
+                <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
+                        xmlns:ns="http://org.openecomp.mso/requestsdb">
+                        <soapenv:Header/>
+                <soapenv:Body>
+                    <ns:updateResourceOperationStatus>
+                               <operType>${operationType}</operType>
+                               <operationId>${operationId}</operationId>
+                               <progress>${progress}</progress>
+                               <resourceTemplateUUID>${resourceCustomizationUuid}</resourceTemplateUUID>
+                               <serviceId>${serviceInstanceId}</serviceId>
+                               <status>${status}</status>
+                               <statusDescription>${statusDescription}</statusDescription>
+                    </ns:updateResourceOperationStatus>
+                </soapenv:Body>
+                </soapenv:Envelope>""";
+
+        def dbAdapterEndpoint = execution.getVariable("URN_mso_adapters_openecomp_db_endpoint")
+        execution.setVariable("CVFMI_dbAdapterEndpoint", dbAdapterEndpoint)
+        execution.setVariable("CVFMI_updateResOperStatusRequest", body)
+    }
+
+    public void prepareSDNCServiceDeactivateRequest (DelegateExecution execution) {
+       prepareSDNCServiceRequest (execution, "deactivate")
+    }
+    
+    public void prepareSDNCServiceDeleteRequest (DelegateExecution execution) {
+       prepareSDNCServiceRequest (execution, "delete")
+    }
+    
+    public void prepareSDNCServiceRequest (DelegateExecution execution, String svcAction) {
+        def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
+        utils.log("INFO"," ***** Started prepareSDNCServiceRequest for " + svcAction +  "*****",  isDebugEnabled)
+
+        try {
+            // get variables
+            String sdnc_svcAction = svcAction        
+            String sdncCallback = execution.getVariable("URN_mso_workflow_sdncadapter_callback")            
+            String hdrRequestId = execution.getVariable("msoRequestId")
+            String serviceInstanceId = execution.getVariable("serviceInstanceId")
+            String source = execution.getVariable("source")
+            String sdnc_service_id = serviceInstanceId
+            ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
+            String serviceType = execution.getVariable("serviceType")
+            String globalCustomerId = execution.getVariable("globalSubscriberId")
+            String serviceModelInvariantUuid = serviceDecomposition.getModelInfo().getModelInvariantUuid()
+            String serviceModelUuid = serviceDecomposition.getModelInfo().getModelUuid()
+            String serviceModelVersion = serviceDecomposition.getModelInfo().getModelVersion()
+            String serviceModelName = serviceDecomposition.getModelInfo().getModelName()
+
+            // 1. prepare assign topology via SDNC Adapter SUBFLOW call
+            String sndcTopologyDeleteRequest =
+                    """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                                              xmlns:sdncadapter="http://org.openecomp.mso/workflow/sdnc/adapter/schema/v1" 
+                                                              xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1">
+                                 <sdncadapter:RequestHeader>
+                                    <sdncadapter:RequestId>${hdrRequestId}</sdncadapter:RequestId>
+                                    <sdncadapter:SvcInstanceId>${serviceInstanceId}</sdncadapter:SvcInstanceId>
+                                    <sdncadapter:SvcAction>${sdnc_svcAction}</sdncadapter:SvcAction>
+                                    <sdncadapter:SvcOperation>service-topology-operation</sdncadapter:SvcOperation>
+                                    <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
+                                    <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
+                                 </sdncadapter:RequestHeader>
+                                 <sdncadapterworkflow:SDNCRequestData>
+                                     <request-information>
+                                        <request-id>${hdrRequestId}</request-id>
+                                        <request-action>DeleteServiceInstance</request-action>
+                                        <source>${source}</source>
+                                        <notification-url></notification-url>
+                                        <order-number></order-number>
+                                        <order-version></order-version>
+                                     </request-information>
+                                     <service-information>
+                                        <service-id>${serviceInstanceId}</service-id>
+                                        <subscription-service-type>${serviceType}</subscription-service-type>
+                                        <onap-model-information>
+                                             <model-invariant-uuid>${serviceModelInvariantUuid}</model-invariant-uuid>
+                                             <model-uuid>${serviceModelUuid}</model-uuid>
+                                             <model-version>${serviceModelVersion}</model-version>
+                                             <model-name>${serviceModelName}</model-name>
+                                        </onap-model-information>
+                                        <service-instance-id>${serviceInstanceId}</service-instance-id>
+                                        <global-customer-id>${globalCustomerId}</global-customer-id>
+                                     </service-information>
+                                     <service-request-input>
+                                     </service-request-input>
+                                </sdncadapterworkflow:SDNCRequestData>
+                             </aetgt:SDNCAdapterWorkflowRequest>""".trim()
+            
+            String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyDeleteRequest)
+            utils.logAudit(sndcTopologyDeleteRequesAsString)
+            execution.setVariable("sdncAdapterWorkflowRequest", sndcTopologyDeleteRequesAsString)
+            utils.log("INFO","sdncAdapterWorkflowRequest - " + "\n" +  sndcTopologyDeleteRequesAsString, isDebugEnabled)
+
+        } catch (Exception ex) {
+            String exceptionMessage = " Bpmn error encountered in DoDeleteResourcesV1 flow. prepareSDNCServiceRequest() - " + ex.getMessage()
+            utils.log("DEBUG", exceptionMessage, isDebugEnabled)
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
+
+        }
+       utils.log("INFO","***** Exit prepareSDNCServiceRequest for " + svcAction +  "*****",  isDebugEnabled)
+       }
 }