Merge "Reorder modifiers"
[so.git] / bpmn / MSOInfrastructureBPMN / src / main / groovy / org / openecomp / mso / bpmn / infrastructure / scripts / DoCreateE2EServiceInstance.groovy
index cfdc0e9..eaec39b 100644 (file)
 package org.openecomp.mso.bpmn.infrastructure.scripts;
 
 import static org.apache.commons.lang3.StringUtils.*;
+import org.apache.http.HttpResponse
 import groovy.xml.XmlUtil
 import groovy.json.*
 
 import org.openecomp.mso.bpmn.core.domain.ServiceDecomposition
 import org.openecomp.mso.bpmn.core.domain.ServiceInstance
 import org.openecomp.mso.bpmn.core.domain.ModelInfo
+import org.openecomp.mso.bpmn.core.domain.Resource
+import org.openecomp.mso.bpmn.core.domain.AllottedResource
+import org.openecomp.mso.bpmn.core.domain.NetworkResource
+import org.openecomp.mso.bpmn.core.domain.VnfResource
+import org.openecomp.mso.bpmn.common.recipe.ResourceInput
+import org.openecomp.mso.bpmn.common.resource.ResourceRequestBuilder;
+import org.openecomp.mso.bpmn.common.recipe.BpmnRestClient
 import org.openecomp.mso.bpmn.core.json.JsonUtils
 import org.openecomp.mso.bpmn.common.scripts.AaiUtil
 import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor
@@ -38,12 +46,13 @@ import org.openecomp.mso.bpmn.core.WorkflowException
 import org.openecomp.mso.rest.APIResponse;
 import org.openecomp.mso.rest.RESTClient
 import org.openecomp.mso.rest.RESTConfig
+import org.openecomp.mso.bpmn.infrastructure.workflow.service.ServicePluginFactory
 
 import java.util.List;
 import java.util.UUID;
 
 import org.camunda.bpm.engine.delegate.BpmnError
-import org.camunda.bpm.engine.runtime.Execution
+import org.camunda.bpm.engine.delegate.DelegateExecution
 import org.json.JSONObject;
 import org.json.JSONArray;
 import org.apache.commons.lang3.*
