Merge "Changed sdncRequestId to SDNCA_requestId"
[so.git] / bpmn / MSOCommonBPMN / src / main / java / org / onap / so / bpmn / servicedecomposition / tasks / BBInputSetup.java
index aa68114..9260580 100644 (file)
@@ -49,6 +49,7 @@ import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceSubscription;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup;
+import org.onap.so.bpmn.servicedecomposition.entities.ConfigurationResourceKeys;
 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
 import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
@@ -65,11 +66,13 @@ import org.onap.so.db.catalog.beans.CollectionNetworkResourceCustomization;
 import org.onap.so.db.catalog.beans.CollectionResource;
 import org.onap.so.db.catalog.beans.CollectionResourceCustomization;
 import org.onap.so.db.catalog.beans.ConfigurationResourceCustomization;
+import org.onap.so.db.catalog.beans.NetworkCollectionResourceCustomization;
 import org.onap.so.db.catalog.beans.NetworkResourceCustomization;
 import org.onap.so.db.catalog.beans.OrchestrationStatus;
 import org.onap.so.db.catalog.beans.Service;
 import org.onap.so.db.catalog.beans.VfModuleCustomization;
 import org.onap.so.db.catalog.beans.VnfResourceCustomization;
+import org.onap.so.db.catalog.beans.VnfVfmoduleCvnfcConfigurationCustomization;
 import org.onap.so.db.catalog.beans.VnfcInstanceGroupCustomization;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.logger.MsoLogger;
@@ -87,6 +90,7 @@ import org.onap.so.serviceinstancebeans.Vnfs;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
 
