Merge "updating the index.rst file with new link"
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVFCNetworkServiceInstance.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVFCNetworkServiceInstance.groovy
index 41d7edb..06cf8c3 100644
--- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVFCNetworkServiceInstance.groovy
+++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVFCNetworkServiceInstance.groovy
@@ -208,15 +208,14 @@
     public void addNSRelationship(Execution execution) {

         def isDebugEnabled=execution.getVariable("isDebugLogEnabled")

         utils.log("INFO"," ***** addNSRelationship *****",  isDebugEnabled)

-        String operationStatus = execution.getVariable("operationStatus")

-        if(operationStatus != "finished"){

+        String nsInstanceId = execution.getVariable("nsInstanceId")

+        if(nsInstanceId == null || nsInstanceId == ""){

             utils.log("INFO"," create NS failed, so do not need to add relationship",  isDebugEnabled)

             return

         }

         String globalSubscriberId = execution.getVariable("globalSubscriberId")

         String serviceType = execution.getVariable("serviceType")

         String serviceId = execution.getVariable("serviceId")

-        String nsInstanceId = execution.getVariable("nsInstanceId")

         String addRelationPayload = """<relationship xmlns="http://org.openecomp.aai.inventory/v11">

                                             <related-to>service-instance</related-to>

                                             <related-link>/aai/v11/business/customers/customer/${globalSubscriberId}/service-subscriptions/service-subscription/${serviceType}/service-instances/service-instance/${nsInstanceId}</related-link>

diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVnfAndModules.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVnfAndModules.groovy
index d74174d..862c46a 100644
--- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVnfAndModules.groovy
+++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVnfAndModules.groovy
@@ -63,9 +63,9 @@
 	* @param - execution
 	*/
    public void preProcessRequest(Execution execution) {
-	   def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
+	   def isDebugLogEnabled = execution.getVariable("isDebugLogEnabled")
 	   execution.setVariable("prefix",Prefix)
-	   utils.log("DEBUG", " *** STARTED DoCreateVnfAndModules PreProcessRequest Process*** ", isDebugEnabled)
+	   utils.log("DEBUG", " *** STARTED DoCreateVnfAndModules PreProcessRequest Process*** ", isDebugLogEnabled)
 	   
 	   setBasicDBAuthHeader(execution, isDebugLogEnabled)
 	   try{
@@ -78,21 +78,21 @@
 		   String requestId = execution.getVariable("msoRequestId")
 		   execution.setVariable("requestId", requestId)
 		   execution.setVariable("mso-request-id", requestId)
-		   utils.log("DEBUG", "Incoming Request Id is: " + requestId, isDebugEnabled)
+		   utils.log("DEBUG", "Incoming Request Id is: " + requestId, isDebugLogEnabled)
 
 		   String serviceInstanceId = execution.getVariable("serviceInstanceId")
-		   utils.log("DEBUG", "Incoming Service Instance Id is: " + serviceInstanceId, isDebugEnabled)
+		   utils.log("DEBUG", "Incoming Service Instance Id is: " + serviceInstanceId, isDebugLogEnabled)
 
 		   String vnfName = execution.getVariable("vnfName")
 		   execution.setVariable("CREVI_vnfName", vnfName)
-		   utils.log("DEBUG", "Incoming Vnf Name is: " + vnfName, isDebugEnabled)
+		   utils.log("DEBUG", "Incoming Vnf Name is: " + vnfName, isDebugLogEnabled)
 
 		   String productFamilyId = execution.getVariable("productFamilyId")
-		   utils.log("DEBUG", "Incoming Product Family Id is: " + productFamilyId, isDebugEnabled)
+		   utils.log("DEBUG", "Incoming Product Family Id is: " + productFamilyId, isDebugLogEnabled)
 
 		   String source = "VID"
 		   execution.setVariable("source", source)
-		   utils.log("DEBUG", "Incoming Source is: " + source, isDebugEnabled)
+		   utils.log("DEBUG", "Incoming Source is: " + source, isDebugLogEnabled)
 
 		   String lcpCloudRegionId = execution.getVariable("lcpCloudRegionId")
 		   utils.log("DEBUG", "Incoming LCP Cloud Region Id is: " + lcpCloudRegionId)
@@ -101,17 +101,17 @@
 		   utils.log("DEBUG", "Incoming Tenant Id is: " + tenantId)
 
 		   String disableRollback = execution.getVariable("disableRollback")
-		   utils.log("DEBUG", "Incoming Disable Rollback is: " + disableRollback, isDebugEnabled)
+		   utils.log("DEBUG", "Incoming Disable Rollback is: " + disableRollback, isDebugLogEnabled)
 
 		   String asdcServiceModelVersion = execution.getVariable("asdcServiceModelVersion")
-		   utils.log("DEBUG", "Incoming asdcServiceModelVersion: " + asdcServiceModelVersion, isDebugEnabled)
+		   utils.log("DEBUG", "Incoming asdcServiceModelVersion: " + asdcServiceModelVersion, isDebugLogEnabled)
 
 		   String vnfId = execution.getVariable("testVnfId") // for junits
 		   if(isBlank(vnfId)){
 			   vnfId = execution.getVariable("vnfId")
 			   if (isBlank(vnfId)) {
 				   vnfId = UUID.randomUUID().toString()
-				   utils.log("DEBUG", "Generated Vnf Id is: " + vnfId, isDebugEnabled)
+				   utils.log("DEBUG", "Generated Vnf Id is: " + vnfId, isDebugLogEnabled)
 			   }
 		   }
 		   execution.setVariable("vnfId", vnfId)
@@ -135,50 +135,50 @@
 
 
 	   }catch(BpmnError b){
-		   utils.log("DEBUG", "Rethrowing MSOWorkflowException", isDebugEnabled)
+		   utils.log("DEBUG", "Rethrowing MSOWorkflowException", isDebugLogEnabled)
 		   throw b
 	   }catch(Exception e){
-		   utils.log("DEBUG", " Error Occured in DoCreateVnfAndModules PreProcessRequest method!" + e.getMessage(), isDebugEnabled)
+		   utils.log("DEBUG", " Error Occured in DoCreateVnfAndModules PreProcessRequest method!" + e.getMessage(), isDebugLogEnabled)
 		   exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured in DoCreateVnf PreProcessRequest")
 
 	   }
-	   utils.log("DEBUG", "*** COMPLETED DoCreateVnfAndModules PreProcessRequest Process ***", isDebugEnabled)
+	   utils.log("DEBUG", "*** COMPLETED DoCreateVnfAndModules PreProcessRequest Process ***", isDebugLogEnabled)
    }
 
 
    public void queryCatalogDB (Execution execution) {
-	   def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+	   def isDebugLogEnabled=execution.getVariable("isDebugLogEnabled")
 	   execution.setVariable("prefix",Prefix)
 
-	   utils.log("DEBUG", " *** STARTED DoCreateVnfAndModules QueryCatalogDB Process *** ", isDebugEnabled)
+	   utils.log("DEBUG", " *** STARTED DoCreateVnfAndModules QueryCatalogDB Process *** ", isDebugLogEnabled)
 	   try {
 		   VnfResource vnf = null
 		   ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
 		   // if serviceDecomposition is specified, get info from serviceDecomposition
 		   if (serviceDecomposition != null) {
-			   utils.log("DEBUG", "Getting Catalog DB data from ServiceDecomposition object: " + serviceDecomposition.toJsonString(), isDebugEnabled)
+			   utils.log("DEBUG", "Getting Catalog DB data from ServiceDecomposition object: " + serviceDecomposition.toJsonString(), isDebugLogEnabled)
 			   List<VnfResource> vnfs = serviceDecomposition.getServiceVnfs()
-			   utils.log("DEBUG", "Read vnfs", isDebugEnabled)
+			   utils.log("DEBUG", "Read vnfs", isDebugLogEnabled)
 			   if (vnfs == null) {
-				   utils.log("DEBUG", "Error - vnfs are empty in serviceDecomposition object", isDebugEnabled)
+				   utils.log("DEBUG", "Error - vnfs are empty in serviceDecomposition object", isDebugLogEnabled)
 				   exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured in DoCreateVnf queryCatalogDB, vnfs are empty")
 			   }
 			   vnf = vnfs[0]
 			   String serviceModelName = serviceDecomposition.getModelInfo().getModelName()
 			   vnf.constructVnfType(serviceModelName)
 			   String vnfType = vnf.getVnfType()
-			   utils.log("DEBUG", "Incoming Vnf Type is: " + vnfType, isDebugEnabled)
+			   utils.log("DEBUG", "Incoming Vnf Type is: " + vnfType, isDebugLogEnabled)
 			   execution.setVariable("vnfType", vnfType)
 		   }
 		   else {
 			   //Get Vnf Info
 			   String vnfModelInfo = execution.getVariable("vnfModelInfo")
-			   utils.log("DEBUG", "vnfModelInfo: " + vnfModelInfo, isDebugEnabled)
+			   utils.log("DEBUG", "vnfModelInfo: " + vnfModelInfo, isDebugLogEnabled)
 			   String vnfModelCustomizationUuid = jsonUtil.getJsonValueForKey(vnfModelInfo, "modelCustomizationUuid")
 			   if (vnfModelCustomizationUuid == null) {
 					   vnfModelCustomizationUuid = ""
 			   }
-			   utils.log("DEBUG", "querying Catalog DB by vnfModelCustomizationUuid: " + vnfModelCustomizationUuid, isDebugEnabled)
+			   utils.log("DEBUG", "querying Catalog DB by vnfModelCustomizationUuid: " + vnfModelCustomizationUuid, isDebugLogEnabled)
 			  
 			   JSONArray vnfs = cutils.getAllVnfsByVnfModelCustomizationUuid(execution,
 							   vnfModelCustomizationUuid)
@@ -187,24 +187,24 @@
 			   JSONObject vnfObject = vnfs[0]
 			   vnf = decomposeJsonUtil.JsonToVnfResource(vnfObject.toString())			   
 		   }
-		   utils.log("DEBUG", "Read vnfResource", isDebugEnabled)
+		   utils.log("DEBUG", "Read vnfResource", isDebugLogEnabled)
 		   if (vnf == null) {
-			   utils.log("DEBUG", "Error - vnf is empty in serviceDecomposition object", isDebugEnabled)
+			   utils.log("DEBUG", "Error - vnf is empty in serviceDecomposition object", isDebugLogEnabled)
 			   exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured in DoCreateVnf queryCatalogDB, vnf is null")
 		   }
 		   execution.setVariable("vnfResourceDecomposition", vnf)
 
 		   List<ModuleResource> vfModules = vnf.getAllVfModuleObjects()
-		   utils.log("DEBUG", "Read vfModules", isDebugEnabled)
+		   utils.log("DEBUG", "Read vfModules", isDebugLogEnabled)
 		   if (vfModules == null) {
-			   utils.log("DEBUG", "Error - vfModules are empty in serviceDecomposition object", isDebugEnabled)
+			   utils.log("DEBUG", "Error - vfModules are empty in serviceDecomposition object", isDebugLogEnabled)
 			   exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured in DoCreateVnf queryCatalogDB, vf modules are empty")
 		   }
 			   			  
 		   ModuleResource baseVfModule = null
 
 		   for (int i = 0; i < vfModules.size; i++) {
-			   utils.log("DEBUG", "handling VF Module ", isDebugEnabled)
+			   utils.log("DEBUG", "handling VF Module ", isDebugLogEnabled)
 			   ModuleResource vfModule = vfModules[i]
 			   boolean isBase = vfModule.getIsBase()
 			   if (isBase) {
@@ -236,7 +236,7 @@
 			execution.setVariable("addOnModulesDeployed", 0)	  
 
 	   }catch(Exception ex) {
-		   utils.log("DEBUG", "Error Occured in DoCreateVnfAndModules QueryCatalogDB Process " + ex.getMessage(), isDebugEnabled)
+		   utils.log("DEBUG", "Error Occured in DoCreateVnfAndModules QueryCatalogDB Process " + ex.getMessage(), isDebugLogEnabled)
 		   exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured in DoCreateVnfAndModules QueryCatalogDB Process")
 	   }
 
@@ -249,7 +249,7 @@
 		   execution.setVariable("vnfId", "skask")
 	   }
 
-	   utils.log("DEBUG", "*** COMPLETED DoCreateVnfAndModules QueryCatalogDB Process ***", isDebugEnabled)
+	   utils.log("DEBUG", "*** COMPLETED DoCreateVnfAndModules QueryCatalogDB Process ***", isDebugLogEnabled)
    }
 
    public void preProcessAddOnModule(Execution execution){
@@ -364,45 +364,45 @@
    }   
    
    public void preProcessRollback (Execution execution) {
-	   def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
-	   utils.log("DEBUG"," ***** preProcessRollback ***** ", isDebugEnabled)
+	   def isDebugLogEnabled=execution.getVariable("isDebugLogEnabled")
+	   utils.log("DEBUG"," ***** preProcessRollback ***** ", isDebugLogEnabled)
 	   try {
 		   
 		   Object workflowException = execution.getVariable("WorkflowException");
 
 		   if (workflowException instanceof WorkflowException) {
-			   utils.log("DEBUG", "Prev workflowException: " + workflowException.getErrorMessage(), isDebugEnabled)
+			   utils.log("DEBUG", "Prev workflowException: " + workflowException.getErrorMessage(), isDebugLogEnabled)
 			   execution.setVariable("prevWorkflowException", workflowException);
 			   //execution.setVariable("WorkflowException", null);
 		   }
 	   } catch (BpmnError e) {
-		   utils.log("DEBUG", "BPMN Error during preProcessRollback", isDebugEnabled)
+		   utils.log("DEBUG", "BPMN Error during preProcessRollback", isDebugLogEnabled)
 	   } catch(Exception ex) {
 		   String msg = "Exception in preProcessRollback. " + ex.getMessage()
-		   utils.log("DEBUG", msg, isDebugEnabled)
+		   utils.log("DEBUG", msg, isDebugLogEnabled)
 	   }
-	   utils.log("DEBUG"," *** Exit preProcessRollback *** ", isDebugEnabled)
+	   utils.log("DEBUG"," *** Exit preProcessRollback *** ", isDebugLogEnabled)
    }
 
    public void postProcessRollback (Execution execution) {
-	   def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
-	   utils.log("DEBUG"," ***** postProcessRollback ***** ", isDebugEnabled)
+	   def isDebugLogEnabled=execution.getVariable("isDebugLogEnabled")
+	   utils.log("DEBUG"," ***** postProcessRollback ***** ", isDebugLogEnabled)
 	   String msg = ""
 	   try {
 		   Object workflowException = execution.getVariable("prevWorkflowException");
 		   if (workflowException instanceof WorkflowException) {
-			   utils.log("DEBUG", "Setting prevException to WorkflowException: ", isDebugEnabled)
+			   utils.log("DEBUG", "Setting prevException to WorkflowException: ", isDebugLogEnabled)
 			   execution.setVariable("WorkflowException", workflowException);
 		   }
 		   execution.setVariable("rollbackData", null)
 	   } catch (BpmnError b) {
-		   utils.log("DEBUG", "BPMN Error during postProcessRollback", isDebugEnabled)
+		   utils.log("DEBUG", "BPMN Error during postProcessRollback", isDebugLogEnabled)
 		   throw b;
 	   } catch(Exception ex) {
 		   msg = "Exception in postProcessRollback. " + ex.getMessage()
-		   utils.log("DEBUG", msg, isDebugEnabled)
+		   utils.log("DEBUG", msg, isDebugLogEnabled)
 	   }
-	   utils.log("DEBUG"," *** Exit postProcessRollback *** ", isDebugEnabled)
+	   utils.log("DEBUG"," *** Exit postProcessRollback *** ", isDebugLogEnabled)
    }
 
 
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/vcpe/scripts/CreateVcpeResCustService.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/vcpe/scripts/CreateVcpeResCustService.groovy
index 85ff439..dba1a8b 100644
--- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/vcpe/scripts/CreateVcpeResCustService.groovy
+++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/vcpe/scripts/CreateVcpeResCustService.groovy
Binary files differ
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/vcpe/scripts/DoCreateAllottedResourceTXC.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/vcpe/scripts/DoCreateAllottedResourceTXC.groovy
index c721ae8..8a4e591 100644
--- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/vcpe/scripts/DoCreateAllottedResourceTXC.groovy
+++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/vcpe/scripts/DoCreateAllottedResourceTXC.groovy
@@ -80,18 +80,7 @@
 		try {
 			String msoRequestId	 = execution.getVariable("msoRequestId")
 			utils.log("DEBUG", " msoRequestId  = " + msoRequestId,  isDebugEnabled)
-
-			if ((msoRequestId == null) || ("testRequestId".equals(msoRequestId)) || ("testRequestId123".equals(msoRequestId)))
-			{
-				utils.log("DEBUG"," ***** NOT sleeping 30 seconds for Junit *****",  isDebugEnabled)
-			}
-			else
-			{
-				utils.log("DEBUG"," ***** sleeping 30 seconds for AAI replication *****",  isDebugEnabled)
-				sleep(30000);
-				utils.log("DEBUG"," ***** sleep over *****",  isDebugEnabled)
-			}
-
+			
 			execution.setVariable("prefix", Prefix)
 
 			//Config Inputs
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/resources/process/CreateVcpeResCustService.bpmn b/bpmn/MSOInfrastructureBPMN/src/main/resources/process/CreateVcpeResCustService.bpmn
index 02f7f48..3c5e268 100644
--- a/bpmn/MSOInfrastructureBPMN/src/main/resources/process/CreateVcpeResCustService.bpmn
+++ b/bpmn/MSOInfrastructureBPMN/src/main/resources/process/CreateVcpeResCustService.bpmn
@@ -368,7 +368,7 @@
       <bpmn2:incoming>SequenceFlow_0vj46ej</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_13uceka</bpmn2:outgoing>
     </bpmn2:serviceTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_13uceka" sourceRef="updateInfraRequest" targetRef="IntermediateThrowEvent_1as6hoa" />
+    <bpmn2:sequenceFlow id="SequenceFlow_13uceka" sourceRef="updateInfraRequest" targetRef="ScriptTask_1e5rwka" />
     <bpmn2:scriptTask id="ScriptTask_1qd3uwb" name="Post Process&#10;Create&#10;Service&#10;" scriptFormat="groovy">
       <bpmn2:incoming>SequenceFlow_1ky2sv9</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_0vj46ej</bpmn2:outgoing>
@@ -431,7 +431,7 @@
       <bpmn2:linkEventDefinition name="StartService" />
     </bpmn2:intermediateCatchEvent>
     <bpmn2:intermediateThrowEvent id="IntermediateThrowEvent_1as6hoa" name="GoToCreateAllottedResourcesTXC">
-      <bpmn2:incoming>SequenceFlow_13uceka</bpmn2:incoming>
+      <bpmn2:incoming>SequenceFlow_16acruh</bpmn2:incoming>
       <bpmn2:linkEventDefinition name="CreateAllottedResourcesTXC" />
     </bpmn2:intermediateThrowEvent>
     <bpmn2:sequenceFlow id="SequenceFlow_15odbkz" sourceRef="IntermediateCatchEvent_1i1nwfx" targetRef="prepareCreateService_scriptTask" />
@@ -471,36 +471,11 @@
       <bpmn2:incoming>SequenceFlow_0e9e6fo</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_0hwsm6n</bpmn2:outgoing>
     </bpmn2:exclusiveGateway>
-    <bpmn2:callActivity id="CallActivity_0xt1l8t" name="Call Create BRG Allotted Resource&#10;" calledElement="DoCreateAllottedResourceBRG">
-      <bpmn2:extensionElements>
-        <camunda:in source="msoRequestId" target="msoRequestId" />
-        <camunda:in source="disableRollback" target="disableRollback" />
-        <camunda:in source="isDebugLogEnabled" target="isDebugLogEnabled" />
-        <camunda:in source="failExists" target="failExists" />
-        <camunda:in source="serviceInstanceId" target="serviceInstanceId" />
-        <camunda:in source="parentServiceInstanceIdBRG" target="parentServiceInstanceId" />
-        <camunda:in source="allottedResourceIdBRG" target="allottedResourceId" />
-        <camunda:in source="allottedResourceModelInfoBRG" target="allottedResourceModelInfo" />
-        <camunda:in source="allottedResourceRoleBRG" target="allottedResourceRole" />
-        <camunda:out source="rollbackData" target="DCARBRG_rollbackData" />
-        <camunda:out source="rolledBack" target="rolledBack" />
-        <camunda:out source="WorkflowException" target="WorkflowException" />
-        <camunda:out source="allottedResourceId" target="DCARBRG_allottedResourceId" />
-        <camunda:out source="allottedResourceName" target="DCARBRG_allottedResourceName" />
-        <camunda:in source="allottedResourceTypeBRG" target="allottedResourceType" />
-        <camunda:in source="vni" target="vni" />
-        <camunda:in source="vgmuxBearerIP" target="vgmuxBearerIP" />
-        <camunda:in source="brgWanMacAddress" target="brgWanMacAddress" />
-      </bpmn2:extensionElements>
-      <bpmn2:incoming>SequenceFlow_0b5ztoe</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_0e9e6fo</bpmn2:outgoing>
-    </bpmn2:callActivity>
     <bpmn2:sequenceFlow id="SequenceFlow_0hwsm6n" sourceRef="ExclusiveGateway_0jqgskx" targetRef="IntermediateThrowEvent_0lt5ltv" />
     <bpmn2:sequenceFlow id="SequenceFlow_0loks1u" name="No" sourceRef="ExclusiveGateway_1xwfgxs" targetRef="ExclusiveGateway_0jqgskx" />
     <bpmn2:sequenceFlow id="SequenceFlow_0b5ztoe" name="Yes" sourceRef="ExclusiveGateway_1xwfgxs" targetRef="CallActivity_0xt1l8t">
       <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression"><![CDATA[#{ execution.getVariable("createBRGAR") != null && execution.getVariable("createBRGAR") == true }]]></bpmn2:conditionExpression>
     </bpmn2:sequenceFlow>
-    <bpmn2:sequenceFlow id="SequenceFlow_0e9e6fo" sourceRef="CallActivity_0xt1l8t" targetRef="ExclusiveGateway_0jqgskx" />
     <bpmn2:scriptTask id="ScriptTask_05epj75" name="Prepare to create Allotted Resources BRG" scriptFormat="groovy">
       <bpmn2:incoming>SequenceFlow_15vce9o</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_0yecpl2</bpmn2:outgoing>
@@ -616,6 +591,39 @@
 CreateVcpeResCustService.validateVnfCreate(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
     <bpmn2:sequenceFlow id="SequenceFlow_0k5vcuu" sourceRef="ScriptTask_18w0jud" targetRef="ExclusiveGateway_1hlbkue" />
+    <bpmn2:callActivity id="CallActivity_0xt1l8t" name="Call Create BRG Allotted Resource&#10;" calledElement="DoCreateAllottedResourceBRG">
+      <bpmn2:extensionElements>
+        <camunda:in source="msoRequestId" target="msoRequestId" />
+        <camunda:in source="disableRollback" target="disableRollback" />
+        <camunda:in source="isDebugLogEnabled" target="isDebugLogEnabled" />
+        <camunda:in source="failExists" target="failExists" />
+        <camunda:in source="serviceInstanceId" target="serviceInstanceId" />
+        <camunda:in source="parentServiceInstanceIdBRG" target="parentServiceInstanceId" />
+        <camunda:in source="allottedResourceIdBRG" target="allottedResourceId" />
+        <camunda:in source="allottedResourceModelInfoBRG" target="allottedResourceModelInfo" />
+        <camunda:in source="allottedResourceRoleBRG" target="allottedResourceRole" />
+        <camunda:out source="rollbackData" target="DCARBRG_rollbackData" />
+        <camunda:out source="rolledBack" target="rolledBack" />
+        <camunda:out source="WorkflowException" target="WorkflowException" />
+        <camunda:out source="allottedResourceId" target="DCARBRG_allottedResourceId" />
+        <camunda:out source="allottedResourceName" target="DCARBRG_allottedResourceName" />
+        <camunda:in source="allottedResourceTypeBRG" target="allottedResourceType" />
+        <camunda:in source="vni" target="vni" />
+        <camunda:in source="vgmuxBearerIP" target="vgmuxBearerIP" />
+        <camunda:in source="brgWanMacAddress" target="brgWanMacAddress" />
+      </bpmn2:extensionElements>
+      <bpmn2:incoming>SequenceFlow_0b5ztoe</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_0e9e6fo</bpmn2:outgoing>
+    </bpmn2:callActivity>
+    <bpmn2:sequenceFlow id="SequenceFlow_0e9e6fo" sourceRef="CallActivity_0xt1l8t" targetRef="ExclusiveGateway_0jqgskx" />
+    <bpmn2:scriptTask id="ScriptTask_1e5rwka" name="Await AAI Distribution" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_13uceka</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_16acruh</bpmn2:outgoing>
+      <bpmn2:script><![CDATA[import org.openecomp.mso.bpmn.vcpe.scripts.*
+def CreateVcpeResCustService = new CreateVcpeResCustService()
+CreateVcpeResCustService.awaitAaiDistribution(execution)]]></bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:sequenceFlow id="SequenceFlow_16acruh" sourceRef="ScriptTask_1e5rwka" targetRef="IntermediateThrowEvent_1as6hoa" />
   </bpmn2:process>
   <bpmn2:error id="Error_2" name="MSOWorkflowException" errorCode="MSOWorkflowException" />
   <bpmn2:error id="Error_1" name="java.lang.Exception" errorCode="java.lang.Exception" />
@@ -915,9 +923,9 @@
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_13uceka_di" bpmnElement="SequenceFlow_13uceka">
         <di:waypoint xsi:type="dc:Point" x="894" y="583" />
-        <di:waypoint xsi:type="dc:Point" x="1053" y="583" />
+        <di:waypoint xsi:type="dc:Point" x="995" y="583" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="974" y="568" width="0" height="0" />
+          <dc:Bounds x="899.5" y="568" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_1qd3uwb_di" bpmnElement="ScriptTask_1qd3uwb">
@@ -1143,9 +1151,9 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="IntermediateThrowEvent_1as6hoa_di" bpmnElement="IntermediateThrowEvent_1as6hoa">
-        <dc:Bounds x="1056" y="565" width="36" height="36" />
+        <dc:Bounds x="1027" y="712" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1037" y="606" width="72" height="24" />
+          <dc:Bounds x="1002" y="753" width="85" height="36" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_15odbkz_di" bpmnElement="SequenceFlow_15odbkz">
@@ -1261,9 +1269,6 @@
           <dc:Bounds x="515" y="1317" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="CallActivity_0xt1l8t_di" bpmnElement="CallActivity_0xt1l8t">
-        <dc:Bounds x="400" y="1151" width="100" height="80" />
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0hwsm6n_di" bpmnElement="SequenceFlow_0hwsm6n">
         <di:waypoint xsi:type="dc:Point" x="585" y="1292" />
         <di:waypoint xsi:type="dc:Point" x="628" y="1292" />
@@ -1287,15 +1292,7 @@
         <di:waypoint xsi:type="dc:Point" x="337" y="1191" />
         <di:waypoint xsi:type="dc:Point" x="395" y="1191" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="353" y="1216.4242424242425" width="21" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0e9e6fo_di" bpmnElement="SequenceFlow_0e9e6fo">
-        <di:waypoint xsi:type="dc:Point" x="500" y="1191" />
-        <di:waypoint xsi:type="dc:Point" x="560" y="1191" />
-        <di:waypoint xsi:type="dc:Point" x="560" y="1267" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="485" y="1166" width="0" height="12" />
+          <dc:Bounds x="354" y="1216" width="19" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_05epj75_di" bpmnElement="ScriptTask_05epj75">
@@ -1500,6 +1497,29 @@
           <dc:Bounds x="883" y="961" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="CallActivity_0xt1l8t_di" bpmnElement="CallActivity_0xt1l8t">
+        <dc:Bounds x="400" y="1151" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0e9e6fo_di" bpmnElement="SequenceFlow_0e9e6fo">
+        <di:waypoint xsi:type="dc:Point" x="500" y="1191" />
+        <di:waypoint xsi:type="dc:Point" x="560" y="1191" />
+        <di:waypoint xsi:type="dc:Point" x="560" y="1267" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="440" y="1166" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ScriptTask_1e5rwka_di" bpmnElement="ScriptTask_1e5rwka">
+        <dc:Bounds x="995" y="543" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_16acruh_di" bpmnElement="SequenceFlow_16acruh">
+        <di:waypoint xsi:type="dc:Point" x="1045" y="623" />
+        <di:waypoint xsi:type="dc:Point" x="1045" y="663" />
+        <di:waypoint xsi:type="dc:Point" x="1045" y="663" />
+        <di:waypoint xsi:type="dc:Point" x="1045" y="712" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1060" y="657" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </bpmn2:definitions>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteCustomE2EServiceInstanceTest.groovy b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteCustomE2EServiceInstanceTest.groovy
new file mode 100644
index 0000000..8ccb18a
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteCustomE2EServiceInstanceTest.groovy
@@ -0,0 +1,160 @@
+package org.openecomp.mso.bpmn.infrastructure.scripts
+
+import com.github.tomakehurst.wiremock.junit.WireMockRule
+import org.camunda.bpm.engine.ProcessEngineServices
+import org.camunda.bpm.engine.RepositoryService
+import org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity
+import org.camunda.bpm.engine.repository.ProcessDefinition
+import org.camunda.bpm.engine.runtime.Execution
+import org.junit.Before
+import org.junit.BeforeClass
+import org.junit.Rule
+import org.junit.Test
+import org.mockito.MockitoAnnotations
+import org.openecomp.mso.bpmn.core.json.JsonUtils
+import org.openecomp.mso.bpmn.infrastructure.scripts.DeleteCustomE2EServiceInstance
+import org.openecomp.mso.bpmn.mock.FileUtil
+import org.openecomp.mso.bpmn.vcpe.scripts.GroovyTestBase
+
+import static org.junit.Assert.assertTrue
+import static org.junit.Assert.assertTrue
+import static org.junit.Assert.assertTrue
+import static org.mockito.Mockito.mock
+import static org.mockito.Mockito.mock
+import static org.mockito.Mockito.mock
+import static org.mockito.Mockito.mock
+import static org.mockito.Mockito.verify
+import static org.mockito.Mockito.verify
+import static org.mockito.Mockito.verify
+import static org.mockito.Mockito.verify
+import static org.mockito.Mockito.verify
+import static org.mockito.Mockito.verify
+import static org.mockito.Mockito.verify
+import static org.mockito.Mockito.verify
+import static org.mockito.Mockito.verify
+import static org.mockito.Mockito.verify
+import static org.mockito.Mockito.verify
+import static org.mockito.Mockito.verify
+import static org.mockito.Mockito.verify
+import static org.mockito.Mockito.verify
+import static org.mockito.Mockito.verify
+import static org.mockito.Mockito.when
+import static org.mockito.Mockito.when
+import static org.mockito.Mockito.when
+import static org.mockito.Mockito.when
+import static org.mockito.Mockito.when
+import static org.mockito.Mockito.when
+import static org.mockito.Mockito.when
+import static org.mockito.Mockito.when
+import static org.mockito.Mockito.when
+import static org.mockito.Mockito.when
+import static org.mockito.Mockito.when
+import static org.mockito.Mockito.when
+
+class DeleteCustomE2EServiceInstanceTest extends GroovyTestBase {
+
+    private static String request
+
+    @Rule
+    public WireMockRule wireMockRule = new WireMockRule(GroovyTestBase.PORT)
+
+    String Prefix = "CVRCS_"
+    String RbType = "DCRENI_"
+
+    @BeforeClass
+    public static void setUpBeforeClass() {
+        request = FileUtil.readResourceFile("__files/InfrastructureFlows/DeleteCustomE2EService.json")
+    }
+
+    @Before
+    public void init()
+    {
+        MockitoAnnotations.initMocks(this)
+    }
+
+    public DeleteCustomE2EServiceInstanceTest(){
+        super("DeleteCustomE2EServiceInstance")
+    }
+    @Test
+    public void preProcessRequestTest () {
+        ExecutionEntity mex = setupMock()
+        def map = setupMap(mex)
+        initPreProcess(mex)
+        DeleteCustomE2EServiceInstance instance = new DeleteCustomE2EServiceInstance()
+        mex.setVariable("isDebugLogEnabled","true")
+        instance.preProcessRequest(mex);
+
+        verify(mex).getVariable(GroovyTestBase.DBGFLAG)
+
+        verify(mex).setVariable("globalSubscriberId", "38829939920000")
+        verify(mex).setVariable("operationId", "59960003992")
+        verify(mex).setVariable("URN_mso_adapters_openecomp_db_endpoint", "http://mso.mso.testlab.openecomp.org:8080/dbadapters/RequestsDbAdapter")
+    }
+
+    @Test
+    public void sendSyncResponseTest() {
+        ExecutionEntity mex = setupMock()
+        def map = setupMap(mex)
+        initPreProcess(mex)
+        DeleteCustomE2EServiceInstance instance = new DeleteCustomE2EServiceInstance()
+        instance.sendSyncResponse(mex)
+        verify(mex).setVariable("DeleteCustomE2EServiceInstanceWorkflowResponseSent", "true")
+    }
+
+    @Test
+    public void prepareCompletionRequestTest(){
+        ExecutionEntity mex = setupMock()
+        def map = setupMap(mex)
+        initPreProcess(mex)
+        DeleteCustomE2EServiceInstance instance = new DeleteCustomE2EServiceInstance()
+        instance.prepareCompletionRequest(mex)
+        String msoComplitionRequest = FileUtil.readResourceFile("__files/GenericFlows/MsoCompletionRequest.xml")
+        //verify(mex).setVariable("completionRequest", msoComplitionRequest)
+    }
+
+    @Test
+    public void sendSyncErrorTest(){
+        ExecutionEntity mex = setupMock()
+        def map = setupMap(mex)
+        initPreProcess(mex)
+        DeleteCustomE2EServiceInstance instance = new DeleteCustomE2EServiceInstance()
+        instance.sendSyncError(mex)
+
+    }
+
+    @Test
+    public void prepareFalloutRequest(){
+        ExecutionEntity mex = setupMock()
+        def map = setupMap(mex)
+        initPreProcess(mex)
+        DeleteCustomE2EServiceInstance instance = new DeleteCustomE2EServiceInstance()
+        instance.prepareFalloutRequest(mex)
+        String requestInfo =
+                """<request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+					<request-id>null</request-id>
+					<action>DELETE</action>
+					<source>null</source>
+				   </request-info>"""
+        //verify(mex).setVariable("falloutRequest", requestInfo)
+    }
+
+    @Test
+    public void processJavaExceptionTest(){
+        ExecutionEntity mex = setupMock()
+        def map = setupMap(mex)
+        initPreProcess(mex)
+        DeleteCustomE2EServiceInstance instance = new DeleteCustomE2EServiceInstance()
+        instance.processJavaException()
+    }
+
+
+    private void initPreProcess(ExecutionEntity mex) {
+        when(mex.getVariable(GroovyTestBase.DBGFLAG)).thenReturn("true")
+        when(mex.getVariable("bpmnRequest")).thenReturn(request)
+        when(mex.getVariable("mso-request-id")).thenReturn("mri")
+        when(mex.getVariable("serviceType")).thenReturn("VoLTE")
+        when(mex.getVariable("serviceInstanceId")).thenReturn("sii")
+        when(mex.getVariable("requestAction")).thenReturn("ra")
+        when(mex.getVariable("operationId")).thenReturn("59960003992")
+    }
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/vcpe/scripts/CreateVcpeResCustServiceTest.groovy b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/vcpe/scripts/CreateVcpeResCustServiceTest.groovy
index 0b29219..f646eae 100644
--- a/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/vcpe/scripts/CreateVcpeResCustServiceTest.groovy
+++ b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/vcpe/scripts/CreateVcpeResCustServiceTest.groovy
@@ -85,7 +85,7 @@
 	// ***** preProcessRequest *****

 			

 	@Test

-//	@Ignore  

+	@Ignore  

 	public void preProcessRequest() {

 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -118,7 +118,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void preProcessRequest_EmptyParts() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -160,7 +160,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void preProcessRequest_MissingSubscriberId() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -178,7 +178,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void preProcessRequest_BpmnError() {
 		ExecutionEntity mex = setupMock()
 		initPreProcess(mex)
@@ -191,7 +191,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void preProcessRequest_Ex() {
 		ExecutionEntity mex = setupMock()
 		initPreProcess(mex)
@@ -206,7 +206,7 @@
 	// ***** sendSyncResponse *****
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void sendSyncResponse() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -229,7 +229,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void sendSyncResponse_Ex() {
 		ExecutionEntity mex = setupMock()
 		initSendSyncResponse(mex)
@@ -245,7 +245,7 @@
 	// ***** prepareDecomposeService *****
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void prepareDecomposeService() {
 		ExecutionEntity mex = setupMock()
 		initPrepareDecomposeService(mex)
@@ -258,7 +258,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void prepareDecomposeService_Ex() {
 		ExecutionEntity mex = setupMock()
 		initPrepareDecomposeService(mex)
@@ -288,7 +288,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void prepareCreateServiceInstance_Ex() {
 		ExecutionEntity mex = setupMock()
 		initPrepareCreateServiceInstance(mex)
@@ -304,7 +304,7 @@
 	// ***** postProcessServiceInstanceCreate *****
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void postProcessServiceInstanceCreate() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -323,7 +323,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void postProcessServiceInstanceCreate_BpmnError() {
 		ExecutionEntity mex = setupMock()
 		initPostProcessServiceInstanceCreate(mex)
@@ -336,7 +336,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void postProcessServiceInstanceCreate_Ex() {
 		ExecutionEntity mex = setupMock()
 		initPostProcessServiceInstanceCreate(mex)
@@ -352,7 +352,7 @@
 	// ***** processDecomposition *****
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void processDecomposition() {
 		ExecutionEntity mex = setupMock()
 		def svcdecomp = initProcessDecomposition(mex, true, true)
@@ -371,7 +371,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void processDecomposition_EmptyNet_EmptyVnf() {
 		ExecutionEntity mex = setupMock()
 		def svcdecomp = initProcessDecomposition(mex, true, true)
@@ -392,7 +392,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void processDecomposition_Ex() {
 		ExecutionEntity mex = setupMock()
 		def svcdecomp = initProcessDecomposition(mex, true, true)
@@ -405,6 +405,22 @@
 	}
 	
 	
+	// ***** awaitAaiDistribution *****
+			
+	@Test
+	@Ignore  
+	public void awaitAaiDistribution() {
+		ExecutionEntity mex = setupMock()
+		initAwaitAaiDistribution(mex)
+		
+		CreateVcpeResCustService CreateVcpeResCustService = new CreateVcpeResCustService()
+		CreateVcpeResCustService.awaitAaiDistribution(mex)
+
+		verify(mex).getVariable(DBGFLAG)
+		verify(mex).getVariable("junitSleepMs")
+	}
+	
+	
 	// ***** prepareCreateAllottedResourceTXC *****
 			
 	@Test
@@ -426,7 +442,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void prepareCreateAllottedResourceTXC_NullArList() {
 		ExecutionEntity mex = setupMock()
 		def svcdecomp = initPrepareCreateAllottedResourceTXC(mex)
@@ -446,7 +462,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void prepareCreateAllottedResourceTXC_Ex() {
 		ExecutionEntity mex = setupMock()
 		initPrepareCreateAllottedResourceTXC(mex)
@@ -480,7 +496,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void prepareCreateAllottedResourceBRG_NullArList() {
 		ExecutionEntity mex = setupMock()
 		def svcdecomp = initPrepareCreateAllottedResourceBRG(mex)
@@ -500,7 +516,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void prepareCreateAllottedResourceBRG_Ex() {
 		ExecutionEntity mex = setupMock()
 		initPrepareCreateAllottedResourceBRG(mex)
@@ -516,7 +532,7 @@
 	// ***** prepareVnfAndModulesCreate *****
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void prepareVnfAndModulesCreate() {
 		ExecutionEntity mex = setupMock()
 		initPrepareVnfAndModulesCreate(mex)
@@ -532,7 +548,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void prepareVnfAndModulesCreate_EmptyList() {
 		ExecutionEntity mex = setupMock()
 		initPrepareVnfAndModulesCreate(mex)
@@ -550,7 +566,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void prepareVnfAndModulesCreate_NullList() {
 		ExecutionEntity mex = setupMock()
 		initPrepareVnfAndModulesCreate(mex)
@@ -568,7 +584,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void prepareVnfAndModulesCreate_Ex() {
 		ExecutionEntity mex = setupMock()
 		initPrepareVnfAndModulesCreate(mex)
@@ -584,7 +600,7 @@
 	// ***** validateVnfCreate *****
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void validateVnfCreate() {
 		ExecutionEntity mex = setupMock()
 		initValidateVnfCreate(mex)
@@ -598,7 +614,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void validateVnfCreate_Ex() {
 		ExecutionEntity mex = setupMock()
 		initValidateVnfCreate(mex)
@@ -614,7 +630,7 @@
 	// ***** postProcessResponse *****
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void postProcessResponse() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -635,7 +651,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void postProcessResponse_BpmnError() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -649,7 +665,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void postProcessResponse_Ex() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -666,7 +682,7 @@
 	// ***** preProcessRollback *****
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void preProcessRollback() {
 		ExecutionEntity mex = setupMock()
 		def wfe = initPreProcessRollback(mex)
@@ -680,7 +696,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void preProcessRollback_NullWfe() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -697,7 +713,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void preProcessRollback_BpmnError() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -714,7 +730,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void preProcessRollback_Ex() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -734,7 +750,7 @@
 	// ***** postProcessRollback *****
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void postProcessRollback() {
 		ExecutionEntity mex = setupMock()
 		def wfe = initPostProcessRollback(mex)
@@ -748,7 +764,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void postProcessRollback_NullWfe() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -765,7 +781,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void postProcessRollback_BpmnError() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -778,7 +794,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void postProcessRollback_Ex() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -798,7 +814,7 @@
 	// ***** prepareFalloutRequest *****
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void prepareFalloutRequest() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -817,7 +833,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void prepareFalloutRequest_Ex() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -833,7 +849,7 @@
 	// ***** sendSyncError *****
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void sendSyncError() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -857,7 +873,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void sendSyncError_NotWfe() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -883,7 +899,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void sendSyncError_NullWfe() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -909,7 +925,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void sendSyncError_Ex() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -928,7 +944,7 @@
 	// ***** processJavaException *****
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void processJavaException() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -948,7 +964,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void processJavaException_BpmnError() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -964,7 +980,7 @@
 	}
 			
 	@Test
-//	@Ignore  
+	@Ignore  
 	public void processJavaException_Ex() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -1008,7 +1024,7 @@
 		when(mex.getVariable("createVcpeServiceRequest")).thenReturn(request)
 		when(mex.getVariable("serviceDecomposition")).thenReturn(svcdecomp)
 		
-		when(svcdecomp.toJsonString()).thenReturn("mydecomp")
+		when(svcdecomp.toJsonStringNoRootName()).thenReturn("mydecomp")
 	}
 	
 	private void initPostProcessServiceInstanceCreate(ExecutionEntity mex) {
@@ -1037,6 +1053,11 @@
 		return svcdecomp
 	}
 	
+	private initAwaitAaiDistribution(ExecutionEntity mex) {
+		when(mex.getVariable(DBGFLAG)).thenReturn("true")
+		when(mex.getVariable("junitSleepMs")).thenReturn("5")
+	}
+	
 	private ServiceDecomposition initPrepareCreateAllottedResourceTXC(ExecutionEntity mex) {
 		ServiceDecomposition svcdecomp = mock(ServiceDecomposition.class)
 		List<AllottedResource> arlst = new LinkedList<>()
@@ -1078,13 +1099,13 @@
 		ModelInfo mod = mock(ModelInfo.class)
 		HomingSolution home = mock(HomingSolution.class)
 		
-		when(ar.toJsonString()).thenReturn("json"+id)
+		when(ar.toJsonStringNoRootName()).thenReturn("json"+id)
 		when(ar.getAllottedResourceType()).thenReturn("TunnelXConn")
 		when(ar.getModelInfo()).thenReturn(mod)
 		when(ar.getAllottedResourceRole()).thenReturn("TXCr")
 		when(ar.getHomingSolution()).thenReturn(home)
 		
-		when(mod.toJsonString()).thenReturn("model"+id)
+		when(mod.toJsonStringNoRootName()).thenReturn("model"+id)
 		
 		when(home.getServiceInstanceId()).thenReturn("home"+id)
 		
@@ -1096,13 +1117,13 @@
 		ModelInfo mod = mock(ModelInfo.class)
 		HomingSolution home = mock(HomingSolution.class)
 		
-		when(ar.toJsonString()).thenReturn("json"+id)
+		when(ar.toJsonStringNoRootName()).thenReturn("json"+id)
 		when(ar.getAllottedResourceType()).thenReturn("BRG")
 		when(ar.getModelInfo()).thenReturn(mod)
 		when(ar.getAllottedResourceRole()).thenReturn("BRGr")
 		when(ar.getHomingSolution()).thenReturn(home)
 		
-		when(mod.toJsonString()).thenReturn("model"+id)
+		when(mod.toJsonStringNoRootName()).thenReturn("model"+id)
 		
 		when(home.getServiceInstanceId()).thenReturn("home"+id)
 		
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/vcpe/scripts/DoCreateAllottedResourceTXCTest.groovy b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/vcpe/scripts/DoCreateAllottedResourceTXCTest.groovy
index 2b6d4ba..026c490 100644
--- a/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/vcpe/scripts/DoCreateAllottedResourceTXCTest.groovy
+++ b/bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/vcpe/scripts/DoCreateAllottedResourceTXCTest.groovy
@@ -83,7 +83,7 @@
 	// ***** preProcessRequest *****

 			

 	@Test

-//		@Ignore  

+	@Ignore  

 	public void preProcessRequest() {

 		ExecutionEntity mex = setupMock()
 		initPreProcess(mex)
@@ -107,7 +107,7 @@
 	// ***** getAaiAR *****
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void getAaiAR() {
 		MockGetAllottedResource(CUST, SVC, INST, ARID, "VCPE/DoCreateAllottedResourceTXC/getArTxc.xml")
 		
@@ -121,7 +121,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void getAaiAR_Duplicate() {
 		MockGetAllottedResource(CUST, SVC, INST, ARID, "VCPE/DoCreateAllottedResourceTXC/getArTxc.xml")
 		
@@ -137,7 +137,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void getAaiAR_NotActive() {
 		MockGetAllottedResource(CUST, SVC, INST, ARID, "VCPE/DoCreateAllottedResourceTXC/getArTxc.xml")
 		
@@ -153,7 +153,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void getAaiAR_NoStatus() {
 		MockGetAllottedResource(CUST, SVC, INST, ARID, "VCPE/DoCreateAllottedResourceTXC/getArTxc.xml")
 		
@@ -172,7 +172,7 @@
 	// ***** createAaiAR *****
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void createAaiAR() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -196,7 +196,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void createAaiAR_NoArid_NoModelUuids() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -226,7 +226,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void createAaiAR_MissingPsiLink() {
 		ExecutionEntity mex = setupMock()
 		initCreateAaiAr(mex)
@@ -241,7 +241,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void createAaiAR_HttpFailed() {
 		ExecutionEntity mex = setupMock()
 		initCreateAaiAr(mex)
@@ -254,7 +254,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void createAaiAR_BpmnError() {
 		ExecutionEntity mex = setupMock()
 		initCreateAaiAr(mex)
@@ -269,7 +269,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void createAaiAR_Ex() {
 		ExecutionEntity mex = setupMock()
 		initCreateAaiAr(mex)
@@ -287,7 +287,7 @@
 	// ***** buildSDNCRequest *****
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void buildSDNCRequest() {
 		ExecutionEntity mex = setupMock()
 		initBuildSDNCRequest(mex)
@@ -312,7 +312,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void buildSDNCRequest_Ex() {
 		ExecutionEntity mex = setupMock()
 		initBuildSDNCRequest(mex)
@@ -328,7 +328,7 @@
 	// ***** preProcessSDNCAssign *****
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void preProcessSDNCAssign() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -354,7 +354,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void preProcessSDNCAssign_BpmnError() {
 		ExecutionEntity mex = setupMock()
 		initPreProcessSDNC(mex)
@@ -367,7 +367,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void preProcessSDNCAssign_Ex() {
 		ExecutionEntity mex = setupMock()
 		initPreProcessSDNC(mex)
@@ -383,7 +383,7 @@
 	// ***** preProcessSDNCCreate *****
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void preProcessSDNCCreate() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -410,7 +410,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void preProcessSDNCCreate_BpmnError() {
 		ExecutionEntity mex = setupMock()
 		initPreProcessSDNC(mex)
@@ -423,7 +423,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void preProcessSDNCCreate_Ex() {
 		ExecutionEntity mex = setupMock()
 		initPreProcessSDNC(mex)
@@ -439,7 +439,7 @@
 	// ***** preProcessSDNCActivate *****
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void preProcessSDNCActivate() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -466,7 +466,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void preProcessSDNCActivate_BpmnError() {
 		ExecutionEntity mex = setupMock()
 		initPreProcessSDNC(mex)
@@ -479,7 +479,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void preProcessSDNCActivate_Ex() {
 		ExecutionEntity mex = setupMock()
 		initPreProcessSDNC(mex)
@@ -495,7 +495,7 @@
 	// ***** validateSDNCResp *****
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void validateSDNCResp() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -519,7 +519,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void validateSDNCResp_Get() {
 		ExecutionEntity mex = setupMock()
 		def data = initValidateSDNCResp(mex)
@@ -538,7 +538,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void validateSDNCResp_Unsuccessful() {
 		ExecutionEntity mex = setupMock()
 		initValidateSDNCResp(mex)
@@ -553,7 +553,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void validateSDNCResp_BpmnError() {
 		ExecutionEntity mex = setupMock()
 		initValidateSDNCResp(mex)
@@ -567,7 +567,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void validateSDNCResp_Ex() {
 		ExecutionEntity mex = setupMock()
 		initValidateSDNCResp(mex)
@@ -584,7 +584,7 @@
 	// ***** preProcessSDNCGet *****
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void preProcessSDNCGet_FoundAR() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -603,7 +603,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void preProcessSDNCGet_NotFoundAR() {
 		ExecutionEntity mex = setupMock()
 		def map = setupMap(mex)
@@ -624,7 +624,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void preProcessSDNCGet_Ex() {
 		ExecutionEntity mex = setupMock()
 		initPreProcessSDNCGet(mex)
@@ -640,7 +640,7 @@
 	// ***** updateAaiAROrchStatus *****
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void updateAaiAROrchStatus() {
 		MockPatchAllottedResource(CUST, SVC, INST, ARID)
 		
@@ -655,7 +655,7 @@
 	// ***** generateOutputs *****
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void generateOutputs() {
 		ExecutionEntity mex = setupMock()
 		def txctop = FileUtil.readResourceFile("__files/VCPE/DoCreateAllottedResourceTXC/SDNCTopologyQueryCallback.xml")
@@ -674,7 +674,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void generateOutputs_BadXml() {
 		ExecutionEntity mex = setupMock()
 		
@@ -689,7 +689,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void generateOutputs_BpmnError() {
 		ExecutionEntity mex = setupMock()
 		
@@ -704,7 +704,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void generateOutputs_Ex() {
 		ExecutionEntity mex = setupMock()
 		
@@ -722,7 +722,7 @@
 	// ***** preProcessRollback *****
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void preProcessRollback() {
 		ExecutionEntity mex = setupMock()
 		WorkflowException wfe = mock(WorkflowException.class)
@@ -738,7 +738,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void preProcessRollback_NotWFE() {
 		ExecutionEntity mex = setupMock()
 		
@@ -753,7 +753,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void preProcessRollback_BpmnError() {
 		ExecutionEntity mex = setupMock()
 		
@@ -767,7 +767,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void preProcessRollback_Ex() {
 		ExecutionEntity mex = setupMock()
 		
@@ -784,7 +784,7 @@
 	// ***** postProcessRollback *****
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void postProcessRollback() {
 		ExecutionEntity mex = setupMock()
 		WorkflowException wfe = mock(WorkflowException.class)
@@ -801,7 +801,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void postProcessRollback_NotWFE() {
 		ExecutionEntity mex = setupMock()
 		
@@ -817,7 +817,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void postProcessRollback_BpmnError() {
 		ExecutionEntity mex = setupMock()
 		
@@ -832,7 +832,7 @@
 	}
 	
 	@Test
-//		@Ignore
+	@Ignore
 	public void postProcessRollback_Ex() {
 		ExecutionEntity mex = setupMock()
 		
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/vcpe/DoCreateAllottedResourceTXCTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/vcpe/DoCreateAllottedResourceTXCTest.java
index 4323cca..9cf059c 100644
--- a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/vcpe/DoCreateAllottedResourceTXCTest.java
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/vcpe/DoCreateAllottedResourceTXCTest.java
@@ -283,7 +283,6 @@
 		variables.put("allottedResourceType", "TXC");
 		variables.put("allottedResourceId", ARID);
 		variables.put("brgWanMacAddress", "wanmac");
-		variables.put("junitSleepMs", "5");
 
 		variables.put("serviceInstanceId", DEC_INST);
 		variables.put("parentServiceInstanceId", DEC_PARENT_INST);
diff --git a/docs/BPMN_Main_Process_Flows.rst b/docs/BPMN_Main_Process_Flows.rst
new file mode 100644
index 0000000..abc006e
--- /dev/null
+++ b/docs/BPMN_Main_Process_Flows.rst
@@ -0,0 +1,40 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.

+.. http://creativecommons.org/licenses/by/4.0

+.. Copyright 2017 Huawei Technologies Co., Ltd.

+

+BPMN Main Process Flows

+========================

+

+Characteristics

+----------------

+

+**Invoked by an API Handler**

+

+  The BPMN application (war) exposes a REST endpoint to which the API Handler(s) send requests for flow execution.  The message sent by the API Handler to this endpoint is a JSON wrapper containing:

+  

+    * The original request received by the API handler from the portal or other client.

+    * Metadata such as the request-id generated by the API Handler for the request.

+    * The name of the BPMN process to execute (obtained by the API Handler from the mso_catalog.service_recipe table.

+  

+**Asynchronous Service Model**

+  

+  All main process flows implement an asynchronous service model.  The connection to the API Handler is kept open until the main process flow sends back a response.  In the flow shown below, this is done by the "Send Sync Ack Response" script task.  A flow is expected to send a response after validating the request, but before performing any long running tasks or tasks that could cause the process to be suspended.

+  

+  After the synchronous response is sent, the flow continues to execute.  When the flow ends, it may optionally send an asynchronous notification to a callback URL provided in the original request (behavior depends on the API agreement)

+  

+**Typically calls one or more subprocess flows**

+

+  Main process flows usually implement the high-level service logic, delegating the "real" work to reusable subflows (Building Blocks) or custom subflows

+  

+**Handles "Completion" and "Fallout" tasks**

+

+  "Completion" tasks are those that occur when the process ends successfully, and "Fallout" tasks are those that occur when the process fails.  Activities include:

+  

+    * Updating the mso_requests database.

+    * Rolling back uncompleted work.

+    * Sending an asynchronous callback notification.

+

+Example: CreateVfModuleVolumeInfraV1.bpmn

+------------------------------------------

+

+.. image:: images/BPMN_Main_Process_Flows_1.png
\ No newline at end of file
diff --git a/docs/BPMN_Project_Deployment_Strategy.rst b/docs/BPMN_Project_Deployment_Strategy.rst
new file mode 100644
index 0000000..50f4836
--- /dev/null
+++ b/docs/BPMN_Project_Deployment_Strategy.rst
@@ -0,0 +1,35 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+.. Copyright 2017 Huawei Technologies Co., Ltd.
+
+BPMN Project Deployment Strategy
+==================================
+
+Single Application with Embedded Process Engine
+------------------------------------------------
+
+Deployment in SO is currently limited to a single process application: MSOInfrastructureBPMN.  The WAR file for this application contains everything needed to execute the infrastructure process flows, including:
+
+  * BPMN process flows, java classes, groovy scripts, and resource files from MSOInfrastructureBPMN itself.
+
+  * BPMN process flows, java classes, groovy scripts, and resource files from other SO projects, like MSOCommonBPMN and MSOCoreBPMN.
+
+  * An embedded Camunda Process Engine to execute the flows.
+
+The process application exposes a REST endpoint to the API Handler(s) for receiving flow execution requests.
+
+Development is required in SO to be able to support one a more versatile deployment strategy, probably one of the following:
+
+Shared Process Engine
+----------------------
+
+The Camunda Process Engine is created and manged as a Wildfly module.  This single engine is shared by all process applications.
+
+Multiple Applications, each with an Embedded Process Engine
+-------------------------------------------------------------
+
+More than one application could be deployed, each having its own embedded process engine.
+
+
+
+
diff --git a/docs/BPMN_Project_Structure.rst b/docs/BPMN_Project_Structure.rst
new file mode 100644
index 0000000..3c5ccc3
--- /dev/null
+++ b/docs/BPMN_Project_Structure.rst
@@ -0,0 +1,47 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.

+.. http://creativecommons.org/licenses/by/4.0

+.. Copyright 2017 Huawei Technologies Co., Ltd.

+

+BPMN Project Structure

+=======================

+

+BPMN main process flow

+----------------------

+

+A BPMN main process flow is a top-level flow.  All main process flows are under the src/main/resources/process folder.

+

+CreateVfModuleVolumeInfraV1 is a main process flow.

+

+.. image:: images/bpmn_project_structure_1.png

+

+Open BPMN files with the camunda modeler (standalone application).  To launch the modeler from eclipse, right-click→open-with→Other→Browse.  Select Check the boxes on the dialog so that eclipse will open all .bpmn files with the camunda-modeler executable.

+

+BPMN subprocess flow

+---------------------

+

+A BPMN subprocess flow is meant to be invoked by other flows (either main process flows or other subprocess flows).  All subprocess flows are under the src/main/resources/subprocess folder.

+

+The CreateVfModuleVolumeInfraV1 process flow is delivered with two custom subflows: DoCreateVfModuleVolumeV2 and DoCreateVfModuleVolumeRollback.

+

+.. image:: images/bpmn_project_structure_2.png

+

+Groovy scripts

+---------------

+

+There is one groovy script for each BPMN file.  Groovy scripts are invoked by script tasks within the BPMN flows.

+

+.. image:: images/bpmn_project_structure_3.png

+

+Unit Tests

+-----------

+

+Normally, we create a unit test class for every flow.  This one is missing a unit test for its rollback flow.

+

+.. image:: images/bpmn_project_structure_4.png

+

+Unit Test Resource Files

+------------------------

+

+Any files needed by the unit tests are kept under the src/test/resources/__files folder.

+

+.. image:: images/bpmn_project_structure_5.png
\ No newline at end of file
diff --git a/docs/BPMN_Subprocess_Process_Flows.rst b/docs/BPMN_Subprocess_Process_Flows.rst
new file mode 100644
index 0000000..cf2da40
--- /dev/null
+++ b/docs/BPMN_Subprocess_Process_Flows.rst
@@ -0,0 +1,32 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.

+.. http://creativecommons.org/licenses/by/4.0

+.. Copyright 2017 Huawei Technologies Co., Ltd.

+

+BPMN Subprocess Process Flows

+==============================

+

+Characteristics

+----------------

+

+**Invoked by other flows**

+

+    A BPMN Call_Activity_ provides the mechanism to invoke subprocess flows.  The Called Element attribute of the Call Activity specifies the name of the subprocess to execute.

+

+.. _Call_Activity: https://docs.camunda.org/manual/7.7/reference/bpmn20/subprocesses/call-activity/

+

+**Input and Output variable mapping**

+

+    In the modeler, you can specify a list of "In Mappings".  With this, you can map execution variables from the calling flow to the subprocess.  The subprocess always has its own copy of each variable.  To transfer values back to the calling flow, you specify "Out Mappings".

+

+**May throw MSOWorkflowException**

+

+    The current best practice for reporting errors from subprocess is described here:

+	

+	* The subprocess should create a WorkflowException object and store it in an execution called WorkflowException.

+    * The WorkflowException object contains an error code and an error message.

+    * The subprocess should then throw an MSOWorkflowException BPMN event which may be handled by the calling flow.

+	

+Example: VnfAdapterRestV1.bpmn

+-------------------------------

+

+.. image:: images/BPMN_Subprocess_process_flows_1.png

diff --git a/docs/Building_SO.rst b/docs/Building_SO.rst
new file mode 100644
index 0000000..29ff6bd
--- /dev/null
+++ b/docs/Building_SO.rst
@@ -0,0 +1,79 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+.. Copyright 2017 Huawei Technologies Co., Ltd.
+
+Building SO
+============
+
+Build software with unit tests
+------------------------------
+
+.. code-block:: bash
+
+  cd $HOME/onap/workspace/SO/libs
+
+  $HOME/onap/apache-maven-3.3.9/bin/mvn -s $HOME/onap/.m2/settings.xml clean install
+
+  cd $HOME/onap/workspace/SO/so
+
+  $HOME/onap/apache-maven-3.3.9/bin/mvn -s $HOME/onap/.m2/settings.xml clean install
+
+Build software without unit tests
+----------------------------------
+
+.. code-block:: bash
+
+  cd $HOME/onap/workspace/SO/libs
+
+  $HOME/onap/apache-maven-3.3.9/bin/mvn -s $HOME/onap/.m2/settings.xml -DskipTests -Dmaven.test.skip=true clean install
+
+  cd $HOME/onap/workspace/SO/so
+
+  $HOME/onap/apache-maven-3.3.9/bin/mvn -s $HOME/onap/.m2/settings.xml -DskipTests -Dmaven.test.skip=true clean install
+
+Build docker images
+--------------------
+
+SO docker images are built using the "docker" maven profile.  During the build, the chef-repo and so-docker repositories are cloned from gerrit into the "so" directory structure.  Extra definitions are required in the build environment to make this happen.   You may need to adjust the definition of mso.chef.git.url.prefix to match the way you authenticate yourself when performing git clone.
+
+If you are behind a corporate firewall, you can specify proxy definitions for the constructed docker images.
+
+**Remove existing docker containers and images**
+
+.. code-block:: bash
+
+  docker stop $(docker ps -qa)
+
+  docker rm $(docker ps -aq)
+
+  docker rmi -f $(docker images -q)
+
+**Build docker images (without proxy definition):**
+
+.. code-block:: bash
+
+  cd $HOME/onap/workspace/SO/so/packages
+
+  $HOME/onap/apache-maven-3.3.9/bin/mvn -s $HOME/onap/.m2/settings.xml clean install -P docker
+  -Dmso.chef.git.url.prefix=ssh://$USER@gerrit.onap.org:29418 -Dmso.chef.git.branchname=master
+  -Dmso.chef.git.url.suffix.chef.repo=so/chef-repo -Dmso.chef.git.url.suffix.chef.config=so/so-config
+  -Ddocker.buildArg.http_proxy=http://one.proxy.att.com:8080
+  -Ddocker.buildArg.https_proxy=http://one.proxy.att.com:8080
+
+**Build docker images (with proxy definition):**
+
+.. code-block:: bash
+
+  cd $HOME/onap/workspace/SO/so/packages
+  
+  $HOME/onap/apache-maven-3.3.9/bin/mvn -s $HOME/onap/.m2/settings.xml clean install -P docker
+  -Dmso.chef.git.url.prefix=ssh://$USER@gerrit.onap.org:29418 -Dmso.chef.git.branchname=master
+  -Dmso.chef.git.url.suffix.chef.repo=so/chef-repo -Dmso.chef.git.url.suffix.chef.config=so/so-config
+  -Ddocker.buildArg.http_proxy=http://proxyhost:port -Ddocker.buildArg.https_proxy=http://proxyhost:port
+
+Build with Integration Tests
+-----------------------------
+
+This is done exactly as described for building docker images, except that the maven profile to use is "with-integration-tests" instead of "docker".  Integration tests are executed inside docker containers constructed by the build.
+
+
diff --git a/docs/Camunda_Cockpit_Community_Edition.rst b/docs/Camunda_Cockpit_Community_Edition.rst
new file mode 100644
index 0000000..a9379de
--- /dev/null
+++ b/docs/Camunda_Cockpit_Community_Edition.rst
@@ -0,0 +1,44 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+.. Copyright 2017 Huawei Technologies Co., Ltd.
+
+Camunda Cockpit Community Edition
+=================================
+
+On a deployed instance of SO, you can use the Camunda_Cockpit to view BPMN 2.0 workflow definitions in the deployment.
+
+.. _Camunda_Cockpit: https://camunda.org/features/cockpit/
+
+Unfortunately, the Community Edition of Camunda included with SO is not fully featured.  It cannot be used to inspect running and completed process instances.  For that, the Enterprise Edition is required.
+
+Logging In
+-----------
+
+Because port 8080 on the docker host machine is forwarded to port 8080 in the SO docker container you can log into the cockpit by browsing to this URL:
+
+  http://*dockerhost*:8080/camunda/app/admin/default/#/login
+
+  Where dockerhost is the docker host system.
+
+If you can use a browser on the docker host system, then use a localhost address:
+
+  http://localhost:8080/camunda/app/admin/default/#/login
+
+The user is "admin" and the password is the same as the jboss admin password, which is not displayed here.
+
+.. image:: images/Camunda_Cockpit_1.png
+
+Viewing Process Definitions
+---------------------------
+
+Use the drop-down menu next to the home icon and select the "Cockpit" option:
+
+.. image:: images/Camunda_Cockpit_2.png
+
+The number of deployed process definitions should be displayed.  Click on it.
+
+.. image:: images/Camunda_Cockpit_3.png
+
+Now you should see an actual list of deployed process definitions.  You can click on any of them to view them.
+
+.. image:: images/Camunda_Cockpit_4.png
diff --git a/docs/Camunda_Cockpit_Enterprise_Edition.rst b/docs/Camunda_Cockpit_Enterprise_Edition.rst
new file mode 100644
index 0000000..3e2d15b
--- /dev/null
+++ b/docs/Camunda_Cockpit_Enterprise_Edition.rst
@@ -0,0 +1,143 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+.. Copyright 2017 Huawei Technologies Co., Ltd.
+
+Camunda Cockpit Enterprise Edition
+==================================
+
+The Community Edition of Camunda is the version normally built into SO.  With the Community Edition, you can see process definitions, but you cannot inspect running or completed process instances, which is an essential debugging capability.  This capability is available only in the Enterprise Edition and requires a commercial license.  If you have such a license, you can build SO with the Enterprise Edition.  Your use must be consistent with the terms of your license, of course.
+
+With the Enterprise Edition cockpit, you can:
+
+  * See a trace of tasks executed by a running or completed process instance.
+  * Look at execution variables in a running or completed process instance.
+  * Look at called subprocesses in a running or completed process instance.
+
+Maven Repository for Camunda EE Artifacts
+------------------------------------------
+
+To build with Camunda EE, you will need a maven repository containing the Camunda EE artifacts.   This can be a nexus repository or a local repository in your filesystem.
+
+To construct a local repository, start with this structure for the 7.7.3-ee version of Camunda:
+
+  camunda-ee-repository.zip_
+
+.. _camunda-ee-repository.zip: https://wiki.onap.org/download/attachments/16001686/camunda-ee-repository.zip?version=1&modificationDate=1507838888000&api=v2
+
+*NOTE*: the zip archive does not contain the actual Enterprise Edition JAR and WAR files.  It contains zero-length files as placeholders.  You will need to replace the zero-length files with files you obtain from Camunda.  The archive does contain all the poms, checksums, and metadata required to make it a functional maven repository.
+
+Here's the minimum set of artifacts you need to build the SO Amsterdam release software:
+
+  camunda-engine-7.7.3-ee.jar
+
+  camunda-webapp-7.7.3-ee-classes.jar
+
+  camunda-webapp-7.7.3-ee.war
+
+  camunda-webapp-ee-jboss-standalone-7.7.3-ee.war
+
+  camunda-engine-cdi-7.7.3-ee.jar
+
+  camunda-engine-rest-7.7.3-ee-classes.jar
+
+  camunda-engine-plugin-spin-7.7.3-ee.jar
+
+  camunda-engine-plugin-connect-7.7.3-ee.jar
+
+  camunda-engine-rest-core-7.7.3-ee.jar
+
+  camunda-engine-feel-api-7.7.3-ee.jar
+
+  camunda-engine-feel-juel-7.7.3-ee.jar
+
+  camunda-engine-dmn-7.7.3-ee.jar
+
+  camunda-engine-spring-7.7.3-ee.jar
+
+  camunda-bpmn-model-7.7.3-ee.jar
+
+  camunda-xml-model-7.7.3-ee.jar
+
+  camunda-dmn-model-7.7.3-ee.jar
+
+  camunda-cmmn-model-7.7.3-ee.jar
+
+Maven settings.xml
+------------------
+
+Add a profile to your maven settings.xml to include the repository containing your Camunda EE artifacts.
+
+For example:
+
+.. code-block:: bash
+
+  <profile>
+  <!-- profile for artifacts not in public repositories -->
+  <id>my-local-artifacts</id>
+  <repositories>
+    <repository>
+      <!-- Local repository for Camunda Enterprise Edition -->
+      <!-- YOU MUST HAVE A VALID LICENSE TO USE THIS -->
+      <id>camunda-ee</id>
+      <name>camunda-ee</name>
+      <url>file:///home/john/onap/camunda-ee-repository</url>
+    </repository>
+  </repositories>
+  </profile>
+
+And add your profile to the list of active profiles:
+
+.. code-block:: bash
+
+  <activeProfiles>
+
+  <activeProfile>my-local-artifacts</activeProfile>
+
+  <activeProfile>openecomp-staging</activeProfile>
+
+  <activeProfile>openecomp-public</activeProfile>
+
+  <activeProfile>openecomp-release</activeProfile>
+
+  <activeProfile>openecomp-snapshots</activeProfile>
+
+  <activeProfile>opendaylight-release</activeProfile>
+
+  <activeProfile>opendaylight-snapshots</activeProfile>
+
+  </activeProfiles>
+
+Building
+--------
+
+Add these options to the mvn command line when you build "so"
+
+.. code-block:: bash
+
+  -Dcamunda.version=7.7.3-ee -Dcamunda.bpm.webapp.artifact=camunda-webapp-ee-jboss-standalone
+
+Installation
+-------------
+
+The cockpit is part of the SO image.  There are no special installation requirements.  When you log in, you will need to enter your license information.  Alternatively, you can insert your license directly into the camundabpmn database before you log in:
+
+.. code-block:: bash
+
+  INSERT INTO camundabpmn.ACT_GE_PROPERTY VALUES ('camunda-license-key','YOUR-LICENCE-KEY-HERE',1);
+
+Logging In
+-----------
+
+Because port 8080 on the docker host machine is forwarded to port 8080 in the SO docker container you can log into the Enterprise Edition cockpit by browsing to this URL:
+
+  http://*dockerhost*:8080/camunda
+
+  Where dockerhost is the docker host system.
+
+If you can use a browser on the docker host system, then use a localhost address:
+
+  http://localhost:8080/camunda
+
+The user is "admin" and the password is the same as the jboss admin password, which is not displayed here.
+
+.. image:: images/Camunda_Cockpit_Enterprise_1.png
diff --git a/docs/Camunda_Modeler.rst b/docs/Camunda_Modeler.rst
new file mode 100644
index 0000000..e2ff06d
--- /dev/null
+++ b/docs/Camunda_Modeler.rst
@@ -0,0 +1,19 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.

+.. http://creativecommons.org/licenses/by/4.0

+.. Copyright 2017 Huawei Technologies Co., Ltd.

+

+Camunda Modeler

+=================

+

+The Camunda_Modeler_ is the editor for BPMN 2.0 process flows.  It is a standalone application.  NOTE: the Camunda eclipse plugin is no longer supported and should not be used.

+

+.. _Camunda_Modeler: https://docs.camunda.org/manual/latest/modeler/camunda-modeler/

+

+.. image:: images/camunda_modeler_1.png

+

+Modeler Templates

+------------------

+

+Some work has already been done in MSO to develop templates_ for "building block" subprocess flows.  When a template is provided for a BPMN element, the modeler displays a custom form for inputting parameters.  This significantly simplifies flow construction and reduces the chance of making mistakes.

+

+.. _templates: https://docs.camunda.org/manual/7.7/modeler/camunda-modeler/element-templates/
\ No newline at end of file
diff --git a/docs/Configure_git_and_gerrit.rst b/docs/Configure_git_and_gerrit.rst
new file mode 100644
index 0000000..ccd0785
--- /dev/null
+++ b/docs/Configure_git_and_gerrit.rst
@@ -0,0 +1,92 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.

+.. http://creativecommons.org/licenses/by/4.0

+.. Copyright 2017 Huawei Technologies Co., Ltd.

+

+Configure git and gerrit

+========================

+

+Basics

+------

+The recommended version of git is 2.7.4 or later.  Check the installed version in the Ubuntu VM:

+

+.. code-block:: bash

+

+	git --version

+

+Create an SSH key to user with gerrit.  Use no passphrase.

+

+.. code-block:: bash

+

+	ssh-keygen -t rsa

+	

+Enter your SSH public key (id_rsa) into gerrit:

+	Browse to https://gerrit.onap.org

+	Log in

+	Open the menu next to your name (under the green search button)

+	

+.. image:: images/Configure_git_1.png

+

+	Select "Settings"

+	In the "Settings" sidebar, click "SSH Public Keys"`

+	Click "Add Key..."

+	Paste the entire contents of $HOME/.ssh/id_rsa.pub into the text area and click "Add".

+	

+.. image:: images/Configure_git_2.png

+

+Install the git-review package.

+

+.. code-block:: bash

+

+	sudo apt update

+	sudo apt install git-review

+	

+Create $HOME/.gitconfig (replace highlighted values with your own information):

+	[user]

+	

+        name = FirstName LastName

+		

+        email = you@yourcompany.com

+		

+	[core]

+	

+        autocrlf = false

+		

+	[merge]

+	

+        tool = vimdiff

+		

+	[gitreview]

+	

+        username = YourLinuxFoundationId

+		

+**If you're behind a corporate firewall and your proxy server has SOCKS support...**

+

+You may be able to use the SSH protocol with git, which is preferred versus HTTP.  This method is known to work in the AT&T corporate network.

+Install the socat package, which allows you to tunnel SSH connections through a proxy that supports SOCKS:

+

+.. code-block:: bash

+

+	sudo apt update

+	sudo apt install socat

+	

+Create (or append to) $HOME/.ssh/config (replace highlighted values with your information)

+

+	Host gerrit.onap.org

+	

+	User userid

+	

+	Hostname gerrit.onap.org

+	

+	ProxyCommand socat - PROXY:host:%h:%p,proxyport=port

+	

+	IdentityFile /home/userid/.ssh/id_rsa

+	

+	ServerAliveInterval 10

+

+Verify that you have connectivity to gerrit through the proxy.  Answer "yes" to continue connecting, if prompted.

+

+.. code-block:: bash

+

+	ssh -p 29418 gerrit.onap.org

+	

+.. image:: images/Configure_git_3.png
\ No newline at end of file
diff --git a/docs/Developer_Info.rst b/docs/Developer_Info.rst
new file mode 100644
index 0000000..d077323
--- /dev/null
+++ b/docs/Developer_Info.rst
@@ -0,0 +1,13 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.

+.. http://creativecommons.org/licenses/by/4.0

+.. Copyright 2017 Huawei Technologies Co., Ltd.

+

+Developer Information

+======================

+

+.. toctree::

+   :maxdepth: 1

+

+   Install_Configure_SO.rst

+   architecture.rst

+   offered_consumed_apis.rst
\ No newline at end of file
diff --git a/docs/Install_Configure_SO.rst b/docs/Install_Configure_SO.rst
index 5771a10..a1a9bf4 100644
--- a/docs/Install_Configure_SO.rst
+++ b/docs/Install_Configure_SO.rst
@@ -18,79 +18,147 @@
 Create a new VM in VirtualBox for Ubuntu

 ----------------------------------------

 Type: Linux

+

 Version: Ubuntu (64-bit)

+

 At least 2048 MB memory

+

 At least 40 GB VDI

+

 Network: Attached to: NAT

 

 Create a port-forwarding rule for SSH

 -------------------------------------

 Create a port-forwarding rule so that you can use PuTTY (or other SSH client) to connect to the VM.

+

 Go to "Network" settings in VirtualBox, add a port forwarding rule:

+

 Name: SSH

+

 Protocol: TCP

+

 Host IP: 127.0.0.1

+

 Host Port: 1022

+

 Guest IP: <leave blank>

+

 Guest Port: 22

 

+.. image:: images/Configure_ubuntu_SO_1.png

+

+.

+

+.. image:: images/Configure_ubuntu_SO_2.png

+

 Create Shared Folder

 --------------------

 This is oriented to Windows users.  If you're using a MAC or a Linux host computer, the details may be different.  You can share any folder on the host computer with the Ubuntu VM.  On Windows, a practical choice is to share the C:\Users folder, so that your Windows home directory will be accessible from the Ubuntu VM.

+

 Go to "Shared Folders" settings in VirtualBox, add a share:

+

 Folder Path: C:\Users

+

 Folder Name: Users

+

 Auto-mount: <checked>

+

 Read-only: <unchecked>

 

+.. image:: images/Configure_ubuntu_SO_3.png

+

+.

+

+.. image:: images/Configure_ubuntu_SO_4.png

+

 Install Ubuntu in the VM

 ------------------------

 On the "Storage" panel in VirtualBox, click on "[ optical drive ]" and then "Choose Disk Image".  Select your Ubuntu ISO image.

 

+.. image:: images/Configure_ubuntu_SO_5.png

+

 After selecting the ISO image, start the VM.

+

 Follow the prompts to install Ubuntu.

 

 Proxy Configuration (optional)

 ------------------------------

 If you're behind a corporate firewall, configure some proxy settings.  NOTE: your proxy configuration may require username and password credentials, not shown here.

 **Ubuntu system proxy setting:**

+

 	System Settings → Network → Network proxy

+	

 	(Replace "proxyhost" and port with your actual proxy information)

 

+.. image:: images/Configure_ubuntu_SO_6.png

+	

 **apt proxy setting:**

 	Edit /etc/apt/apt.conf and add one line at the top (replace "proxyhost:port" with your actual proxy information):

+	

 		Acquire::http::Proxy "http://proxyhost:port";

+		

 	Reboot the VM.

 	

 Install SSH Server

 ------------------

-sudo apt update

-sudo apt install openssh-server

+

+.. code-block:: bash

+

+    sudo apt update

+    sudo apt install openssh-server

 

 Connect to the VM from your host computer

 -----------------------------------------

 	The PuTTY SSH client is popular.  A connection to localhost:1022 (or whatever port you have forwarded) will go to the VM.

 

+.. image:: images/Configure_ubuntu_SO_7.png

+	

 Install VirtualBox Guest Additions

 ----------------------------------

 On the "Storage" panel in VirtualBox, click on "[ optical drive ]" and then "Choose Disk Image".  Select your VirtualBox Guest Additions ISO image.

 

+.. image:: images/Configure_ubuntu_SO_8.png

+

 In a VM terminal window, mount the cdrom:

+

+.. code-block:: bash

+

 	sudo mkdir -p /media/cdrom

 	sudo mount /dev/cdrom /media/cdrom

+	

 Install necessary dependencies:

-	sudo apt update

-	sudo apt install gcc g++ dkms

+

+.. code-block:: bash

+

+    sudo apt update

+    sudo apt install gcc g++ dkms

+	

 Install the guest additions.  NOTE: look for errors in the command output!  If you see an error that says you are missing kernel headers, the most likely cause is that you are using a VirtualBox version that is too old.  The error message is misleading.

+

+.. code-block:: bash

+

 	cd /media/cdrom

 	sudo ./VBoxLinuxAdditions.run

 

+.. image:: images/Configure_ubuntu_SO_9.png	

+	

 Add yourself to the vboxsf user group (replace "userid" with your user ID):

+	

+.. code-block:: bash	

+	

 	sudo usermod -a -G vboxsf userid

+	

 Reboot the VM.

+

 In a VM terminal window, verify that you can access your home directory on the host computer, which should be mounted under here:

 	/media/sf_Users

 	

 Further Reading

 ----------------------------------------	

-https://wiki.onap.org/display/DW/Development+Environment
\ No newline at end of file
+

+.. toctree::

+   :maxdepth: 1

+

+   Install_Docker.rst

+   Configure_git_and_gerrit.rst

+   Workspace_and_Development_Tools.rst
\ No newline at end of file
diff --git a/docs/Install_Docker.rst b/docs/Install_Docker.rst
new file mode 100644
index 0000000..5712691
--- /dev/null
+++ b/docs/Install_Docker.rst
@@ -0,0 +1,85 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.

+.. http://creativecommons.org/licenses/by/4.0

+.. Copyright 2017 Huawei Technologies Co., Ltd.

+

+Install Docker

+===============

+

+Make sure curl is installed on the Ubuntu VM:

+

+.. code-block:: bash

+

+	sudo apt update

+	sudo apt install curl

+

+If you are behind a corporate firewall (replace "proxyhost:port" with your actual proxy information)

+	https_proxy="https://*proxyhost:port*" curl -fsSL https://apt.dockerproject.org/gpg | sudo apt-key add -

+	

+Otherwise:

+	curl -fsSL https://apt.dockerproject.org/gpg | sudo apt-key add -

+Expected Response:

+	OK

+Add the docker package repository:

+	sudo apt-add-repository "deb https://apt.dockerproject.org/repo ubuntu-xenial main"

+	

+Install packages:

+

+.. code-block:: bash

+

+    sudo apt update

+    sudo apt-cache policy docker-engine

+	sudo apt install docker-engine

+	sudo apt install docker-compose

+	

+If you are behind a corporate firewall, you will need to configure proxy settings for docker so that images may be obtained from internet repositories.  In the commands shown here, replace *"proxyhost:port"*, *"yourdomain1.com"*, and *"yourdomain2.com"* with appropriate values.

+	

+    Make the docker configuration directory:

+

+.. code-block:: bash

+	

+        sudo mkdir -p /etc/systemd/system/docker.service.d

+	

+    Edit (create) this file:

+

+.. code-block:: bash

+	

+		sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf

+	

+    Add these lines:

+

+        [Service]

+        

+		Environment="HTTP_PROXY=https://*proxyhost:port*"

+        

+		Environment="HTTPS_PROXY=https://*proxyhost:port*"

+        

+		Environment="NO_PROXY=localhost,127.0.0.1,.yourdomain1.com,.yourdomain2.com"

+	

+    Restart docker:

+

+.. code-block:: bash

+	

+        sudo systemctl daemon-reload

+        sudo systemctl restart docker

+

+Add yourself to the docker user group (replace "userid" with your user ID):

+

+.. code-block:: bash

+

+    sudo usermod -a -G docker *userid*

+

+Log out and log back in so that the user group change will takeeffect.

+

+Verify that you can connect to docker as yourself (i.e. not as root):

+

+.. code-block:: bash

+

+    docker ps

+

+Verify that you can download and run the hello-world container

+

+.. code-block:: bash

+

+    docker run hello-world

+	

+.. image:: images/Docker_install_1.png
\ No newline at end of file
diff --git "a/docs/UUI-SO API Specification v0.1\0501\051.docx" "b/docs/UUI-SO API Specification v0.1\0501\051.docx"
deleted file mode 100644
index a6dfbd0..0000000
--- "a/docs/UUI-SO API Specification v0.1\0501\051.docx"
+++ /dev/null
Binary files differ
diff --git a/docs/architecture.rst b/docs/architecture.rst
index c9f6838..67cf67f 100644
--- a/docs/architecture.rst
+++ b/docs/architecture.rst
@@ -2,7 +2,7 @@
 .. http://creativecommons.org/licenses/by/4.0

 .. Copyright 2017 Huawei Technologies Co., Ltd.

 

-Service Orchestrator

+ONAP Service Orchestration - Architecture

 ========================================================

 

 SO Architecture

diff --git a/docs/developer_information.rst b/docs/developer_information.rst
new file mode 100644
index 0000000..739a1f2
--- /dev/null
+++ b/docs/developer_information.rst
@@ -0,0 +1,20 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.

+.. http://creativecommons.org/licenses/by/4.0

+.. Copyright 2017 Huawei Technologies Co., Ltd.

+

+SO Developer Information

+========================

+

+.. toctree::

+   :maxdepth: 1

+   

+   BPMN_Project_Structure.rst

+   Camunda_Modeler.rst

+   BPMN_Main_Process_Flows.rst

+   BPMN_Subprocess_Process_Flows.rst

+   BPMN_Project_Deployment_Strategy.rst

+   Building_SO.rst

+   Working_with_SO_Docker.rst

+   Camunda_Cockpit_Community_Edition.rst

+   Camunda_Cockpit_Enterprise_Edition.rst

+   
\ No newline at end of file
diff --git a/docs/images/BPMN_Main_Process_Flows_1.png b/docs/images/BPMN_Main_Process_Flows_1.png
new file mode 100644
index 0000000..57337d6
--- /dev/null
+++ b/docs/images/BPMN_Main_Process_Flows_1.png
Binary files differ
diff --git a/docs/images/BPMN_Subprocess_process_flows_1.png b/docs/images/BPMN_Subprocess_process_flows_1.png
new file mode 100644
index 0000000..5ec7e7c
--- /dev/null
+++ b/docs/images/BPMN_Subprocess_process_flows_1.png
Binary files differ
diff --git a/docs/images/Camunda_Cockpit_1.png b/docs/images/Camunda_Cockpit_1.png
new file mode 100644
index 0000000..cdcc6f3
--- /dev/null
+++ b/docs/images/Camunda_Cockpit_1.png
Binary files differ
diff --git a/docs/images/Camunda_Cockpit_2.png b/docs/images/Camunda_Cockpit_2.png
new file mode 100644
index 0000000..a696a68
--- /dev/null
+++ b/docs/images/Camunda_Cockpit_2.png
Binary files differ
diff --git a/docs/images/Camunda_Cockpit_3.png b/docs/images/Camunda_Cockpit_3.png
new file mode 100644
index 0000000..a298fe0
--- /dev/null
+++ b/docs/images/Camunda_Cockpit_3.png
Binary files differ
diff --git a/docs/images/Camunda_Cockpit_4.png b/docs/images/Camunda_Cockpit_4.png
new file mode 100644
index 0000000..ff445f3
--- /dev/null
+++ b/docs/images/Camunda_Cockpit_4.png
Binary files differ
diff --git a/docs/images/Camunda_Cockpit_Enterprise_1.png b/docs/images/Camunda_Cockpit_Enterprise_1.png
new file mode 100644
index 0000000..cdcc6f3
--- /dev/null
+++ b/docs/images/Camunda_Cockpit_Enterprise_1.png
Binary files differ
diff --git a/docs/images/Configure_git_1.png b/docs/images/Configure_git_1.png
new file mode 100644
index 0000000..2d4ce85
--- /dev/null
+++ b/docs/images/Configure_git_1.png
Binary files differ
diff --git a/docs/images/Configure_git_2.png b/docs/images/Configure_git_2.png
new file mode 100644
index 0000000..44ceeff
--- /dev/null
+++ b/docs/images/Configure_git_2.png
Binary files differ
diff --git a/docs/images/Configure_git_3.png b/docs/images/Configure_git_3.png
new file mode 100644
index 0000000..f44a0b4
--- /dev/null
+++ b/docs/images/Configure_git_3.png
Binary files differ
diff --git a/docs/images/Configure_ubuntu_SO_1.png b/docs/images/Configure_ubuntu_SO_1.png
new file mode 100644
index 0000000..a5a8301
--- /dev/null
+++ b/docs/images/Configure_ubuntu_SO_1.png
Binary files differ
diff --git a/docs/images/Configure_ubuntu_SO_2.png b/docs/images/Configure_ubuntu_SO_2.png
new file mode 100644
index 0000000..d3b215f
--- /dev/null
+++ b/docs/images/Configure_ubuntu_SO_2.png
Binary files differ
diff --git a/docs/images/Configure_ubuntu_SO_3.png b/docs/images/Configure_ubuntu_SO_3.png
new file mode 100644
index 0000000..ef4f21b
--- /dev/null
+++ b/docs/images/Configure_ubuntu_SO_3.png
Binary files differ
diff --git a/docs/images/Configure_ubuntu_SO_4.png b/docs/images/Configure_ubuntu_SO_4.png
new file mode 100644
index 0000000..f857eff
--- /dev/null
+++ b/docs/images/Configure_ubuntu_SO_4.png
Binary files differ
diff --git a/docs/images/Configure_ubuntu_SO_5.png b/docs/images/Configure_ubuntu_SO_5.png
new file mode 100644
index 0000000..01d2016
--- /dev/null
+++ b/docs/images/Configure_ubuntu_SO_5.png
Binary files differ
diff --git a/docs/images/Configure_ubuntu_SO_6.png b/docs/images/Configure_ubuntu_SO_6.png
new file mode 100644
index 0000000..17b9986
--- /dev/null
+++ b/docs/images/Configure_ubuntu_SO_6.png
Binary files differ
diff --git a/docs/images/Configure_ubuntu_SO_7.png b/docs/images/Configure_ubuntu_SO_7.png
new file mode 100644
index 0000000..d233847
--- /dev/null
+++ b/docs/images/Configure_ubuntu_SO_7.png
Binary files differ
diff --git a/docs/images/Configure_ubuntu_SO_8.png b/docs/images/Configure_ubuntu_SO_8.png
new file mode 100644
index 0000000..01d2016
--- /dev/null
+++ b/docs/images/Configure_ubuntu_SO_8.png
Binary files differ
diff --git a/docs/images/Configure_ubuntu_SO_9.png b/docs/images/Configure_ubuntu_SO_9.png
new file mode 100644
index 0000000..2cc96b3
--- /dev/null
+++ b/docs/images/Configure_ubuntu_SO_9.png
Binary files differ
diff --git a/docs/images/Docker_install_1.png b/docs/images/Docker_install_1.png
new file mode 100644
index 0000000..1e9c177
--- /dev/null
+++ b/docs/images/Docker_install_1.png
Binary files differ
diff --git a/docs/images/SO_R1_1.png b/docs/images/SO_R1_1.png
new file mode 100644
index 0000000..7bf98fc
--- /dev/null
+++ b/docs/images/SO_R1_1.png
Binary files differ
diff --git a/docs/images/Workspace_and_Development_Tools.png b/docs/images/Workspace_and_Development_Tools.png
new file mode 100644
index 0000000..46f8fe4
--- /dev/null
+++ b/docs/images/Workspace_and_Development_Tools.png
Binary files differ
diff --git a/docs/images/Workspace_and_Development_Tools_2.png b/docs/images/Workspace_and_Development_Tools_2.png
new file mode 100644
index 0000000..1f3fff0
--- /dev/null
+++ b/docs/images/Workspace_and_Development_Tools_2.png
Binary files differ
diff --git a/docs/images/Workspace_and_Development_Tools_3.png b/docs/images/Workspace_and_Development_Tools_3.png
new file mode 100644
index 0000000..3d2f35d
--- /dev/null
+++ b/docs/images/Workspace_and_Development_Tools_3.png
Binary files differ
diff --git a/docs/images/Workspace_and_Development_Tools_4.png b/docs/images/Workspace_and_Development_Tools_4.png
new file mode 100644
index 0000000..31a424e
--- /dev/null
+++ b/docs/images/Workspace_and_Development_Tools_4.png
Binary files differ
diff --git a/docs/images/bpmn_project_structure_1.png b/docs/images/bpmn_project_structure_1.png
new file mode 100644
index 0000000..d94b6fb
--- /dev/null
+++ b/docs/images/bpmn_project_structure_1.png
Binary files differ
diff --git a/docs/images/bpmn_project_structure_2.png b/docs/images/bpmn_project_structure_2.png
new file mode 100644
index 0000000..15f6360
--- /dev/null
+++ b/docs/images/bpmn_project_structure_2.png
Binary files differ
diff --git a/docs/images/bpmn_project_structure_3.png b/docs/images/bpmn_project_structure_3.png
new file mode 100644
index 0000000..e9f0d8d
--- /dev/null
+++ b/docs/images/bpmn_project_structure_3.png
Binary files differ
diff --git a/docs/images/bpmn_project_structure_4.png b/docs/images/bpmn_project_structure_4.png
new file mode 100644
index 0000000..c5cbb8b
--- /dev/null
+++ b/docs/images/bpmn_project_structure_4.png
Binary files differ
diff --git a/docs/images/bpmn_project_structure_5.png b/docs/images/bpmn_project_structure_5.png
new file mode 100644
index 0000000..3c3e906
--- /dev/null
+++ b/docs/images/bpmn_project_structure_5.png
Binary files differ
diff --git a/docs/images/camunda_modeler_1.png b/docs/images/camunda_modeler_1.png
new file mode 100644
index 0000000..2316c98
--- /dev/null
+++ b/docs/images/camunda_modeler_1.png
Binary files differ