@@ -82,7 +91,7 @@ public class DoCreateE2EServiceInstance extends AbstractServiceTaskProcessor {
        JsonUtils jsonUtil = new JsonUtils()
        CatalogDbUtils cutils = new CatalogDbUtils()
 
-       public void preProcessRequest (Execution execution) {
+       public void preProcessRequest (DelegateExecution execution) {
                def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
                String msg = ""
                utils.log("INFO"," ***** preProcessRequest *****",  isDebugEnabled)
@@ -129,8 +138,8 @@ public class DoCreateE2EServiceInstance extends AbstractServiceTaskProcessor {
                        String serviceInstanceName = execution.getVariable("serviceInstanceName")
                        String serviceInstanceId = execution.getVariable("serviceInstanceId")
                        String uuiRequest = execution.getVariable("uuiRequest")
-                       String modelInvariantUuid = jsonUtil.getJsonValue(uuiRequest, "service.serviceDefId")
-                       String modelUuid = jsonUtil.getJsonValue(uuiRequest, "service.templateId")
+                       String modelInvariantUuid = jsonUtil.getJsonValue(uuiRequest, "service.serviceInvariantUuid")
+                       String modelUuid = jsonUtil.getJsonValue(uuiRequest, "service.serviceUuid")
                        String serviceModelName = jsonUtil.getJsonValue(uuiRequest, "service.parameters.templateName")
                        execution.setVariable("serviceModelName", serviceModelName)
                        //aai serviceType and Role can be setted as fixed value now.
@@ -177,11 +186,11 @@ public class DoCreateE2EServiceInstance extends AbstractServiceTaskProcessor {
                utils.log("INFO"," ***** Exit preProcessRequest *****",  isDebugEnabled)
        }
        
-   public void prepareDecomposeService(Execution execution) {
+   public void prepareDecomposeService(DelegateExecution execution) {
         def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
 
         try {
-            utils.log("DEBUG", " ***** Inside prepareDecomposeService of create generic e2e service ***** ", isDebugEnabled)
+            utils.log("INFO", " ***** Inside prepareDecomposeService of create generic e2e service ***** ", isDebugEnabled)
             String modelInvariantUuid = execution.getVariable("modelInvariantUuid")
             String modelUuid = execution.getVariable("modelUuid")
             //here modelVersion is not set, we use modelUuid to decompose the service.
@@ -200,24 +209,36 @@ public class DoCreateE2EServiceInstance extends AbstractServiceTaskProcessor {
         }
      }
 
-    public void processDecomposition (Execution execution) {
+    public void processDecomposition(DelegateExecution execution) {
         def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
     
-        utils.log("DEBUG", " ***** Inside processDecomposition() of  create generic e2e service flow ***** ", isDebugEnabled)    
+        utils.log("INFO", " ***** Inside processDecomposition() of  create generic e2e service flow ***** ", isDebugEnabled)
         try {
             ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
         } catch (Exception ex) {
             String exceptionMessage = "Bpmn error encountered in  create generic e2e service flow. processDecomposition() - " + ex.getMessage()
-            utils.log("DEBUG", exceptionMessage, isDebugEnabled)
+            utils.log("INFO", exceptionMessage, isDebugEnabled)
             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
         }
     }
     
-    public void doServiceHoming(Execution execution) {
-        //Now Homing is not clear. So to be implemented.
+    public void doServicePreOperation(DelegateExecution execution){
+       //we need a service plugin platform here. 
+       ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
+       String uuiRequest = execution.getVariable("uuiRequest")         
+       String newUuiRequest = ServicePluginFactory.getInstance().preProcessService(serviceDecomposition, uuiRequest);
+       execution.setVariable("uuiRequest", newUuiRequest)      
     }
     
-       public void postProcessAAIGET(Execution execution) {
+    public void doServiceHoming(DelegateExecution execution) {
+       //we need a service plugin platform here. 
+       ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
+       String uuiRequest = execution.getVariable("uuiRequest")         
+       String newUuiRequest = ServicePluginFactory.getInstance().doServiceHoming(serviceDecomposition, uuiRequest);
+       execution.setVariable("uuiRequest", newUuiRequest)      
+    }
+    
+       public void postProcessAAIGET(DelegateExecution execution) {
                def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
                utils.log("INFO"," ***** postProcessAAIGET ***** ", isDebugEnabled)
                String msg = ""
@@ -225,7 +246,7 @@ public class DoCreateE2EServiceInstance extends AbstractServiceTaskProcessor {
                try {
                        String serviceInstanceName = execution.getVariable("serviceInstanceName")
                        boolean succInAAI = execution.getVariable("GENGS_SuccessIndicator")
-                       if(succInAAI != true){
+                       if(!succInAAI){
                                utils.log("INFO","Error getting Service-instance from AAI", + serviceInstanceName, isDebugEnabled)
                                WorkflowException workflowException = execution.getVariable("WorkflowException")
                                utils.logAudit("workflowException: " + workflowException)
@@ -242,7 +263,7 @@ public class DoCreateE2EServiceInstance extends AbstractServiceTaskProcessor {
                        else
                        {
                                boolean foundInAAI = execution.getVariable("GENGS_FoundIndicator")
-                               if(foundInAAI == true){
+                               if(foundInAAI){
                                        utils.log("INFO","Found Service-instance in AAI", isDebugEnabled)
                                        msg = "ServiceInstance already exists in AAI:" + serviceInstanceName
                                        utils.log("INFO", msg, isDebugEnabled)
@@ -259,14 +280,14 @@ public class DoCreateE2EServiceInstance extends AbstractServiceTaskProcessor {
                utils.log("INFO"," *** Exit postProcessAAIGET *** ", isDebugEnabled)
        }
 
-       public void postProcessAAIPUT(Execution execution) {
+       public void postProcessAAIPUT(DelegateExecution execution) {
                def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
                utils.log("INFO"," ***** postProcessAAIPUT ***** ", isDebugEnabled)
                String msg = ""
                try {
                        String serviceInstanceId = execution.getVariable("serviceInstanceId")
                        boolean succInAAI = execution.getVariable("GENPS_SuccessIndicator")
-                       if(succInAAI != true){
+                       if(!succInAAI){
                                utils.log("INFO","Error putting Service-instance in AAI", + serviceInstanceId, isDebugEnabled)
                                WorkflowException workflowException = execution.getVariable("WorkflowException")
                                utils.logAudit("workflowException: " + workflowException)
@@ -297,7 +318,7 @@ public class DoCreateE2EServiceInstance extends AbstractServiceTaskProcessor {
                utils.log("INFO"," *** Exit postProcessAAIPUT *** ", isDebugEnabled)
        }
        
-       public void postProcessAAIGET2(Execution execution) {
+       public void postProcessAAIGET2(DelegateExecution execution) {
                def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
                utils.log("INFO"," ***** postProcessAAIGET2 ***** ", isDebugEnabled)
                String msg = ""
@@ -305,7 +326,7 @@ public class DoCreateE2EServiceInstance extends AbstractServiceTaskProcessor {
                try {
                        String serviceInstanceName = execution.getVariable("serviceInstanceName")
                        boolean succInAAI = execution.getVariable("GENGS_SuccessIndicator")
-                       if(succInAAI != true){
+                       if(!succInAAI){
                                utils.log("INFO","Error getting Service-instance from AAI in postProcessAAIGET2", + serviceInstanceName, isDebugEnabled)
                                WorkflowException workflowException = execution.getVariable("WorkflowException")
                                utils.logAudit("workflowException: " + workflowException)
@@ -322,7 +343,7 @@ public class DoCreateE2EServiceInstance extends AbstractServiceTaskProcessor {
                        else
                        {
                                boolean foundInAAI = execution.getVariable("GENGS_FoundIndicator")
-                               if(foundInAAI == true){
+                               if(foundInAAI){
                                        String aaiService = execution.getVariable("GENGS_service")
                                        if (!isBlank(aaiService) && (utils.nodeExists(aaiService, "service-instance-name"))) {
                                                execution.setVariable("serviceInstanceName",  utils.getNodeText1(aaiService, "service-instance-name"))
@@ -340,7 +361,7 @@ public class DoCreateE2EServiceInstance extends AbstractServiceTaskProcessor {
                utils.log("INFO"," *** Exit postProcessAAIGET2 *** ", isDebugEnabled)
        }
 
-       public void preProcessRollback (Execution execution) {
+       public void preProcessRollback (DelegateExecution execution) {
                def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
                utils.log("INFO"," ***** preProcessRollback ***** ", isDebugEnabled)
                try {
@@ -361,7 +382,7 @@ public class DoCreateE2EServiceInstance extends AbstractServiceTaskProcessor {
                utils.log("INFO"," *** Exit preProcessRollback *** ", isDebugEnabled)
        }
 
-       public void postProcessRollback (Execution execution) {
+       public void postProcessRollback (DelegateExecution execution) {
                def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
                utils.log("INFO"," ***** postProcessRollback ***** ", isDebugEnabled)
                String msg = ""
@@ -382,7 +403,7 @@ public class DoCreateE2EServiceInstance extends AbstractServiceTaskProcessor {
                utils.log("INFO"," *** Exit postProcessRollback *** ", isDebugEnabled)
        }
 
-       public void preInitResourcesOperStatus(Execution execution){
+       public void preInitResourcesOperStatus(DelegateExecution execution){
         def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
 
         utils.log("INFO", " ======== STARTED preInitResourcesOperStatus Process ======== ", isDebugEnabled)
@@ -400,11 +421,11 @@ public class DoCreateE2EServiceInstance extends AbstractServiceTaskProcessor {
             execution.setVariable("serviceInstanceId", serviceId)
             execution.setVariable("operationId", operationId)
             execution.setVariable("operationType", operationType)
-            String incomingRequest = execution.getVariable("uuiRequest")
-            String resourcesStr = jsonUtil.getJsonValue(incomingRequest, "service.parameters.resources")  
-            List<String> resourceList = jsonUtil.StringArrayToList(execution, resourcesStr)   
-            for(String resource : resourceList){
-                    resourceTemplateUUIDs  = resourceTemplateUUIDs + jsonUtil.getJsonValue(resource, "resourceId") + ":"
+            ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
+            List<Resource>  resourceList = serviceDecomposition.getServiceResources()
+            
+            for(Resource resource : resourceList){
+                    resourceTemplateUUIDs  = resourceTemplateUUIDs + resource.getModelInfo().getModelCustomizationUuid() + ":"
             }           
 
             def dbAdapterEndpoint = "http://mso.mso.testlab.openecomp.org:8080/dbadapters/RequestsDbAdapter"
@@ -417,13 +438,13 @@ public class DoCreateE2EServiceInstance extends AbstractServiceTaskProcessor {
                         <soapenv:Header/>
                         <soapenv:Body>
                             <ns:initResourceOperationStatus xmlns:ns="http://org.openecomp.mso/requestsdb">
-                            <serviceId>${serviceId}</serviceId>
-                            <operationId>${operationId}</operationId>
-                            <operationType>${operationType}</operationType>
-                            <resourceTemplateUUIDs>${resourceTemplateUUIDs}</resourceTemplateUUIDs>
-                        </ns:initResourceOperationStatus>
-                    </soapenv:Body>
-                </soapenv:Envelope>"""
+                                                               <serviceId>${serviceId}</serviceId>
+                                                               <operationId>${operationId}</operationId>
+                                                               <operationType>${operationType}</operationType>
+                                                               <resourceTemplateUUIDs>${resourceTemplateUUIDs}</resourceTemplateUUIDs>
+                            </ns:initResourceOperationStatus>
+                       </soapenv:Body>
+                       </soapenv:Envelope>"""
 
             payload = utils.formatXml(payload)
             execution.setVariable("CVFMI_initResOperStatusRequest", payload)
@@ -436,137 +457,23 @@ public class DoCreateE2EServiceInstance extends AbstractServiceTaskProcessor {
         }
         utils.log("INFO", "======== COMPLETED preInitResourcesOperStatus Process ======== ", isDebugEnabled)  
        }
-       
-       /**
-        * prepare resource create request
-        */
-       public void preResourceRequest(execution){
-           String resourceType = execution.getVariable("resourceType")
-           def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
-           String serviceInstanceName = execution.getVariable("serviceInstanceName")
-           String nsServiceName = resourceType + "_" + serviceInstanceName
-           execution.setVariable("nsServiceName", nsServiceName)
-           utils.log("INFO", "Prepare Resource Request nsServiceName:" + nsServiceName, isDebugEnabled)
-        String globalSubscriberId = execution.getVariable("globalSubscriberId")
-        String serviceType = execution.getVariable("serviceType")
-        String serviceId = execution.getVariable("serviceInstanceId")
-        execution.setVariable("serviceId", serviceId)
-        String operationId = execution.getVariable("operationId")
-        String incomingRequest = execution.getVariable("uuiRequest")
-        String resourcesStr = jsonUtil.getJsonValue(incomingRequest, "service.parameters.resources")  
-        String nsServiceDescription = jsonUtil.getJsonValue(incomingRequest, "service.description")  
-        execution.setVariable("nsServiceDescription", nsServiceDescription)
-        utils.log("INFO", "Prepare Resource Request nsServiceDescription:" + nsServiceDescription, isDebugEnabled)
-        List<String> resourceList = jsonUtil.StringArrayToList(execution, resourcesStr) 
-        //reset the variables
-        execution.setVariable("resourceUUID", "")
-        execution.setVariable("resourceInvariantUUID", "")
-        execution.setVariable("resourceParameters", "")
-        for(String resource : resourceList){
-            String resourceName = jsonUtil.getJsonValue(resource, "resourceName")  
-            if(StringUtils.containsIgnoreCase(resourceName, resourceType)){
-                String resourceUUID  = jsonUtil.getJsonValue(resource, "resourceId")
-                String resourceInvariantUUID  = jsonUtil.getJsonValue(resource, "resourceDefId")
-                String resourceParameters = jsonUtil.getJsonValue(resource, "nsParameters")                
-                execution.setVariable("resourceUUID", resourceUUID)
-                execution.setVariable("resourceInvariantUUID", resourceInvariantUUID)
-                execution.setVariable("resourceParameters", resourceParameters)
-                utils.log("INFO", "Prepare Resource Request resourceType:" + resourceType, isDebugEnabled)
-                utils.log("INFO", "Prepare Resource Request resourceUUID:" + resourceUUID, isDebugEnabled)
-                utils.log("INFO", "Prepare Resource Request resourceParameters:" + resourceParameters, isDebugEnabled)
-            } 
-        }
-           utils.log("INFO", "Prepare Controller Request finished", isDebugEnabled)
-       }
-       /**
-        * sequence resource. we should analyze resource sequence from service template
-        * Here we make VF first, and then network for E2E service.
-        */
-       public void sequenceResoure(execution){
-           def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
-        utils.log("INFO", "======== Start sequenceResoure Process ======== ", isDebugEnabled)  
-           String serviceModelUUID = execution.getVariable("modelUuid")
-        JSONArray networks = cutils.getAllNetworksByServiceModelUuid(execution, serviceModelUUID)
-        utils.log("DEBUG", "obtained Network list: " + networks, isDebugEnabled)            
-        if (networks == null) {
-            utils.log("INFO", "No matching networks in Catalog DB for serviceModelUUID=" + serviceModelUUID, isDebugEnabled)
-        }
-        String incomingRequest = execution.getVariable("uuiRequest")
-        String resourcesStr = jsonUtil.getJsonValue(incomingRequest, "service.parameters.resources")  
-        List<String> resourceList = jsonUtil.StringArrayToList(execution, resourcesStr) 
-        // Only one match herenetwork
-        List<String> nsResources = new ArrayList<String>()
-        List<String> wanResources = new ArrayList<String>()
-        List<String> resourceSequence = new  ArrayList<String>()
-        for(String resource : resourceList){
-            String resourceName = jsonUtil.getJsonValue(resource, "resourceName")  
-            String resourceUUID = jsonUtil.getJsonValue(resource, "resourceId")
-            //check is network.
-            boolean isNetwork = false;
-            if(networks != null){
-                for(int i = 0; i < networks.size(); i++){
-                    String networkUUID = jsonUtil.getJsonValueForKey(networks.get(i), "modelVersionId")
-                    if(StringUtils.equals(resourceUUID, networkUUID)){
-                        isNetwork = true
-                        break
-                    }
-                }
-            }
-            if(isNetwork){
-                wanResources.add(resourceName)
-            }else{
-                nsResources.add(resourceName)
-            }
-        }
-        resourceSequence.addAll(nsResources)
-        resourceSequence.addAll(wanResources)
-        String isContainsWanResource = wanResources.isEmpty() ? "false" : "true"
-        execution.setVariable("isContainsWanResource", isContainsWanResource)
-        execution.setVariable("currentResourceIndex", 0)
-        execution.setVariable("resourceSequence", resourceSequence)
-        utils.log("INFO", "resourceSequence: " + resourceSequence, isDebugEnabled)  
-        execution.setVariable("wanResources", wanResources)
-        utils.log("INFO", "======== COMPLETED sequenceResoure Process ======== ", isDebugEnabled)  
+
+       // prepare input param for using DoCreateResources.bpmn
+       public void preProcessForAddResource(DelegateExecution execution) {
+               def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+               utils.log("INFO", " ======== STARTED preProcessForAddResource Process ======== ", isDebugEnabled)
+               
+               ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
+               List<Resource> addResourceList = serviceDecomposition.getServiceResources()
+               execution.setVariable("addResourceList", addResourceList)
+               
+               utils.log("INFO", "======== COMPLETED preProcessForAddResource Process ======== ", isDebugEnabled)
        }
+
+       public void postProcessForAddResource(DelegateExecution execution) {
+               def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+               // do nothing now
        
-       public void getCurrentResoure(execution){
-           def isDebugEnabled=execution.getVariable("isDebugLogEnabled")   
-        utils.log("INFO", "======== Start getCurrentResoure Process ======== ", isDebugEnabled)    
-           def currentIndex = execution.getVariable("currentResourceIndex")
-           List<String> resourceSequence = execution.getVariable("resourceSequence")  
-           List<String> wanResources = execution.getVariable("wanResources")  
-           String resourceName =  resourceSequence.get(currentIndex)
-           execution.setVariable("resourceType",resourceName)
-           if(wanResources.contains(resourceName)){
-               execution.setVariable("controllerInfo", "SDN-C")
-           }else{
-               execution.setVariable("controllerInfo", "VF-C")
-           }
-        utils.log("INFO", "======== COMPLETED getCurrentResoure Process ======== ", isDebugEnabled)  
-    }
+       }
 
-          /**
-     * sequence resource
-     */
-    public void parseNextResource(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()){
-            execution.setVariable("allResourceFinished", "true")
-        }else{
-            execution.setVariable("allResourceFinished", "false")
-        }
-        utils.log("INFO", "======== COMPLETED parseNextResource Process ======== ", isDebugEnabled)       
-    }
-    
-      /**
-      * post config request.
-      */
-     public void postConfigRequest(execution){
-         //now do noting
-     } 
 }