@@ -98,7 +102,6 @@ public class BBInputSetup implements JavaDelegate {
        private static final String LOOKUP_KEY_MAP_VAR_NAME = "lookupKeyMap";
        private static final String GBB_INPUT_VAR_NAME = "gBBInput";
        private static final String EXECUTE_BB_VAR_NAME = "buildingBlock";
-       private static final String CLOUD_OWNER = "att-aic";
        private static final String VOLUME_GROUP = "VolumeGroup";
        private static final String VF_MODULE = "VfModule";
        private static final String NETWORK = "Network";
@@ -110,6 +113,9 @@ public class BBInputSetup implements JavaDelegate {
 
        @Autowired
        private BBInputSetupMapperLayer mapperLayer;
+       
+       @Autowired
+       private CloudInfoFromAAI cloudInfoFromAAI;
 
        @Autowired
        private ExceptionBuilder exceptionUtil;
@@ -119,6 +125,10 @@ public class BBInputSetup implements JavaDelegate {
        public BBInputSetupUtils getBbInputSetupUtils() {
                return bbInputSetupUtils;
        }
+       
+       public void setCloudInfoFromAAI(CloudInfoFromAAI cloudInfoFromAAI) {
+               this.cloudInfoFromAAI = cloudInfoFromAAI;
+       }
 
        public void setBbInputSetupUtils(BBInputSetupUtils bbInputSetupUtils) {
                this.bbInputSetupUtils = bbInputSetupUtils;
@@ -140,8 +150,8 @@ public class BBInputSetup implements JavaDelegate {
                        String resourceId = executeBB.getResourceId();
                        String requestAction = executeBB.getRequestAction();
                        String vnfType = executeBB.getVnfType();
-                       boolean aLaCarte = executeBB.isaLaCarte();
-                       boolean homing = executeBB.isHoming();
+                       boolean aLaCarte = Boolean.TRUE.equals(executeBB.isaLaCarte());
+                       boolean homing = Boolean.TRUE.equals(executeBB.isHoming());
                        Map<ResourceKey, String> lookupKeyMap = new HashMap<>();
                        outputBB = this.getGBB(executeBB, lookupKeyMap, requestAction, aLaCarte, resourceId, vnfType);
                        ObjectMapper mapper = new ObjectMapper();
@@ -187,14 +197,19 @@ public class BBInputSetup implements JavaDelegate {
                if(requestDetails == null) {
                        requestDetails = bbInputSetupUtils.getRequestDetails(requestId);
                }
-               ModelType modelType = requestDetails.getModelInfo().getModelType();
-               if (aLaCarte && modelType.equals(ModelType.service)) {
-                       return this.getGBBALaCarteService(executeBB, requestDetails, lookupKeyMap, requestAction, resourceId);
-               } else if (aLaCarte && !modelType.equals(ModelType.service)) {
-                       return this.getGBBALaCarteNonService(executeBB, requestDetails, lookupKeyMap, requestAction, resourceId,
-                                       vnfType);
-               } else {
-                       return this.getGBBMacro(executeBB, requestDetails, lookupKeyMap, requestAction, resourceId, vnfType);
+               if (requestDetails.getModelInfo() == null) {
+                       return this.getGBBCM(executeBB, requestDetails, lookupKeyMap, requestAction, resourceId);
+               }
+               else {
+                       ModelType modelType = requestDetails.getModelInfo().getModelType();
+                       if (aLaCarte && modelType.equals(ModelType.service)) {
+                               return this.getGBBALaCarteService(executeBB, requestDetails, lookupKeyMap, requestAction, resourceId);
+                       } else if (aLaCarte && !modelType.equals(ModelType.service)) {
+                               return this.getGBBALaCarteNonService(executeBB, requestDetails, lookupKeyMap, requestAction, resourceId,
+                                               vnfType);
+                       } else {
+                               return this.getGBBMacro(executeBB, requestDetails, lookupKeyMap, requestAction, resourceId, vnfType);
+                       }
                }
        }
 
@@ -233,6 +248,25 @@ public class BBInputSetup implements JavaDelegate {
                        throw new Exception("Could not find relevant information for related Service Instance");
                }
        }
+       
+       protected GeneralBuildingBlock getGBBCM(ExecuteBuildingBlock executeBB,
+                       RequestDetails requestDetails, Map<ResourceKey, String> lookupKeyMap, String requestAction,
+                       String resourceId) throws Exception {           
+               ServiceInstance serviceInstance = new ServiceInstance();
+               String serviceInstanceId = lookupKeyMap.get(ResourceKey.SERVICE_INSTANCE_ID);
+               serviceInstance.setServiceInstanceId(serviceInstanceId);
+               
+               List<GenericVnf> genericVnfs = serviceInstance.getVnfs();
+               
+               String vnfId = lookupKeyMap.get(ResourceKey.GENERIC_VNF_ID);
+               org.onap.aai.domain.yang.GenericVnf aaiGenericVnf = bbInputSetupUtils.getAAIGenericVnf(vnfId);
+               
+               GenericVnf genericVnf = this.mapperLayer.mapAAIGenericVnfIntoGenericVnf(aaiGenericVnf);
+               genericVnfs.add(genericVnf);            
+               
+               return this.populateGBBWithSIAndAdditionalInfo(requestDetails, serviceInstance, executeBB, requestAction, new Customer());
+               
+       }
 
        protected void populateObjectsOnAssignAndCreateFlows(RequestDetails requestDetails, Service service, String bbName,
                        ServiceInstance serviceInstance, Map<ResourceKey, String> lookupKeyMap, String resourceId, String vnfType)
@@ -246,14 +280,18 @@ public class BBInputSetup implements JavaDelegate {
                org.onap.so.serviceinstancebeans.LineOfBusiness lineOfBusiness = requestDetails.getLineOfBusiness();
 
                if (modelType.equals(ModelType.network)) {
+                       lookupKeyMap.put(ResourceKey.NETWORK_ID, resourceId);
                        this.populateL3Network(instanceName, modelInfo, service, bbName, serviceInstance, lookupKeyMap, resourceId, null);
                } else if (modelType.equals(ModelType.vnf)) {
+                       lookupKeyMap.put(ResourceKey.GENERIC_VNF_ID, resourceId);
                        this.populateGenericVnf(modelInfo, instanceName, platform, lineOfBusiness, service, bbName, serviceInstance,
                                        lookupKeyMap, relatedInstanceList, resourceId, vnfType, null);
                } else if (modelType.equals(ModelType.volumeGroup)) {
+                       lookupKeyMap.put(ResourceKey.VOLUME_GROUP_ID, resourceId);
                        this.populateVolumeGroup(modelInfo, service, bbName, serviceInstance, lookupKeyMap, resourceId,
                                        relatedInstanceList, instanceName, vnfType, null);
                } else if (modelType.equals(ModelType.vfModule)) {
+                       lookupKeyMap.put(ResourceKey.VF_MODULE_ID, resourceId);
                        this.populateVfModule(modelInfo, service, bbName, serviceInstance, lookupKeyMap, resourceId,
                                        relatedInstanceList, instanceName, null, requestDetails.getCloudConfiguration());
                } else {
@@ -262,32 +300,24 @@ public class BBInputSetup implements JavaDelegate {
        }
 
        protected void populateConfiguration(ModelInfo modelInfo, Service service, String bbName,
-                       ServiceInstance serviceInstance, Map<ResourceKey, String> lookupKeyMap, String resourceId, String instanceName) {
-               boolean foundByName = false;
-               boolean foundById = false;
-               for (Configuration configuration : serviceInstance.getConfigurations()) {
+                       ServiceInstance serviceInstance, Map<ResourceKey, String> lookupKeyMap, String resourceId, String instanceName, ConfigurationResourceKeys configurationResourceKeys) {
+               Configuration configuration = null;
+               for (Configuration configurationTemp : serviceInstance.getConfigurations()) {
                        if (lookupKeyMap.get(ResourceKey.CONFIGURATION_ID) != null
-                                       && configuration.getConfigurationId().equalsIgnoreCase(lookupKeyMap.get(ResourceKey.CONFIGURATION_ID))) {
-                               foundById = true;
-                               org.onap.aai.domain.yang.Configuration aaiConfiguration = bbInputSetupUtils.getAAIConfiguration(configuration.getConfigurationId());
-                               if(aaiConfiguration!=null){
-                                       modelInfo.setModelCustomizationUuid(aaiConfiguration.getModelCustomizationId());
-                               }
-                               this.mapCatalogConfiguration(configuration, modelInfo, service);
-                       } else if (instanceName != null && configuration.getConfigurationName().equalsIgnoreCase(instanceName)) {
-                               foundByName = true;
-                               lookupKeyMap.put(ResourceKey.CONFIGURATION_ID, configuration.getConfigurationId());
+                                       && configurationTemp.getConfigurationId().equalsIgnoreCase(lookupKeyMap.get(ResourceKey.CONFIGURATION_ID))) {
+                               configuration = configurationTemp;
                                org.onap.aai.domain.yang.Configuration aaiConfiguration = bbInputSetupUtils.getAAIConfiguration(configuration.getConfigurationId());
                                if(aaiConfiguration!=null){
                                        modelInfo.setModelCustomizationUuid(aaiConfiguration.getModelCustomizationId());
                                }
-                               this.mapCatalogConfiguration(configuration, modelInfo, service);
                        }
                }
-               if (!foundByName && !foundById && bbName.equalsIgnoreCase(AssignFlows.FABRIC_CONFIGURATION.toString())) {
-                       Configuration configuration = this.createConfiguration(lookupKeyMap, instanceName, resourceId);
+               if (configuration == null && bbName.equalsIgnoreCase(AssignFlows.FABRIC_CONFIGURATION.toString())) {
+                       configuration = this.createConfiguration(lookupKeyMap, instanceName, resourceId);
                        serviceInstance.getConfigurations().add(configuration);
-                       this.mapCatalogConfiguration(configuration, modelInfo, service);
+               }
+               if(configuration != null) {
+                       this.mapCatalogConfiguration(configuration, modelInfo, service, configurationResourceKeys);
                }
        }
 
@@ -301,13 +331,32 @@ public class BBInputSetup implements JavaDelegate {
                return configuration;
        }
 
-       protected void mapCatalogConfiguration(Configuration configuration, ModelInfo modelInfo, Service service) {
+       protected void mapCatalogConfiguration(Configuration configuration, ModelInfo modelInfo, Service service, ConfigurationResourceKeys configurationResourceKeys) {
                ConfigurationResourceCustomization configurationResourceCustomization = findConfigurationResourceCustomization(modelInfo, service);
-               if (configurationResourceCustomization != null) {
-                       configuration.setModelInfoConfiguration(this.mapperLayer.mapCatalogConfigurationToConfiguration(configurationResourceCustomization));
+               VnfVfmoduleCvnfcConfigurationCustomization vnfVfmoduleCvnfcConfigurationCustomization = 
+                               findVnfVfmoduleCvnfcConfigurationCustomization(configurationResourceKeys.getVfModuleCustomizationUUID(),
+                                               configurationResourceKeys.getVnfResourceCustomizationUUID(), configurationResourceKeys.getCvnfcCustomizationUUID(), configurationResourceCustomization);
+               if (configurationResourceCustomization != null && vnfVfmoduleCvnfcConfigurationCustomization != null) {
+                       configuration.setModelInfoConfiguration(this.mapperLayer.mapCatalogConfigurationToConfiguration(configurationResourceCustomization
+                                       , vnfVfmoduleCvnfcConfigurationCustomization));
                }
        }
 
+       protected VnfVfmoduleCvnfcConfigurationCustomization findVnfVfmoduleCvnfcConfigurationCustomization(String vfModuleCustomizationUUID, 
+                       String vnfResourceCustomizationUUID, String cvnfcCustomizationUUID, ConfigurationResourceCustomization configurationResourceCustomization) {
+
+               if(configurationResourceCustomization.getConfigurationResource() != null)
+                       for(VnfVfmoduleCvnfcConfigurationCustomization vnfVfmoduleCvnfcConfigurationCustomization : 
+                               configurationResourceCustomization.getConfigurationResource().getVnfVfmoduleCvnfcConfigurationCustomization()) {
+                               if(vnfVfmoduleCvnfcConfigurationCustomization.getVfModuleCustomization().getModelCustomizationUUID().equalsIgnoreCase(vfModuleCustomizationUUID)
+                                               && vnfVfmoduleCvnfcConfigurationCustomization.getVnfResourceCustomization().getModelCustomizationUUID().equalsIgnoreCase(vnfResourceCustomizationUUID)
+                                               && vnfVfmoduleCvnfcConfigurationCustomization.getCvnfcCustomization().getModelCustomizationUUID().equalsIgnoreCase(cvnfcCustomizationUUID)) {
+                                       return vnfVfmoduleCvnfcConfigurationCustomization;
+                               }
+                       }
+               return null;
+       }
+
        protected ConfigurationResourceCustomization findConfigurationResourceCustomization(ModelInfo modelInfo, Service service) {
                for (ConfigurationResourceCustomization resourceCust : service.getConfigurationCustomizations()) {
                        if (resourceCust.getModelCustomizationUUID().equalsIgnoreCase(modelInfo.getModelCustomizationUuid())) {
@@ -320,8 +369,6 @@ public class BBInputSetup implements JavaDelegate {
        protected void populateVfModule(ModelInfo modelInfo, Service service, String bbName,
                        ServiceInstance serviceInstance, Map<ResourceKey, String> lookupKeyMap, String resourceId,
                        RelatedInstanceList[] relatedInstanceList, String instanceName, List<Map<String, String>> instanceParams, CloudConfiguration cloudConfiguration) throws Exception {
-               boolean foundByName = false;
-               boolean foundById = false;
                String vnfModelCustomizationUUID = null;
                if (relatedInstanceList != null) {
                        for (RelatedInstanceList relatedInstList : relatedInstanceList) {
@@ -343,40 +390,53 @@ public class BBInputSetup implements JavaDelegate {
                                ModelInfo vnfModelInfo = new ModelInfo();
                                vnfModelInfo.setModelCustomizationUuid(vnfModelCustomizationUUID);
                                this.mapCatalogVnf(tempVnf, vnfModelInfo, service);
-                               for(VolumeGroup volumeGroup : tempVnf.getVolumeGroups()) {
-                                       String volumeGroupCustId = 
-                                                       this.bbInputSetupUtils.getAAIVolumeGroup(CLOUD_OWNER, 
-                                                                       cloudConfiguration.getLcpCloudRegionId(), volumeGroup.getVolumeGroupId()).getModelCustomizationId();
-                                       if(modelInfo.getModelCustomizationId().equalsIgnoreCase(volumeGroupCustId)) {
-                                               lookupKeyMap.put(ResourceKey.VOLUME_GROUP_ID, volumeGroup.getVolumeGroupId());
-                                       }
+                               Optional<String> volumeGroupIdOp = getVolumeGroupIdRelatedToVfModule(tempVnf, modelInfo, cloudConfiguration.getCloudOwner(), 
+                                               cloudConfiguration.getLcpCloudRegionId(), lookupKeyMap);
+                               if(volumeGroupIdOp.isPresent()) {
+                                       lookupKeyMap.put(ResourceKey.VOLUME_GROUP_ID, volumeGroupIdOp.get());
                                }
                                break;
                        }
                }
                if (vnf != null) {
-                       for (VfModule vfModule : vnf.getVfModules()) {
+                       VfModule vfModule = null;
+                       for (VfModule vfModuleTemp : vnf.getVfModules()) {
                                if (lookupKeyMap.get(ResourceKey.VF_MODULE_ID) != null
-                                               && vfModule.getVfModuleId().equalsIgnoreCase(lookupKeyMap.get(ResourceKey.VF_MODULE_ID))) {
-                                       foundById = true;
-                                       this.mapCatalogVfModule(vfModule, modelInfo, service, vnfModelCustomizationUUID);
-                               } else if (instanceName != null && vfModule.getVfModuleName().equalsIgnoreCase(instanceName)) {
-                                       foundByName = true;
-                                       lookupKeyMap.put(ResourceKey.VF_MODULE_ID, vfModule.getVfModuleId());
-                                       this.mapCatalogVfModule(vfModule, modelInfo, service, vnfModelCustomizationUUID);
+                                               && vfModuleTemp.getVfModuleId().equalsIgnoreCase(lookupKeyMap.get(ResourceKey.VF_MODULE_ID))) {
+                                       vfModule = vfModuleTemp;
+                                       String vfModuleCustId = bbInputSetupUtils.getAAIVfModule(vnf.getVnfId(), vfModule.getVfModuleId()).getModelCustomizationId();
+                                       modelInfo.setModelCustomizationId(vfModuleCustId);
+                                       break;
                                }
                        }
-                       if (!foundByName && !foundById && bbName.equalsIgnoreCase(AssignFlows.VF_MODULE.toString())) {
-                               VfModule vfModule = this.createVfModule(lookupKeyMap,
+                       if (vfModule == null && bbName.equalsIgnoreCase(AssignFlows.VF_MODULE.toString())) {
+                               vfModule = createVfModule(lookupKeyMap,
                                                resourceId, instanceName, instanceParams);
-                               this.mapCatalogVfModule(vfModule, modelInfo, service, vnfModelCustomizationUUID);
                                vnf.getVfModules().add(vfModule);
                        }
+                       if(vfModule != null) {
+                               mapCatalogVfModule(vfModule, modelInfo, service, vnfModelCustomizationUUID);
+                       }
                } else {
                        msoLogger.debug("Related VNF instance Id not found:  " + lookupKeyMap.get(ResourceKey.GENERIC_VNF_ID));
                        throw new Exception("Could not find relevant information for related VNF");
                }
        }
+       
+       protected Optional<String> getVolumeGroupIdRelatedToVfModule(GenericVnf vnf, ModelInfo modelInfo, 
+                       String cloudOwner, String cloudRegionId, Map<ResourceKey, String> lookupKeyMap) {
+               if (lookupKeyMap.get(ResourceKey.VOLUME_GROUP_ID) == null) {
+                       for(VolumeGroup volumeGroup : vnf.getVolumeGroups()) {
+                               String volumeGroupCustId = 
+                                               bbInputSetupUtils.getAAIVolumeGroup(cloudOwner, 
+                                                               cloudRegionId, volumeGroup.getVolumeGroupId()).getModelCustomizationId();
+                               if(modelInfo.getModelCustomizationId().equalsIgnoreCase(volumeGroupCustId)) {
+                                       return Optional.of(volumeGroup.getVolumeGroupId());
+                               }
+                       }
+               }
+               return Optional.empty();
+       }
 
        protected void mapCatalogVfModule(VfModule vfModule, ModelInfo modelInfo, Service service,
                        String vnfModelCustomizationUUID) {
@@ -422,48 +482,47 @@ public class BBInputSetup implements JavaDelegate {
        protected void populateVolumeGroup(ModelInfo modelInfo, Service service, String bbName,
                        ServiceInstance serviceInstance, Map<ResourceKey, String> lookupKeyMap, String resourceId,
                        RelatedInstanceList[] relatedInstanceList, String instanceName, String vnfType, List<Map<String, String>> instanceParams) throws Exception {
-               boolean foundByName = false;
-               boolean foundById = false;
+               VolumeGroup volumeGroup = null;
+               GenericVnf vnf = null;
                String vnfModelCustomizationUUID = null;
+               String generatedVnfType = vnfType;
+               if (generatedVnfType == null || generatedVnfType.isEmpty()) {
+                       generatedVnfType = service.getModelName() + "/" + modelInfo.getModelCustomizationName();
+               }
                if (relatedInstanceList != null) {
                        for (RelatedInstanceList relatedInstList : relatedInstanceList) {
                                RelatedInstance relatedInstance = relatedInstList.getRelatedInstance();
                                if (relatedInstance.getModelInfo().getModelType().equals(ModelType.vnf)) {
                                        vnfModelCustomizationUUID = relatedInstance.getModelInfo().getModelCustomizationUuid();
+                                       break;
                                }
                        }
                }
-               GenericVnf vnf = null;
                for (GenericVnf tempVnf : serviceInstance.getVnfs()) {
                        if (tempVnf.getVnfId().equalsIgnoreCase(lookupKeyMap.get(ResourceKey.GENERIC_VNF_ID))) {
                                vnf = tempVnf;
-                               vnfModelCustomizationUUID = this.bbInputSetupUtils.getAAIGenericVnf(vnf.getVnfId())
+                               vnfModelCustomizationUUID = bbInputSetupUtils.getAAIGenericVnf(vnf.getVnfId())
                                                .getModelCustomizationId();
                                ModelInfo vnfModelInfo = new ModelInfo();
                                vnfModelInfo.setModelCustomizationUuid(vnfModelCustomizationUUID);
-                               this.mapCatalogVnf(tempVnf, vnfModelInfo, service);
+                               mapCatalogVnf(tempVnf, vnfModelInfo, service);
                                break;
                        }
                }
                if (vnf != null && vnfModelCustomizationUUID != null) {
-                       for (VolumeGroup volumeGroup : vnf.getVolumeGroups()) {
-                               if (lookupKeyMap.get(ResourceKey.VOLUME_GROUP_ID) != null && volumeGroup.getVolumeGroupId()
+                       for (VolumeGroup volumeGroupTemp : vnf.getVolumeGroups()) {
+                               if (lookupKeyMap.get(ResourceKey.VOLUME_GROUP_ID) != null && volumeGroupTemp.getVolumeGroupId()
                                                .equalsIgnoreCase(lookupKeyMap.get(ResourceKey.VOLUME_GROUP_ID))) {
-                                       foundById = true;
-                                       this.mapCatalogVolumeGroup(volumeGroup, modelInfo, service, vnfModelCustomizationUUID);
-                               } else if (instanceName != null && volumeGroup.getVolumeGroupName().equalsIgnoreCase(instanceName)) {
-                                       foundByName = true;
-                                       lookupKeyMap.put(ResourceKey.VOLUME_GROUP_ID, volumeGroup.getVolumeGroupId());
-                                       this.mapCatalogVolumeGroup(volumeGroup, modelInfo, service, vnfModelCustomizationUUID);
+                                       volumeGroup = volumeGroupTemp;
+                                       break;
                                }
                        }
-                       if (!foundByName && !foundById && bbName.equalsIgnoreCase(AssignFlows.VOLUME_GROUP.toString())) {
-                               if (vnfType == null || vnfType.isEmpty()) {
-                                       vnfType = service.getModelName() + "/" + modelInfo.getModelCustomizationName();
-                               }
-                               VolumeGroup volumeGroup = this.createVolumeGroup(lookupKeyMap, resourceId, instanceName, vnfType, instanceParams);
+                       if (volumeGroup == null && bbName.equalsIgnoreCase(AssignFlows.VOLUME_GROUP.toString())) {
+                               volumeGroup = createVolumeGroup(lookupKeyMap, resourceId, instanceName, generatedVnfType, instanceParams);
                                vnf.getVolumeGroups().add(volumeGroup);
-                               this.mapCatalogVolumeGroup(volumeGroup, modelInfo, service, vnfModelCustomizationUUID);
+                       }
+                       if(volumeGroup != null) {
+                               mapCatalogVolumeGroup(volumeGroup, modelInfo, service, vnfModelCustomizationUUID);
                        }
                } else {
                        msoLogger.debug("Related VNF instance Id not found:  " + lookupKeyMap.get(ResourceKey.GENERIC_VNF_ID));
@@ -521,50 +580,54 @@ public class BBInputSetup implements JavaDelegate {
                        org.onap.so.serviceinstancebeans.LineOfBusiness lineOfBusiness, Service service, String bbName,
                        ServiceInstance serviceInstance, Map<ResourceKey, String> lookupKeyMap,
                        RelatedInstanceList[] relatedInstanceList, String resourceId, String vnfType, List<Map<String, String>> instanceParams) {
-               boolean foundByName = false;
-               boolean foundById = false;
+               GenericVnf vnf = null;
                ModelInfo instanceGroupModelInfo = null;
                String instanceGroupId = null;
+               String generatedVnfType = vnfType;
+               if (generatedVnfType == null || generatedVnfType.isEmpty()) {
+                       generatedVnfType = service.getModelName() + "/" + modelInfo.getModelCustomizationName();
+               }
                if (relatedInstanceList != null) {
                        for (RelatedInstanceList relatedInstList : relatedInstanceList) {
                                RelatedInstance relatedInstance = relatedInstList.getRelatedInstance();
-                               if (relatedInstance.getModelInfo().getModelType().equals(ModelType.networkCollection)) {
+                               if (relatedInstance.getModelInfo().getModelType().equals(ModelType.networkInstanceGroup)) {
                                        instanceGroupModelInfo = relatedInstance.getModelInfo();
                                        instanceGroupId = relatedInstance.getInstanceId();
                                }
                        }
                }
-               for (GenericVnf genericVnf : serviceInstance.getVnfs()) {
+               for (GenericVnf vnfTemp : serviceInstance.getVnfs()) {
                        if (lookupKeyMap.get(ResourceKey.GENERIC_VNF_ID) != null
-                                       && genericVnf.getVnfId().equalsIgnoreCase(lookupKeyMap.get(ResourceKey.GENERIC_VNF_ID))) {
-                               foundById = true;
-                               org.onap.aai.domain.yang.GenericVnf vnf = bbInputSetupUtils.getAAIGenericVnf(genericVnf.getVnfId());
-                               if(vnf!=null){
-                                       modelInfo.setModelCustomizationUuid(vnf.getModelCustomizationId());
-                               }
-                               this.mapCatalogVnf(genericVnf, modelInfo, service);
-                       } else if (instanceName != null && genericVnf.getVnfName().equalsIgnoreCase(instanceName)) {
-                               foundByName = true;
-                               lookupKeyMap.put(ResourceKey.GENERIC_VNF_ID, genericVnf.getVnfId());
-                               org.onap.aai.domain.yang.GenericVnf vnf = bbInputSetupUtils.getAAIGenericVnf(genericVnf.getVnfId());
-                               if(vnf!=null){
-                                       modelInfo.setModelCustomizationUuid(vnf.getModelCustomizationId());
-                               }
-                               this.mapCatalogVnf(genericVnf, modelInfo, service);
+                                       && vnfTemp.getVnfId().equalsIgnoreCase(lookupKeyMap.get(ResourceKey.GENERIC_VNF_ID))) {
+                               String vnfModelCustId = bbInputSetupUtils.getAAIGenericVnf(vnfTemp.getVnfId()).getModelCustomizationId();
+                               modelInfo.setModelCustomizationUuid(vnfModelCustId);
+                               vnf = vnfTemp;
+                               break;
+                       }
+               }
+               if (vnf == null && bbName.equalsIgnoreCase(AssignFlows.VNF.toString())) {
+                       vnf = createGenericVnf(lookupKeyMap, instanceName, platform, lineOfBusiness,
+                                       resourceId, generatedVnfType, instanceParams);
+                       serviceInstance.getVnfs().add(vnf);
+                       mapVnfcCollectionInstanceGroup(vnf, modelInfo, service);
+               }
+               if(vnf != null) {
+                       mapCatalogVnf(vnf, modelInfo, service);
+                       if (instanceGroupId != null && instanceGroupModelInfo != null
+                                       && instanceGroupModelInfo.getModelType().equals(ModelType.networkInstanceGroup)
+                                       && !instanceGroupInList(vnf, instanceGroupId)) {
+                               mapNetworkCollectionInstanceGroup(vnf, instanceGroupId);
                        }
                }
-               if (!foundByName && !foundById && bbName.equalsIgnoreCase(AssignFlows.VNF.toString())) {
-                       if(vnfType == null || vnfType.isEmpty()) {
-                               vnfType = service.getModelName() + "/" + modelInfo.getModelCustomizationName();
+       }
+
+       protected boolean instanceGroupInList(GenericVnf vnf, String instanceGroupId) {
+               for(InstanceGroup instanceGroup : vnf.getInstanceGroups()) {
+                       if(instanceGroup.getId() != null && instanceGroup.getId().equalsIgnoreCase(instanceGroupId)) {
+                               return true;
                        }
-                       GenericVnf genericVnf = this.createGenericVnf(lookupKeyMap, instanceName, platform, lineOfBusiness,
-                                       resourceId, vnfType, instanceParams);
-                       serviceInstance.getVnfs().add(genericVnf);
-                       this.mapCatalogVnf(genericVnf, modelInfo, service);
-                       this.mapVnfcCollectionInstanceGroup(genericVnf, modelInfo, service);
-                       if (instanceGroupId != null && instanceGroupModelInfo != null)
-                               this.mapNetworkCollectionInstanceGroup(genericVnf, instanceGroupId);
                }
+               return false;
        }
 
        protected void mapVnfcCollectionInstanceGroup(GenericVnf genericVnf, ModelInfo modelInfo, Service service) {
@@ -574,8 +637,9 @@ public class BBInputSetup implements JavaDelegate {
                                .getVnfcInstanceGroupCustomizations();
                for (VnfcInstanceGroupCustomization vnfcInstanceGroupCust : vnfcInstanceGroups) {
                        InstanceGroup instanceGroup = this.createInstanceGroup();
-                               instanceGroup.setModelInfoInstanceGroup(this.mapperLayer
-                                               .mapCatalogInstanceGroupToInstanceGroup(null, vnfcInstanceGroupCust.getInstanceGroup()));
+                       org.onap.so.db.catalog.beans.InstanceGroup catalogInstanceGroup = bbInputSetupUtils.getCatalogInstanceGroup(vnfcInstanceGroupCust.getModelUUID());
+                       instanceGroup.setModelInfoInstanceGroup(this.mapperLayer
+                                       .mapCatalogInstanceGroupToInstanceGroup(null, catalogInstanceGroup));
                        instanceGroup.getModelInfoInstanceGroup().setFunction(vnfcInstanceGroupCust.getFunction());
                        instanceGroup.setDescription(vnfcInstanceGroupCust.getDescription());
                        genericVnf.getInstanceGroups().add(instanceGroup);
@@ -584,7 +648,7 @@ public class BBInputSetup implements JavaDelegate {
        }
 
        protected void mapNetworkCollectionInstanceGroup(GenericVnf genericVnf, String instanceGroupId) {
-               org.onap.aai.domain.yang.InstanceGroup aaiInstanceGroup = this.bbInputSetupUtils
+               org.onap.aai.domain.yang.InstanceGroup aaiInstanceGroup = bbInputSetupUtils
                                .getAAIInstanceGroup(instanceGroupId);
                InstanceGroup instanceGroup = this.mapperLayer.mapAAIInstanceGroupIntoInstanceGroup(aaiInstanceGroup);
                instanceGroup.setModelInfoInstanceGroup(this.mapperLayer.mapCatalogInstanceGroupToInstanceGroup(
@@ -635,25 +699,22 @@ public class BBInputSetup implements JavaDelegate {
 
        protected void populateL3Network(String instanceName, ModelInfo modelInfo, Service service, String bbName,
                        ServiceInstance serviceInstance, Map<ResourceKey, String> lookupKeyMap, String resourceId, List<Map<String, String>> instanceParams) {
-               boolean foundByName = false;
-               boolean foundById = false;
-               for (L3Network network : serviceInstance.getNetworks()) {
+               L3Network network = null;
+               for (L3Network networkTemp : serviceInstance.getNetworks()) {
                        if (lookupKeyMap.get(ResourceKey.NETWORK_ID) != null
-                                       && network.getNetworkId().equalsIgnoreCase(lookupKeyMap.get(ResourceKey.NETWORK_ID))) {
-                               foundById = true;
-                               this.mapCatalogNetwork(network, modelInfo, service);
-                       } else if (instanceName != null && network.getNetworkName().equalsIgnoreCase(instanceName)) {
-                               foundByName = true;
-                               lookupKeyMap.put(ResourceKey.NETWORK_ID, network.getNetworkId());
-                               this.mapCatalogNetwork(network, modelInfo, service);
+                                       && networkTemp.getNetworkId().equalsIgnoreCase(lookupKeyMap.get(ResourceKey.NETWORK_ID))) {
+                               network = networkTemp;
+                               break;
                        }
                }
-               if (!foundByName && !foundById 
+               if (network == null
                                && (bbName.equalsIgnoreCase(AssignFlows.NETWORK_A_LA_CARTE.toString()) 
                                                || bbName.equalsIgnoreCase(AssignFlows.NETWORK_MACRO.toString()))) {
-                       L3Network l3Network = this.createNetwork(lookupKeyMap, instanceName, resourceId, instanceParams);
-                       serviceInstance.getNetworks().add(l3Network);
-                       this.mapCatalogNetwork(l3Network, modelInfo, service);
+                       network = createNetwork(lookupKeyMap, instanceName, resourceId, instanceParams);
+                       serviceInstance.getNetworks().add(network);
+               }
+               if(network != null) {
+                       mapCatalogNetwork(network, modelInfo, service);
                }
        }
 
@@ -711,7 +772,7 @@ public class BBInputSetup implements JavaDelegate {
                                }
                        }
                        ServiceInstance serviceInstance = this.getALaCarteServiceInstance(service, requestDetails, customer,
-                                       project, owningEntity, lookupKeyMap, resourceId, executeBB.isaLaCarte(),
+                                       project, owningEntity, lookupKeyMap, resourceId, Boolean.TRUE.equals(executeBB.isaLaCarte()),
                                        executeBB.getBuildingBlock().getBpmnFlowName());
                        return this.populateGBBWithSIAndAdditionalInfo(requestDetails, serviceInstance, executeBB, requestAction, customer);
                } else {
@@ -770,9 +831,8 @@ public class BBInputSetup implements JavaDelegate {
                requestContext.setAction(requestAction);
                requestContext.setMsoRequestId(executeBB.getRequestId());
                org.onap.aai.domain.yang.CloudRegion aaiCloudRegion = bbInputSetupUtils
-                               .getCloudRegion(requestDetails.getCloudConfiguration(), CLOUD_OWNER);
-               CloudRegion cloudRegion = mapperLayer.mapCloudRegion(requestDetails.getCloudConfiguration(), aaiCloudRegion,
-                               CLOUD_OWNER);
+                               .getCloudRegion(requestDetails.getCloudConfiguration());
+               CloudRegion cloudRegion = mapperLayer.mapCloudRegion(requestDetails.getCloudConfiguration(), aaiCloudRegion);
                outputBB.setOrchContext(orchContext);
                outputBB.setRequestContext(requestContext);
                outputBB.setCloudRegion(cloudRegion);
@@ -783,7 +843,9 @@ public class BBInputSetup implements JavaDelegate {
                        customer = mapCustomer(globalCustomerId, subscriptionServiceType);
                }
                outputBB.setServiceInstance(serviceInstance);
-               customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
+               if (customer.getServiceSubscription() != null) {
+                       customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
+               }
                outputBB.setCustomer(customer);
                return outputBB;
        }
@@ -839,8 +901,20 @@ public class BBInputSetup implements JavaDelegate {
                        throws Exception {
                String bbName = executeBB.getBuildingBlock().getBpmnFlowName();
                String key = executeBB.getBuildingBlock().getKey();
+               
+               if (requestAction.equalsIgnoreCase("deleteInstance")
+                               || requestAction.equalsIgnoreCase("unassignInstance")
+                               || requestAction.equalsIgnoreCase("activateInstance")
+                               || requestAction.equalsIgnoreCase("activateFabricConfiguration")
+                               || requestAction.equalsIgnoreCase("recreateInstance")
+                               || requestAction.equalsIgnoreCase("replaceInstance")) {
+                       return getGBBMacroExistingService(executeBB, lookupKeyMap, bbName, requestAction,
+                                       requestDetails.getCloudConfiguration());
+               }
+
+               String serviceInstanceId = lookupKeyMap.get(ResourceKey.SERVICE_INSTANCE_ID);
                GeneralBuildingBlock gBB = this.getGBBALaCarteService(executeBB, requestDetails, lookupKeyMap, requestAction,
-                               resourceId);
+                               serviceInstanceId);
                RequestParameters requestParams = requestDetails.getRequestParameters();
                Service service = null;
                if (gBB != null && gBB.getServiceInstance() != null
@@ -863,16 +937,10 @@ public class BBInputSetup implements JavaDelegate {
                if (requestAction.equalsIgnoreCase("deactivateInstance")) {
                        return gBB;
                } else if (requestAction.equalsIgnoreCase("createInstance")) {
-               return getGBBMacroNoUserParamsCreate(executeBB, lookupKeyMap, bbName, key, gBB, service);
-               } else if (requestAction.equalsIgnoreCase("deleteInstance")
-                               || requestAction.equalsIgnoreCase("unassignInstance")
-                               || requestAction.equalsIgnoreCase("activateInstance")
-                               || requestAction.equalsIgnoreCase("activateFabricConfiguration")) {
-                       return getGBBMacroExistingService(executeBB, lookupKeyMap, bbName, gBB, service, requestAction,
-                                       requestDetails.getCloudConfiguration());
+                       return getGBBMacroNoUserParamsCreate(executeBB, lookupKeyMap, bbName, key, gBB, service);
                } else {
-               throw new IllegalArgumentException(
-                               "No user params on requestAction: assignInstance. Please specify user params.");
+                       throw new IllegalArgumentException(
+                                       "No user params on requestAction: assignInstance. Please specify user params.");
                }
        }
 
@@ -883,7 +951,7 @@ public class BBInputSetup implements JavaDelegate {
                if (bbName.contains(NETWORK) && !bbName.contains(NETWORK_COLLECTION)) {
                        String networkId = lookupKeyMap.get(ResourceKey.NETWORK_ID);
                        ModelInfo networkModelInfo = new ModelInfo();
-                       if(!executeBB.getBuildingBlock().getIsVirtualLink()) {
+                       if((!Boolean.TRUE.equals(executeBB.getBuildingBlock().getIsVirtualLink()))) {
                                NetworkResourceCustomization networkCust = getNetworkCustomizationByKey(key, service);
                                if (networkCust != null) {
                                        networkModelInfo.setModelCustomizationUuid(networkCust.getModelCustomizationUUID());
@@ -894,18 +962,19 @@ public class BBInputSetup implements JavaDelegate {
                                }
                        } else {
                                msoLogger.debug("Orchestrating on Collection Network Resource Customization");
-                               serviceInstance.getNetworks().add(getVirtualLinkL3Network(lookupKeyMap, bbName, key, networkId));
+                               CollectionNetworkResourceCustomization collectionNetworkResourceCust = bbInputSetupUtils.getCatalogCollectionNetworkResourceCustByID(key);
+                               L3Network l3Network = getVirtualLinkL3Network(lookupKeyMap, bbName, key, networkId, collectionNetworkResourceCust, serviceInstance);
+                               NetworkResourceCustomization networkResourceCustomization = 
+                                               mapperLayer.mapCollectionNetworkResourceCustToNetworkResourceCust(collectionNetworkResourceCust);
+                               if(l3Network != null) {
+                                       l3Network.setModelInfoNetwork(mapperLayer.mapCatalogNetworkToNetwork(networkResourceCustomization));
+                               }
                        }
                } else if(bbName.contains("Configuration")) {
                        String configurationId = lookupKeyMap.get(ResourceKey.CONFIGURATION_ID);
                        ModelInfo configurationModelInfo = new ModelInfo();
                        configurationModelInfo.setModelCustomizationUuid(key);
-                       ConfigurationResourceCustomization configurationCust = findConfigurationResourceCustomization(configurationModelInfo, service);
-                       if(configurationCust != null) {
-                               this.populateConfiguration(configurationModelInfo, service, bbName, serviceInstance, lookupKeyMap, configurationId, null);
-                       } else {
-                               msoLogger.debug("Could not find a configuration customization with key: " + key);
-                       }
+                       this.populateConfiguration(configurationModelInfo, service, bbName, serviceInstance, lookupKeyMap, configurationId, null, executeBB.getConfigurationResourceKeys());
                }
                if (executeBB.getWorkflowResourceIds() != null) {
                        this.populateNetworkCollectionAndInstanceGroupAssign(service, bbName, serviceInstance,
@@ -915,15 +984,20 @@ public class BBInputSetup implements JavaDelegate {
        }
 
        protected L3Network getVirtualLinkL3Network(Map<ResourceKey, String> lookupKeyMap, String bbName, String key,
-                       String networkId) {
-               CollectionNetworkResourceCustomization collectionNetworkResourceCust = bbInputSetupUtils.getCatalogCollectionNetworkResourceCustByID(key);
-               if(collectionNetworkResourceCust != null && (bbName.equalsIgnoreCase(AssignFlows.NETWORK_A_LA_CARTE.toString()) 
+                       String networkId, CollectionNetworkResourceCustomization collectionNetworkResourceCust, ServiceInstance serviceInstance) {
+               if(collectionNetworkResourceCust != null) {
+                       if((bbName.equalsIgnoreCase(AssignFlows.NETWORK_A_LA_CARTE.toString())
                                || bbName.equalsIgnoreCase(AssignFlows.NETWORK_MACRO.toString()))) {
-                       NetworkResourceCustomization networkResourceCustomization = 
-                                       mapperLayer.mapCollectionNetworkResourceCustToNetworkResourceCust(collectionNetworkResourceCust);
-                       L3Network l3Network = createNetwork(lookupKeyMap, null, networkId, null);
-                       l3Network.setModelInfoNetwork(mapperLayer.mapCatalogNetworkToNetwork(networkResourceCustomization));
-                       return l3Network;
+                               L3Network network = createNetwork(lookupKeyMap, null, networkId, null);                         
+                               serviceInstance.getNetworks().add(network);
+                               return network;
+                       } else {
+                               for (L3Network network : serviceInstance.getNetworks()) {
+                                       if (network.getNetworkId().equalsIgnoreCase(networkId)) {
+                                               return network;
+                                       }
+                               }
+                       }
                }
                return null;
        }
@@ -938,15 +1012,40 @@ public class BBInputSetup implements JavaDelegate {
        }
 
        protected GeneralBuildingBlock getGBBMacroExistingService(ExecuteBuildingBlock executeBB,
-                       Map<ResourceKey, String> lookupKeyMap, String bbName, GeneralBuildingBlock gBB, Service service,
-                       String requestAction, CloudConfiguration cloudConfiguration) throws Exception {
+                       Map<ResourceKey, String> lookupKeyMap, String bbName, String requestAction, CloudConfiguration cloudConfiguration) throws Exception {
+               org.onap.aai.domain.yang.ServiceInstance aaiServiceInstance = null;
+               String serviceInstanceId = lookupKeyMap.get(ResourceKey.SERVICE_INSTANCE_ID);
+               RequestDetails requestDetails = executeBB.getRequestDetails();
+               GeneralBuildingBlock gBB = null;
+               if (serviceInstanceId != null) {
+                       aaiServiceInstance = bbInputSetupUtils.getAAIServiceInstanceById(serviceInstanceId);
+               }
+               Service service = null;
+               if (aaiServiceInstance != null) {
+                       service = bbInputSetupUtils.getCatalogServiceByModelUUID(aaiServiceInstance.getModelVersionId());
+               }
+               if (aaiServiceInstance != null && service != null) {
+                       ServiceInstance serviceInstance = this.getExistingServiceInstance(aaiServiceInstance);
+                       serviceInstance.setModelInfoServiceInstance(this.mapperLayer.mapCatalogServiceIntoServiceInstance(service));
+                       gBB = populateGBBWithSIAndAdditionalInfo(requestDetails, serviceInstance, executeBB, requestAction, null);
+               } else {
+                       msoLogger.debug("Related Service Instance from AAI: " + aaiServiceInstance);
+                       msoLogger.debug("Related Service Instance Model Info from AAI: " + service);
+                       throw new Exception("Could not find relevant information for related Service Instance");
+               }
                ServiceInstance serviceInstance = gBB.getServiceInstance();
-               if (cloudConfiguration != null && requestAction.equalsIgnoreCase("deleteInstance")) {
-                       org.onap.aai.domain.yang.CloudRegion aaiCloudRegion = bbInputSetupUtils.getCloudRegion(cloudConfiguration,
-                                       CLOUD_OWNER);
-                       CloudRegion cloudRegion = mapperLayer.mapCloudRegion(cloudConfiguration, aaiCloudRegion, CLOUD_OWNER);
-                       gBB.setCloudRegion(cloudRegion);
+               CloudRegion cloudRegion = null;
+               if(cloudConfiguration == null) {
+                       Optional<CloudRegion> cloudRegionOp = cloudInfoFromAAI.getCloudInfoFromAAI(serviceInstance);
+                       if(cloudRegionOp.isPresent()) {
+                               cloudRegion = cloudRegionOp.get();
+                       }
+               }
+               if (cloudConfiguration != null) {
+                       org.onap.aai.domain.yang.CloudRegion aaiCloudRegion = bbInputSetupUtils.getCloudRegion(cloudConfiguration);
+                       cloudRegion = mapperLayer.mapCloudRegion(cloudConfiguration, aaiCloudRegion);
                }
+               gBB.setCloudRegion(cloudRegion);
                if (bbName.contains(VNF)) {
                        for (GenericVnf genericVnf : serviceInstance.getVnfs()) {
                                if (lookupKeyMap.get(ResourceKey.GENERIC_VNF_ID) != null
@@ -975,6 +1074,13 @@ public class BBInputSetup implements JavaDelegate {
                                                ModelInfo vfModuleModelInfo = new ModelInfo();
                                                vfModuleModelInfo.setModelCustomizationId(vfModuleCustomizationUUID);
                                                this.mapCatalogVfModule(vfModule, vfModuleModelInfo, service, vnfModelCustomizationUUID);
+                                               if(cloudRegion != null) {
+                                                       Optional<String> volumeGroupIdOp = getVolumeGroupIdRelatedToVfModule(vnf, vfModuleModelInfo, cloudRegion.getCloudOwner(), 
+                                                                       cloudRegion.getLcpCloudRegionId(), lookupKeyMap);
+                                                       if(volumeGroupIdOp.isPresent()) {
+                                                               lookupKeyMap.put(ResourceKey.VOLUME_GROUP_ID, volumeGroupIdOp.get());
+                                                       }
+                                               }
                                                break;
                                        }
                                }
@@ -990,9 +1096,9 @@ public class BBInputSetup implements JavaDelegate {
                                                vnfModelInfo.setModelCustomizationUuid(vnfModelCustomizationUUID);
                                                this.mapCatalogVnf(vnf, vnfModelInfo, service);
                                                lookupKeyMap.put(ResourceKey.GENERIC_VNF_ID, vnf.getVnfId());
-                                               if (cloudConfiguration != null) {
-                                                       String volumeGroupCustomizationUUID = this.bbInputSetupUtils.getAAIVolumeGroup(CLOUD_OWNER,
-                                                                       cloudConfiguration.getLcpCloudRegionId(), volumeGroup.getVolumeGroupId())
+                                               if (cloudRegion != null) {
+                                                       String volumeGroupCustomizationUUID = this.bbInputSetupUtils.getAAIVolumeGroup(cloudRegion.getCloudOwner(),
+                                                                       cloudRegion.getLcpCloudRegionId(), volumeGroup.getVolumeGroupId())
                                                                        .getModelCustomizationId();
                                                        ModelInfo volumeGroupModelInfo = new ModelInfo();
                                                        volumeGroupModelInfo.setModelCustomizationId(volumeGroupCustomizationUUID);
@@ -1023,7 +1129,7 @@ public class BBInputSetup implements JavaDelegate {
                                                        .getModelCustomizationId();
                                        ModelInfo modelInfo = new ModelInfo();
                                        modelInfo.setModelCustomizationUuid(configurationCustUUID);
-                                       this.mapCatalogConfiguration(configuration, modelInfo, service);
+                                       this.mapCatalogConfiguration(configuration, modelInfo, service, executeBB.getConfigurationResourceKeys());
                                        break;
                                }
                        }
@@ -1077,6 +1183,7 @@ public class BBInputSetup implements JavaDelegate {
                                String vfModuleId = lookupKeyMap.get(ResourceKey.VF_MODULE_ID);
                                CloudConfiguration cloudConfig = new CloudConfiguration();
                                cloudConfig.setLcpCloudRegionId(cloudRegion.getLcpCloudRegionId());
+                               cloudConfig.setCloudOwner(cloudRegion.getCloudOwner());
                                this.populateVfModule(modelInfo, service, bbName, serviceInstance, lookupKeyMap, vfModuleId, null,
                                                vfModules.getInstanceName(), vfModules.getInstanceParams(), cloudConfig);
                        }
@@ -1091,7 +1198,7 @@ public class BBInputSetup implements JavaDelegate {
                        configurationModelInfo.setModelCustomizationUuid(key);
                        ConfigurationResourceCustomization configurationCust = findConfigurationResourceCustomization(configurationModelInfo, service);
                        if(configurationCust != null) {
-                               this.populateConfiguration(configurationModelInfo, service, bbName, serviceInstance, lookupKeyMap, configurationId, null);
+                               this.populateConfiguration(configurationModelInfo, service, bbName, serviceInstance, lookupKeyMap, configurationId, null, executeBB.getConfigurationResourceKeys());
                        } else {
                                msoLogger.debug("Could not find a configuration customization with key: " + key);
                        }
@@ -1154,9 +1261,8 @@ public class BBInputSetup implements JavaDelegate {
                }
                }
                if(cloudConfiguration != null) {
-                       org.onap.aai.domain.yang.CloudRegion aaiCloudRegion = bbInputSetupUtils.getCloudRegion(cloudConfiguration,
-                                       CLOUD_OWNER);
-                       return mapperLayer.mapCloudRegion(cloudConfiguration, aaiCloudRegion, CLOUD_OWNER);
+                       org.onap.aai.domain.yang.CloudRegion aaiCloudRegion = bbInputSetupUtils.getCloudRegion(cloudConfiguration);
+                       return mapperLayer.mapCloudRegion(cloudConfiguration, aaiCloudRegion);
                } else {
                        msoLogger.debug("Could not find any cloud configuration for this request.");
                        return null;
@@ -1452,7 +1558,9 @@ public class BBInputSetup implements JavaDelegate {
                        aaiCollection = aaiCollectionOp.get();
 
                        Collection collection = this.mapperLayer.mapAAICollectionIntoCollection(aaiCollection);
-                       
+                       NetworkCollectionResourceCustomization collectionResourceCust = 
+                                       bbInputSetupUtils.getCatalogNetworkCollectionResourceCustByID(aaiCollection.getCollectionCustomizationId());
+                       collection.setModelInfoCollection(mapperLayer.mapCatalogCollectionToCollection(collectionResourceCust, collectionResourceCust.getCollectionResource()));
                        Optional<Relationships> relationshipsOp = collectionWrapper.getRelationships();
                        Relationships relationships = null;
                        if (relationshipsOp.isPresent()) {
@@ -1493,7 +1601,7 @@ public class BBInputSetup implements JavaDelegate {
                        Relationships relationships = relationshipsOp.get();
                        this.mapNetworkPolicies(relationships.getByType(AAIObjectType.NETWORK_POLICY),
                                        network.getNetworkPolicies());
-                       this.mapRouteTableReferences(relationships.getByType(AAIObjectType.ROUTE_TABLE_REFERENCE),
+                       mapRouteTableReferences(relationships.getByType(AAIObjectType.ROUTE_TABLE_REFERENCE),
                                        network.getContrailNetworkRouteTableReferences());
                }