import org.onap.so.bpmn.common.scripts.ExceptionUtil
 import org.onap.so.bpmn.common.scripts.MsoUtils
 import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
+import org.onap.so.bpmn.core.domain.ModelInfo
 import org.onap.so.bpmn.core.domain.ResourceType
 import org.onap.so.bpmn.core.json.JsonUtils
 import org.onap.so.bpmn.core.UrnPropertiesReader
             }
 
             String sdnc_svcAction = "activate"
-            String sdnc_requestAction = UrnPropertiesReader.getVariable("resource-config." + resourceInputObj.resourceModelInfo.getModelName() +".operation-type")
-            String isActivateRequired = UrnPropertiesReader.getVariable("resource-config." + resourceInputObj.resourceModelInfo.getModelName() +".activation-required")
-            execution.setVariable("isActivateRequired", isActivateRequired)
+            String sdnc_requestAction = sdnc_svcAction.capitalize() + UrnPropertiesReader.getVariable("resource-config." + resourceInputObj.resourceModelInfo.getModelName() +".operation-type") + "Instance"
 
             execution.setVariable(Prefix + "svcAction", sdnc_svcAction)
             execution.setVariable(Prefix + "requestAction", sdnc_requestAction)
             String source = execution.getVariable("source")
             String sdnc_service_id = execution.getVariable(Prefix + "sdncServiceId")
             ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(execution.getVariable(Prefix + "resourceInput"), ResourceInput.class)
-            String networkInstanceId = execution.getVariable("networkInstanceId")
+            String resourceInstanceId = execution.getVariable("resourceInstanceId")
             String serviceType = resourceInputObj.getServiceType()
             String serviceModelInvariantUuid = resourceInputObj.getServiceModelInfo().getModelInvariantUuid()
             String serviceModelUuid = resourceInputObj.getServiceModelInfo().getModelUuid()
             // 1. prepare assign topology via SDNC Adapter SUBFLOW call
             String sdncTopologyActivateRequest = ""
             String modelType = resourceInputObj.getResourceModelInfo().getModelType()
+
+            //When a new resource creation request reaches SO, the parent resources information needs to be provided
+            //while creating the child resource.
+            String vnfid = ""
+            String vnfmodelInvariantUuid = ""
+            String vnfmodelCustomizationUuid = ""
+            String vnfmodelUuid = ""
+            String vnfmodelVersion = ""
+            String vnfmodelName = ""
+            if(modelType.equalsIgnoreCase(ResourceType.GROUP.toString())) {
+                vnfid = resourceInputObj.getVnfId()
+                ModelInfo vfModelInfo = resourceInputObj.getVfModelInfo()
+                vnfmodelInvariantUuid = vfModelInfo.getModelInvariantUuid()
+                vnfmodelCustomizationUuid = vfModelInfo.getModelCustomizationUuid()
+                vnfmodelUuid = vfModelInfo.getModelUuid()
+                vnfmodelVersion = vfModelInfo.getModelVersion()
+                vnfmodelName = vfModelInfo.getModelName()
+            }
+
             switch (modelType) {
                 case "VNF" :
                     sdncTopologyActivateRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
                                         <subscriber-name>${msoUtils.xmlEscape(globalCustomerId)}</subscriber-name>
                                      </service-information>
                                      <vnf-information>
-                                        <vnf-id>${msoUtils.xmlEscape(networkInstanceId)}</vnf-id>
+                                        <vnf-id>${msoUtils.xmlEscape(resourceInstanceId)}</vnf-id>
                                         <vnf-type></vnf-type>
                                         <onap-model-information>
                                              <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
                     break
 
                 case "GROUP" :
-                    sdncTopologyActivateRequest =
-                            """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
-                                                              xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1" 
+                    sdncTopologyActivateRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
+                                                              xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
                                                               xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
                                  <sdncadapter:RequestHeader>
                                     <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
                                     <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
                                     <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
-                                    <sdncadapter:SvcOperation>connection-attachment-topology-operation</sdncadapter:SvcOperation>
+                                    <sdncadapter:SvcOperation>vf-module-topology-operation</sdncadapter:SvcOperation>
                                     <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
                                     <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
                                  </sdncadapter:RequestHeader>
                                         </onap-model-information>
                                         <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
                                         <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
+                                        <subscriber-name>${msoUtils.xmlEscape(globalCustomerId)}</subscriber-name>
                                      </service-information>
-                                     <allotted-resource-information>
-                                        <!-- TODO: to be filled as per the request input -->
-                                        <allotted-resource-id>${msoUtils.xmlEscape(networkInstanceId)}</allotted-resource-id>
-                                        <allotted-resource-type></allotted-resource-type>
-                                        <parent-service-instance-id>$parentServiceInstanceId</parent-service-instance-id>
+                                     <vnf-information>
                                         <onap-model-information>
-                                             <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
+                                             <model-invariant-uuid>${msoUtils.xmlEscape(vnfmodelInvariantUuid)}</model-invariant-uuid>
+                                             <model-customization-uuid>${msoUtils.xmlEscape(vnfmodelCustomizationUuid)}</model-customization-uuid>
+                                             <model-uuid>${msoUtils.xmlEscape(vnfmodelUuid)}</model-uuid>
+                                             <model-version>${msoUtils.xmlEscape(vnfmodelVersion)}</model-version>
+                                             <model-name>${msoUtils.xmlEscape(vnfmodelName)}</model-name>
+                                        </onap-model-information>
+                                        <vnf-id>${msoUtils.xmlEscape(vnfid)}</vnf-id>
+                                     </vnf-information>
+                                     <vf-module-information>
+                                        <from-preload>false</from-preload>
+                                        <onap-model-information>
+                                            <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
                                              <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
                                              <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
                                              <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
                                              <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
                                         </onap-model-information>
-                                     </allotted-resource-information>
-                                     <connection-attachment-request-input>
-                                       $netowrkInputParameters
-                                     </connection-attachment-request-input>
+                                     </vf-module-information>
+                                     <vf-module-request-input>
+                                         <vf-module-input-parameters>
+                                           $netowrkInputParameters
+                                         </vf-module-input-parameters>
+                                      </vf-module-request-input>
                                 </sdncadapterworkflow:SDNCRequestData>
                              </aetgt:SDNCAdapterWorkflowRequest>""".trim()
                     break
                                      </service-information>
                                      <network-information>
                                         <!-- TODO: to be filled by response from create -->
-                                        <network-id>${msoUtils.xmlEscape(networkInstanceId)}</network-id>
+                                        <network-id>${msoUtils.xmlEscape(resourceInstanceId)}</network-id>
                                         <onap-model-information>
                                              <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
                                              <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
 
             }
 
             String sdnc_svcAction = "create"
-            String sdnc_requestAction = UrnPropertiesReader.getVariable("resource-config." + resourceInputObj.resourceModelInfo.getModelName() +".operation-type")
+            String sdnc_requestAction = sdnc_svcAction.capitalize() + UrnPropertiesReader.getVariable("resource-config." + resourceInputObj.resourceModelInfo.getModelName() +".operation-type") + "Instance"
             String isActivateRequired = UrnPropertiesReader.getVariable("resource-config." + resourceInputObj.resourceModelInfo.getModelName() +".activation-required")
             execution.setVariable("isActivateRequired", isActivateRequired)
 
             String vnfmodelName = ""
             String modelType = resourceInputObj.getResourceModelInfo().getModelType()
             if(modelType.equalsIgnoreCase(ResourceType.GROUP.toString())) {
-                vnfid = resourceInputObj.getVnfId();
+                vnfid = resourceInputObj.getVnfId()
                 ModelInfo vfModelInfo = resourceInputObj.getVfModelInfo()
                 vnfmodelInvariantUuid = vfModelInfo.getModelInvariantUuid()
                 vnfmodelCustomizationUuid = vfModelInfo.getModelCustomizationUuid()
                                     <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
                                     <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
                                     <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
-                                    <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>
+                                    <sdncadapter:SvcOperation>vf-module-topology-operation</sdncadapter:SvcOperation>
                                     <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
                                     <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
                                  </sdncadapter:RequestHeader>
                                         <subscriber-name>${msoUtils.xmlEscape(globalCustomerId)}</subscriber-name>
                                      </service-information>
                                      <vnf-information>
+                                        <onap-model-information>
                                              <model-invariant-uuid>${msoUtils.xmlEscape(vnfmodelInvariantUuid)}</model-invariant-uuid>
                                              <model-customization-uuid>${msoUtils.xmlEscape(vnfmodelCustomizationUuid)}</model-customization-uuid>
                                              <model-uuid>${msoUtils.xmlEscape(vnfmodelUuid)}</model-uuid>
                                              <model-version>${msoUtils.xmlEscape(vnfmodelVersion)}</model-version>
                                              <model-name>${msoUtils.xmlEscape(vnfmodelName)}</model-name>
+                                        </onap-model-information>
+                                        <vnf-id>${msoUtils.xmlEscape(vnfid)}</vnf-id>
                                      </vnf-information>
-                                     <vnf-request-input>
-                                         <vnf-input-parameters>
+                                     <vf-module-information>
+                                        <from-preload>false</from-preload>
+                                        <onap-model-information>
+                                            <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
+                                             <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
+                                             <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
+                                             <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
+                                             <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
+                                        </onap-model-information>
+                                     </vf-module-information>
+                                     <vf-module-request-input>
+                                         <vf-module-input-parameters>
                                            $netowrkInputParameters
-                                         </vnf-input-parameters>
-                                         <request-version></request-version>
-                                         <vnf-name></vnf-name>
-                                         <vnf-networks>
-                                        </vnf-networks>
-                                      </vnf-request-input>
-                                     <connection-attachment-request-input>
-                                       $netowrkInputParameters
-                                     </connection-attachment-request-input>
+                                         </vf-module-input-parameters>
+                                      </vf-module-request-input>
                                 </sdncadapterworkflow:SDNCRequestData>
                              </aetgt:SDNCAdapterWorkflowRequest>""".trim()
                     break