- Make association from the cvnfc to the fabric
[so.git] / asdc-controller / src / main / java / org / onap / so / asdc / installer / heat / ToscaResourceInstaller.java
index a08206b..8894df0 100644 (file)
@@ -47,7 +47,9 @@ import org.onap.sdc.api.notification.IStatusData;
 import org.onap.sdc.tosca.parser.api.IEntityDetails;
 import org.onap.sdc.tosca.parser.api.ISdcCsarHelper;
 import org.onap.sdc.tosca.parser.elements.queries.EntityQuery;
+import org.onap.sdc.tosca.parser.elements.queries.EntityQuery.EntityQueryBuilder;
 import org.onap.sdc.tosca.parser.elements.queries.TopologyTemplateQuery;
+import org.onap.sdc.tosca.parser.elements.queries.TopologyTemplateQuery.TopologyTemplateQueryBuilder;
 import org.onap.sdc.tosca.parser.enums.SdcTypes;
 import org.onap.sdc.tosca.parser.impl.SdcPropertyNames;
 import org.onap.sdc.toscaparser.api.*;
@@ -432,12 +434,20 @@ public class ToscaResourceInstaller {
             Service service = toscaResourceStruct.getCatalogService();
             List<NodeTemplate> vfNodeTemplatesList = toscaResourceStruct.getSdcCsarHelper().getServiceVfList();
 
-            for (NodeTemplate nodeTemplate : vfNodeTemplatesList) {
-                Metadata metadata = nodeTemplate.getMetaData();
-                String vfCustomizationCategory = toscaResourceStruct.getSdcCsarHelper()
-                        .getMetadataPropertyValue(metadata, SdcPropertyNames.PROPERTY_NAME_CATEGORY);
-                processVfModules(toscaResourceStruct, vfResourceStructure, service, nodeTemplate, metadata,
-                        vfCustomizationCategory);
+            List<IEntityDetails> vfEntityList = getEntityDetails(toscaResourceStruct,
+                    EntityQuery.newBuilder(SdcTypes.VF), TopologyTemplateQuery.newBuilder(SdcTypes.SERVICE), false);
+
+            for (IEntityDetails vfEntityDetails : vfEntityList) {
+
+                Metadata metadata = vfEntityDetails.getMetadata();
+                String category = metadata.getValue(SdcPropertyNames.PROPERTY_NAME_CATEGORY);
+
+                if (ALLOTTED_RESOURCE.equalsIgnoreCase(category)) {
+                    continue;
+                }
+
+                processVfModules(vfEntityDetails, vfNodeTemplatesList.get(0), toscaResourceStruct, vfResourceStructure,
+                        service, metadata);
             }
 
             processResourceSequence(toscaResourceStruct, service);
@@ -629,7 +639,8 @@ public class ToscaResourceInstaller {
     protected void processNetworks(ToscaResourceStructure toscaResourceStruct, Service service)
             throws ArtifactInstallerException {
 
-        List<IEntityDetails> vlEntityList = getEntityDetails(toscaResourceStruct, SdcTypes.VL, SdcTypes.SERVICE);
+        List<IEntityDetails> vlEntityList = getEntityDetails(toscaResourceStruct, EntityQuery.newBuilder(SdcTypes.VL),
+                TopologyTemplateQuery.newBuilder(SdcTypes.SERVICE), false);
 
         if (vlEntityList != null) {
             for (IEntityDetails vlEntity : vlEntityList) {
@@ -653,6 +664,8 @@ public class ToscaResourceInstaller {
                 } else {
                     NetworkResourceCustomization networkCustomization =
                             createNetwork(vlEntity, toscaResourceStruct, null, null, null, service);
+                    networkCustomization.setResourceInput(
+                            getResourceInput(toscaResourceStruct, networkCustomization.getModelCustomizationUUID()));
                     service.getNetworkCustomizations().add(networkCustomization);
                     logger.debug("No NetworkResourceName found in TempNetworkHeatTemplateLookup for "
                             + networkResourceModelName);
@@ -663,11 +676,14 @@ public class ToscaResourceInstaller {
     }
 
     protected void processAllottedResources(ToscaResourceStructure toscaResourceStruct, Service service,
-            List<NodeTemplate> allottedResourceList) {
+            List<NodeTemplate> allottedResourceList) throws ArtifactInstallerException {
         if (allottedResourceList != null) {
             for (NodeTemplate allottedNode : allottedResourceList) {
-                service.getAllottedCustomizations()
-                        .add(createAllottedResource(allottedNode, toscaResourceStruct, service));
+                AllottedResourceCustomization allottedResource =
+                        createAllottedResource(allottedNode, toscaResourceStruct, service);
+                allottedResource.setResourceInput(
+                        getResourceInput(toscaResourceStruct, allottedResource.getModelCustomizationUUID()));
+                service.getAllottedCustomizations().add(allottedResource);
             }
         }
     }
@@ -952,17 +968,21 @@ public class ToscaResourceInstaller {
         return String.valueOf(value);
     }
 
-    protected void processVfModules(ToscaResourceStructure toscaResourceStruct, VfResourceStructure vfResourceStructure,
-            Service service, NodeTemplate nodeTemplate, Metadata metadata, String vfCustomizationCategory)
-            throws Exception {
+    protected void processVfModules(IEntityDetails vfEntityDetails, NodeTemplate nodeTemplate,
+            ToscaResourceStructure toscaResourceStruct, VfResourceStructure vfResourceStructure, Service service,
+            Metadata metadata) throws Exception {
+
+        String vfCustomizationCategory =
+                vfEntityDetails.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_CATEGORY);
 
         logger.debug("VF Category is : " + vfCustomizationCategory);
 
         if (vfResourceStructure.getVfModuleStructure() != null
                 && !vfResourceStructure.getVfModuleStructure().isEmpty()) {
 
-            String vfCustomizationUUID = toscaResourceStruct.getSdcCsarHelper().getMetadataPropertyValue(metadata,
-                    SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID);
+            String vfCustomizationUUID =
+                    vfEntityDetails.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID);
+
             logger.debug("VFCustomizationUUID=" + vfCustomizationUUID);
 
             IResourceInstance vfNotificationResource = vfResourceStructure.getResourceInstance();
@@ -978,7 +998,7 @@ public class ToscaResourceInstaller {
                 logger.debug("vfCustomizationUUID: " + vfCustomizationUUID
                         + " matches vfNotificationResource CustomizationUUID");
 
-                VnfResourceCustomization vnfResource = createVnfResource(nodeTemplate, toscaResourceStruct, service);
+                VnfResourceCustomization vnfResource = createVnfResource(vfEntityDetails, toscaResourceStruct, service);
 
                 Set<CvnfcCustomization> existingCvnfcSet = new HashSet<>();
                 Set<VnfcCustomization> existingVnfcSet = new HashSet<>();
@@ -987,14 +1007,19 @@ public class ToscaResourceInstaller {
                 for (VfModuleStructure vfModuleStructure : vfResourceStructure.getVfModuleStructure()) {
 
                     logger.debug("vfModuleStructure:" + vfModuleStructure.toString());
-                    List<org.onap.sdc.toscaparser.api.Group> vfGroups =
-                            toscaResourceStruct.getSdcCsarHelper().getVfModulesByVf(vfCustomizationUUID);
+
+                    List<IEntityDetails> vfModuleEntityList =
+                            getEntityDetails(toscaResourceStruct,
+                                    EntityQuery.newBuilder("org.openecomp.groups.VfModule"), TopologyTemplateQuery
+                                            .newBuilder(SdcTypes.SERVICE).customizationUUID(vfCustomizationUUID),
+                                    false);
+
                     IVfModuleData vfMetadata = vfModuleStructure.getVfModuleMetadata();
 
                     logger.debug("Comparing Vf_Modules_Metadata CustomizationUUID : "
                             + vfMetadata.getVfModuleModelCustomizationUUID());
 
-                    Optional<org.onap.sdc.toscaparser.api.Group> matchingObject = vfGroups.stream()
+                    Optional<IEntityDetails> matchingObject = vfModuleEntityList.stream()
                             .peek(group -> logger.debug("To Csar Group VFModuleModelCustomizationUUID "
                                     + group.getMetadata().getValue("vfModuleModelCustomizationUUID")))
                             .filter(group -> group.getMetadata().getValue("vfModuleModelCustomizationUUID")
@@ -1002,7 +1027,7 @@ public class ToscaResourceInstaller {
                             .findFirst();
                     if (matchingObject.isPresent()) {
                         VfModuleCustomization vfModuleCustomization = createVFModuleResource(matchingObject.get(),
-                                nodeTemplate, toscaResourceStruct, vfResourceStructure, vfMetadata, vnfResource,
+                                toscaResourceStruct, vfResourceStructure, vfMetadata, vnfResource, service,
                                 existingCvnfcSet, existingVnfcSet, existingCvnfcConfigurationCustom);
                         vfModuleCustomization.getVfModule().setVnfResources(vnfResource.getVnfResources());
                     } else
@@ -1014,17 +1039,18 @@ public class ToscaResourceInstaller {
 
 
                 // Check for VNFC Instance Group info and add it if there is
-                List<Group> groupList =
-                        toscaResourceStruct.getSdcCsarHelper().getGroupsOfOriginOfNodeTemplateByToscaGroupType(
-                                nodeTemplate, "org.openecomp.groups.VfcInstanceGroup");
+                List<IEntityDetails> vfcEntityList = getEntityDetails(toscaResourceStruct,
+                        EntityQuery.newBuilder("org.openecomp.groups.VfcInstanceGroup"),
+                        TopologyTemplateQuery.newBuilder(SdcTypes.VF).customizationUUID(vfCustomizationUUID), false);
+
 
-                for (Group group : groupList) {
+                for (IEntityDetails groupEntity : vfcEntityList) {
                     VnfcInstanceGroupCustomization vnfcInstanceGroupCustomization =
-                            createVNFCInstanceGroup(nodeTemplate, group, vnfResource, toscaResourceStruct);
+                            createVNFCInstanceGroup(groupEntity, nodeTemplate, vnfResource, toscaResourceStruct);
                     vnfcInstanceGroupCustomizationRepo.saveAndFlush(vnfcInstanceGroupCustomization);
                 }
 
-                List<String> seqResult = processVNFCGroupSequence(toscaResourceStruct, groupList);
+                List<String> seqResult = processVNFCGroupSequence(toscaResourceStruct, vfcEntityList);
                 if (!CollectionUtils.isEmpty(seqResult)) {
                     String resultStr = seqResult.stream().collect(Collectors.joining(","));
                     vnfResource.setVnfcInstanceGroupOrder(resultStr);
@@ -1042,62 +1068,71 @@ public class ToscaResourceInstaller {
     }
 
     private List<String> processVNFCGroupSequence(ToscaResourceStructure toscaResourceStructure,
-            List<Group> groupList) {
-        if (CollectionUtils.isEmpty(groupList)) {
+            List<IEntityDetails> groupEntityDetails) {
+        if (CollectionUtils.isEmpty(groupEntityDetails)) {
             return Collections.emptyList();
         }
 
         ISdcCsarHelper iSdcCsarHelper = toscaResourceStructure.getSdcCsarHelper();
-        List<String> strSequence = new ArrayList<>(groupList.size());
-        List<Group> tempGroupList = new ArrayList<>(groupList.size());
-        List<NodeTemplate> nodes = new ArrayList<>();
-        tempGroupList.addAll(groupList);
+        List<String> strSequence = new ArrayList<>(groupEntityDetails.size());
+        List<IEntityDetails> tempEntityList = new ArrayList<>(groupEntityDetails.size());
+        List<IEntityDetails> entities = new ArrayList<>();
+        tempEntityList.addAll(groupEntityDetails);
+
+        for (IEntityDetails vnfcEntityDetails : groupEntityDetails) {
+
+            List<IEntityDetails> vnfcMemberNodes = vnfcEntityDetails.getMemberNodes();
 
-        for (Group group : groupList) {
-            List<NodeTemplate> nodeList = group.getMemberNodes();
             boolean hasRequirements = false;
-            for (NodeTemplate node : nodeList) {
-                RequirementAssignments requirements = iSdcCsarHelper.getRequirementsOf(node);
-                if (requirements != null && requirements.getAll() != null && !requirements.getAll().isEmpty()) {
+            for (IEntityDetails vnfcDetails : vnfcMemberNodes) {
+
+                Map<String, RequirementAssignment> requirements = vnfcDetails.getRequirements();
+
+                if (requirements != null && !requirements.isEmpty()) {
                     hasRequirements = true;
                     break;
                 }
             }
 
             if (!hasRequirements) {
-                strSequence.add(group.getName());
-                tempGroupList.remove(group);
-                nodes.addAll(nodeList);
+                strSequence.add(vnfcEntityDetails.getName());
+                tempEntityList.remove(vnfcEntityDetails);
+                entities.addAll(vnfcMemberNodes);
             }
         }
 
-        getVNFCGroupSequenceList(strSequence, tempGroupList, nodes, iSdcCsarHelper);
+        getVNFCGroupSequenceList(strSequence, tempEntityList, entities, iSdcCsarHelper);
 
         return strSequence;
 
     }
 
-    private void getVNFCGroupSequenceList(List<String> strSequence, List<Group> groupList, List<NodeTemplate> nodes,
-            ISdcCsarHelper iSdcCsarHelper) {
-        if (CollectionUtils.isEmpty(groupList)) {
+    private void getVNFCGroupSequenceList(List<String> strSequence, List<IEntityDetails> vnfcGroupDetails,
+            List<IEntityDetails> vnfcMemberNodes, ISdcCsarHelper iSdcCsarHelper) {
+        if (CollectionUtils.isEmpty(vnfcGroupDetails)) {
             return;
         }
 
-        List<Group> tempGroupList = new ArrayList<>();
-        tempGroupList.addAll(groupList);
+        List<IEntityDetails> tempGroupList = new ArrayList<>();
+        tempGroupList.addAll(vnfcGroupDetails);
 
-        for (Group group : groupList) {
-            ArrayList<NodeTemplate> members = group.getMemberNodes();
-            for (NodeTemplate memberNode : members) {
+        for (IEntityDetails vnfcGroup : vnfcGroupDetails) {
+            List<IEntityDetails> members = vnfcGroup.getMemberNodes();
+            for (IEntityDetails memberNode : members) {
                 boolean isAllExists = true;
-                RequirementAssignments requirements = iSdcCsarHelper.getRequirementsOf(memberNode);
-                if (requirements == null || requirements.getAll() == null || requirements.getAll().isEmpty()) {
+
+
+                Map<String, RequirementAssignment> requirements = memberNode.getRequirements();
+
+                if (requirements == null || requirements.isEmpty()) {
                     continue;
                 }
-                List<RequirementAssignment> rqaList = requirements.getAll();
-                for (RequirementAssignment rqa : rqaList) {
+
+
+                for (Map.Entry<String, RequirementAssignment> entry : requirements.entrySet()) {
+                    RequirementAssignment rqa = entry.getValue();
                     String name = rqa.getNodeTemplateName();
-                    for (NodeTemplate node : nodes) {
+                    for (IEntityDetails node : vnfcMemberNodes) {
                         if (name.equals(node.getName())) {
                             break;
                         }
@@ -1108,14 +1143,14 @@ public class ToscaResourceInstaller {
                 }
 
                 if (isAllExists) {
-                    strSequence.add(group.getName());
-                    tempGroupList.remove(group);
-                    nodes.addAll(group.getMemberNodes());
+                    strSequence.add(vnfcGroup.getName());
+                    tempGroupList.remove(vnfcGroupDetails);
+                    vnfcMemberNodes.addAll(vnfcGroupDetails);
                 }
             }
 
-            if (!tempGroupList.isEmpty() && tempGroupList.size() < groupList.size()) {
-                getVNFCGroupSequenceList(strSequence, tempGroupList, nodes, iSdcCsarHelper);
+            if (!tempGroupList.isEmpty() && tempGroupList.size() < vnfcGroupDetails.size()) {
+                getVNFCGroupSequenceList(strSequence, tempGroupList, vnfcMemberNodes, iSdcCsarHelper);
             }
         }
     }
@@ -1337,7 +1372,14 @@ public class ToscaResourceInstaller {
 
         Metadata serviceMetadata = toscaResourceStructure.getServiceMetadata();
 
-        Service service = new Service();
+        List<Service> services =
+                serviceRepo.findByModelUUID(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_UUID));
+        Service service;
+        if (!services.isEmpty() && services.size() > 0) {
+            service = services.get(0);
+        } else {
+            service = new Service();
+        }
 
         if (serviceMetadata != null) {
 
@@ -1431,10 +1473,10 @@ public class ToscaResourceInstaller {
         return configCustomizationResource;
     }
 
-    protected ConfigurationResource createFabricConfiguration(NodeTemplate nodeTemplate,
+    protected ConfigurationResource createFabricConfiguration(IEntityDetails fabricEntity,
             ToscaResourceStructure toscaResourceStructure) {
 
-        Metadata fabricMetadata = nodeTemplate.getMetaData();
+        Metadata fabricMetadata = fabricEntity.getMetadata();
 
         ConfigurationResource configResource = new ConfigurationResource();
 
@@ -1443,13 +1485,20 @@ public class ToscaResourceInstaller {
         configResource.setModelUUID(fabricMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_UUID));
         configResource.setModelVersion(fabricMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_VERSION));
         configResource.setDescription(fabricMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION));
-        configResource.setToscaNodeType(nodeTemplate.getType());
+        configResource.setToscaNodeType(fabricEntity.getToscaType());
 
         return configResource;
     }
 
     protected void createToscaCsar(ToscaResourceStructure toscaResourceStructure) {
-        ToscaCsar toscaCsar = new ToscaCsar();
+        Optional<ToscaCsar> toscaCsarOpt =
+                toscaCsarRepo.findById(toscaResourceStructure.getToscaArtifact().getArtifactUUID());
+        ToscaCsar toscaCsar;
+        if (toscaCsarOpt.isPresent()) {
+            toscaCsar = toscaCsarOpt.get();
+        } else {
+            toscaCsar = new ToscaCsar();
+        }
         if (toscaResourceStructure.getToscaArtifact().getArtifactChecksum() != null) {
             toscaCsar.setArtifactChecksum(toscaResourceStructure.getToscaArtifact().getArtifactChecksum());
         } else {
@@ -1474,7 +1523,6 @@ public class ToscaResourceInstaller {
 
         if (vnfcCustomization == null)
             vnfcCustomization = vnfcCustomizationRepo.findOneByModelCustomizationUUID(customizationUUID);
-        // vnfcCustomization = new VnfcCustomization();
 
         return vnfcCustomization;
     }
@@ -1821,10 +1869,11 @@ public class ToscaResourceInstaller {
         return collectionNetworkResourceCustomization;
     }
 
-    protected VnfcInstanceGroupCustomization createVNFCInstanceGroup(NodeTemplate vnfcNodeTemplate, Group group,
-            VnfResourceCustomization vnfResourceCustomization, ToscaResourceStructure toscaResourceStructure) {
+    protected VnfcInstanceGroupCustomization createVNFCInstanceGroup(IEntityDetails vfcInstanceEntity,
+            NodeTemplate vnfcNodeTemplate, VnfResourceCustomization vnfResourceCustomization,
+            ToscaResourceStructure toscaResourceStructure) {
 
-        Metadata instanceMetadata = group.getMetadata();
+        Metadata instanceMetadata = vfcInstanceEntity.getMetadata();
 
         InstanceGroup existingInstanceGroup =
                 instanceGroupRepo.findByModelUUID(instanceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_UUID));
@@ -1838,7 +1887,7 @@ public class ToscaResourceInstaller {
                     .setModelInvariantUUID(instanceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID));
             vfcInstanceGroup.setModelUUID(instanceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_UUID));
             vfcInstanceGroup.setModelVersion(instanceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_VERSION));
-            vfcInstanceGroup.setToscaNodeType(group.getType());
+            vfcInstanceGroup.setToscaNodeType(vfcInstanceEntity.getToscaType());
             vfcInstanceGroup.setRole("SUB-INTERFACE"); // Set Role
             vfcInstanceGroup.setType(InstanceGroupType.VNFC); // Set type
         } else {
@@ -1857,53 +1906,80 @@ public class ToscaResourceInstaller {
         vfcInstanceGroupCustom.setDescription(instanceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION));
 
         String getInputName = null;
-        String groupProperty = toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group,
-                "vfc_instance_group_function");
-        if (groupProperty != null) {
-            int getInputIndex = groupProperty.indexOf("{get_input=");
-            if (getInputIndex > -1) {
-                getInputName = groupProperty.substring(getInputIndex + 11, groupProperty.length() - 1);
+
+        Map<String, Property> groupProperties = vfcInstanceEntity.getProperties();
+
+        for (String key : groupProperties.keySet()) {
+            Property property = groupProperties.get(key);
+
+            String vfcName = property.getName();
+
+            if (vfcName != null) {
+                if (vfcName.equals("vfc_instance_group_function")) {
+
+                    String vfcValue = property.getValue().toString();
+                    int getInputIndex = vfcValue.indexOf("{get_input=");
+                    if (getInputIndex > -1) {
+                        getInputName = vfcValue.substring(getInputIndex + 11, vfcValue.length() - 1);
+                    }
+
+                }
             }
+
         }
-        vfcInstanceGroupCustom.setFunction(toscaResourceStructure.getSdcCsarHelper()
-                .getNodeTemplatePropertyLeafValue(vnfcNodeTemplate, getInputName));
+
+        List<IEntityDetails> serviceEntityList = getEntityDetails(toscaResourceStructure,
+                EntityQuery.newBuilder(SdcTypes.VF)
+                        .customizationUUID(vnfResourceCustomization.getModelCustomizationUUID()),
+                TopologyTemplateQuery.newBuilder(SdcTypes.SERVICE), false);
+
+        if (serviceEntityList != null && !serviceEntityList.isEmpty()) {
+            vfcInstanceGroupCustom.setFunction(getLeafPropertyValue(serviceEntityList.get(0), getInputName));
+        }
+
         vfcInstanceGroupCustom.setInstanceGroup(vfcInstanceGroup);
 
         ArrayList<Input> inputs = vnfcNodeTemplate.getSubMappingToscaTemplate().getInputs();
-        createVFCInstanceGroupMembers(vfcInstanceGroupCustom, group, inputs);
+        createVFCInstanceGroupMembers(vfcInstanceGroupCustom, vfcInstanceEntity, inputs);
 
         return vfcInstanceGroupCustom;
-
     }
 
-    private void createVFCInstanceGroupMembers(VnfcInstanceGroupCustomization vfcInstanceGroupCustom, Group group,
-            List<Input> inputList) {
-        List<NodeTemplate> members = group.getMemberNodes();
+    private void createVFCInstanceGroupMembers(VnfcInstanceGroupCustomization vfcInstanceGroupCustom,
+            IEntityDetails vfcModuleEntity, List<Input> inputList) {
+        List<IEntityDetails> members = vfcModuleEntity.getMemberNodes();
         if (!CollectionUtils.isEmpty(members)) {
-            for (NodeTemplate vfcTemplate : members) {
+            for (IEntityDetails vfcEntity : members) {
                 VnfcCustomization vnfcCustomization = new VnfcCustomization();
 
-                Metadata metadata = vfcTemplate.getMetaData();
+                Metadata metadata = vfcEntity.getMetadata();
                 vnfcCustomization
                         .setModelCustomizationUUID(metadata.getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID));
-                vnfcCustomization.setModelInstanceName(vfcTemplate.getName());
+                vnfcCustomization.setModelInstanceName(vfcEntity.getName());
                 vnfcCustomization.setModelUUID(metadata.getValue(SdcPropertyNames.PROPERTY_NAME_UUID));
                 vnfcCustomization
                         .setModelInvariantUUID(metadata.getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID));
                 vnfcCustomization.setModelVersion(metadata.getValue(SdcPropertyNames.PROPERTY_NAME_VERSION));
                 vnfcCustomization.setModelName(metadata.getValue(SdcPropertyNames.PROPERTY_NAME_NAME));
-                vnfcCustomization.setToscaNodeType(testNull(vfcTemplate.getType()));
+                vnfcCustomization.setToscaNodeType(testNull(vfcEntity.getToscaType()));
                 vnfcCustomization
                         .setDescription(testNull(metadata.getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION)));
-                vnfcCustomization.setResourceInput(getVnfcResourceInput(vfcTemplate, inputList));
-                vfcInstanceGroupCustom.getVnfcCustomizations().add(vnfcCustomization);
+                vnfcCustomization.setResourceInput(getVnfcResourceInput(vfcEntity, inputList));
+                vnfcCustomization.setVnfcInstanceGroupCustomization(vfcInstanceGroupCustom);
+                List<VnfcCustomization> vnfcCustomizations = vfcInstanceGroupCustom.getVnfcCustomizations();
+
+                if (vnfcCustomizations == null) {
+                    vnfcCustomizations = new ArrayList<>();
+                    vfcInstanceGroupCustom.setVnfcCustomizations(vnfcCustomizations);
+                }
+                vnfcCustomizations.add(vnfcCustomization);
             }
         }
     }
 
-    public String getVnfcResourceInput(NodeTemplate vfcTemplate, List<Input> inputList) {
+    public String getVnfcResourceInput(IEntityDetails vfcEntity, List<Input> inputList) {
         Map<String, String> resouceRequest = new HashMap<>();
-        LinkedHashMap<String, Property> vfcTemplateProperties = vfcTemplate.getProperties();
+        Map<String, Property> vfcTemplateProperties = vfcEntity.getProperties();
         for (String key : vfcTemplateProperties.keySet()) {
             Property property = vfcTemplateProperties.get(key);
             String resourceValue = getValue(property.getValue(), inputList);
@@ -1911,7 +1987,7 @@ public class ToscaResourceInstaller {
         }
 
         String resourceCustomizationUuid =
-                vfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID);
+                vfcEntity.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID);
 
         String jsonStr = null;
         try {
@@ -1928,22 +2004,26 @@ public class ToscaResourceInstaller {
         return jsonStr;
     }
 
-    protected VfModuleCustomization createVFModuleResource(Group group, NodeTemplate vfTemplate,
+    protected VfModuleCustomization createVFModuleResource(IEntityDetails vfModuleEntityDetails,
             ToscaResourceStructure toscaResourceStructure, VfResourceStructure vfResourceStructure,
-            IVfModuleData vfModuleData, VnfResourceCustomization vnfResource, Set<CvnfcCustomization> existingCvnfcSet,
-            Set<VnfcCustomization> existingVnfcSet,
+            IVfModuleData vfModuleData, VnfResourceCustomization vnfResource, Service service,
+            Set<CvnfcCustomization> existingCvnfcSet, Set<VnfcCustomization> existingVnfcSet,
             List<CvnfcConfigurationCustomization> existingCvnfcConfigurationCustom) {
 
         VfModuleCustomization vfModuleCustomization =
                 findExistingVfModuleCustomization(vnfResource, vfModuleData.getVfModuleModelCustomizationUUID());
+
         if (vfModuleCustomization == null) {
+
             VfModule vfModule = findExistingVfModule(vnfResource,
-                    vfTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELUUID));
-            Metadata vfMetadata = group.getMetadata();
+                    vfModuleEntityDetails.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELUUID));
+
+            Metadata vfMetadata = vfModuleEntityDetails.getMetadata();
             if (vfModule == null)
-                vfModule = createVfModule(group, toscaResourceStructure, vfModuleData, vfMetadata);
+                vfModule = createVfModule(vfModuleEntityDetails, toscaResourceStructure, vfModuleData, vfMetadata);
 
-            vfModuleCustomization = createVfModuleCustomization(group, toscaResourceStructure, vfModule, vfModuleData);
+            vfModuleCustomization =
+                    createVfModuleCustomization(vfModuleEntityDetails, toscaResourceStructure, vfModule, vfModuleData);
             vfModuleCustomization.setVnfCustomization(vnfResource);
             setHeatInformationForVfModule(toscaResourceStructure, vfResourceStructure, vfModule, vfModuleCustomization,
                     vfMetadata);
@@ -1963,43 +2043,55 @@ public class ToscaResourceInstaller {
         Set<VnfcCustomization> vnfcCustomizations = new HashSet<>();
 
         // Only set the CVNFC if this vfModule group is a member of it.
-        List<NodeTemplate> groupMembers =
-                toscaResourceStructure.getSdcCsarHelper().getMembersOfVfModule(vfTemplate, group);
-        String vfModuleMemberName = null;
 
-        for (NodeTemplate node : groupMembers) {
-            vfModuleMemberName = node.getName();
-        }
+        List<IEntityDetails> groupMembers = getEntityDetails(toscaResourceStructure,
+                EntityQuery.newBuilder("org.openecomp.groups.VfModule")
+                        .uUID(vfModuleCustomization.getVfModule().getModelUUID()),
+                TopologyTemplateQuery.newBuilder(SdcTypes.VF), false);
+
+        String vfModuleMemberName = null;
 
         // Extract CVFC lists
-        List<NodeTemplate> cvfcList =
-                toscaResourceStructure.getSdcCsarHelper().getNodeTemplateBySdcType(vfTemplate, SdcTypes.CVFC);
+        List<IEntityDetails> cvnfcEntityList = getEntityDetails(toscaResourceStructure,
+                EntityQuery.newBuilder(SdcTypes.CVFC), TopologyTemplateQuery.newBuilder(SdcTypes.VF), false);
+
 
-        for (NodeTemplate cvfcTemplate : cvfcList) {
+        for (IEntityDetails cvfcEntity : cvnfcEntityList) {
             boolean cvnfcVfModuleNameMatch = false;
 
-            for (NodeTemplate node : groupMembers) {
-                vfModuleMemberName = node.getName();
+            for (IEntityDetails entity : groupMembers) {
+
+                List<IEntityDetails> groupMembersNodes = entity.getMemberNodes();
+                for (IEntityDetails groupMember : groupMembersNodes) {
+
+                    vfModuleMemberName = groupMember.getName();
+
+                    if (vfModuleMemberName.equalsIgnoreCase(cvfcEntity.getName())) {
+                        cvnfcVfModuleNameMatch = true;
+                        break;
+                    }
 
-                if (vfModuleMemberName.equalsIgnoreCase(cvfcTemplate.getName())) {
-                    cvnfcVfModuleNameMatch = true;
-                    break;
                 }
             }
 
+
             if (vfModuleMemberName != null && cvnfcVfModuleNameMatch) {
 
                 // Extract associated VFC - Should always be just one
-                List<NodeTemplate> vfcList =
-                        toscaResourceStructure.getSdcCsarHelper().getNodeTemplateBySdcType(cvfcTemplate, SdcTypes.VFC);
+                List<IEntityDetails> vfcEntityList = getEntityDetails(toscaResourceStructure,
+                        EntityQuery.newBuilder(SdcTypes.VFC),
+                        TopologyTemplateQuery.newBuilder(SdcTypes.CVFC).customizationUUID(
+                                cvfcEntity.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID)),
+                        false);
 
-                for (NodeTemplate vfcTemplate : vfcList) {
+
+                for (IEntityDetails vfcEntity : vfcEntityList) {
 
                     VnfcCustomization vnfcCustomization = new VnfcCustomization();
                     VnfcCustomization existingVnfcCustomization = null;
 
                     existingVnfcCustomization = findExistingVfc(existingVnfcSet,
-                            vfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID));
+                            vfcEntity.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID));
 
                     if (existingVnfcCustomization == null) {
                         vnfcCustomization = new VnfcCustomization();
@@ -2008,23 +2100,24 @@ public class ToscaResourceInstaller {
                     }
 
                     // Only Add Abstract VNFC's to our DB, ignore all others
-                    if (existingVnfcCustomization == null && vfcTemplate.getMetaData()
+                    if (existingVnfcCustomization == null && vfcEntity.getMetadata()
                             .getValue(SdcPropertyNames.PROPERTY_NAME_SUBCATEGORY).equalsIgnoreCase("Abstract")) {
+
                         vnfcCustomization.setModelCustomizationUUID(
-                                vfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID));
-                        vnfcCustomization.setModelInstanceName(vfcTemplate.getName());
+                                vfcEntity.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID));
+                        vnfcCustomization.setModelInstanceName(vfcEntity.getName());
                         vnfcCustomization.setModelInvariantUUID(
-                                vfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID));
+                                vfcEntity.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID));
                         vnfcCustomization
-                                .setModelName(vfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_NAME));
+                                .setModelName(vfcEntity.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_NAME));
                         vnfcCustomization
-                                .setModelUUID(vfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID));
+                                .setModelUUID(vfcEntity.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_UUID));
 
                         vnfcCustomization.setModelVersion(
-                                testNull(vfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_VERSION)));
-                        vnfcCustomization.setDescription(testNull(
-                                vfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION)));
-                        vnfcCustomization.setToscaNodeType(testNull(vfcTemplate.getType()));
+                                testNull(vfcEntity.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VERSION)));
+                        vnfcCustomization.setDescription(
+                                testNull(vfcEntity.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION)));
+                        vnfcCustomization.setToscaNodeType(testNull(vfcEntity.getToscaType()));
 
                         vnfcCustomizations.add(vnfcCustomization);
                         existingVnfcSet.add(vnfcCustomization);
@@ -2036,20 +2129,20 @@ public class ToscaResourceInstaller {
                     if (vnfcCustomization.getModelCustomizationUUID() != null) {
                         CvnfcCustomization cvnfcCustomization = new CvnfcCustomization();
                         cvnfcCustomization.setModelCustomizationUUID(
-                                cvfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID));
-                        cvnfcCustomization.setModelInstanceName(cvfcTemplate.getName());
+                                cvfcEntity.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID));
+                        cvnfcCustomization.setModelInstanceName(cvfcEntity.getName());
                         cvnfcCustomization.setModelInvariantUUID(
-                                cvfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID));
+                                cvfcEntity.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID));
                         cvnfcCustomization
-                                .setModelName(cvfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_NAME));
+                                .setModelName(cvfcEntity.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_NAME));
                         cvnfcCustomization
-                                .setModelUUID(cvfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID));
+                                .setModelUUID(cvfcEntity.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_UUID));
 
                         cvnfcCustomization.setModelVersion(
-                                testNull(cvfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_VERSION)));
+                                testNull(cvfcEntity.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VERSION)));
                         cvnfcCustomization.setDescription(testNull(
-                                cvfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION)));
-                        cvnfcCustomization.setToscaNodeType(testNull(cvfcTemplate.getType()));
+                                cvfcEntity.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION)));
+                        cvnfcCustomization.setToscaNodeType(testNull(cvfcEntity.getToscaType()));
 
                         if (existingVnfcCustomization != null) {
                             cvnfcCustomization.setVnfcCustomization(existingVnfcCustomization);
@@ -2057,44 +2150,52 @@ public class ToscaResourceInstaller {
                             cvnfcCustomization.setVnfcCustomization(vnfcCustomization);
                         }
 
-                        cvnfcCustomization.setNfcFunction(toscaResourceStructure.getSdcCsarHelper()
-                                .getNodeTemplatePropertyLeafValue(cvfcTemplate, "nfc_function"));
-                        cvnfcCustomization.setNfcNamingCode(toscaResourceStructure.getSdcCsarHelper()
-                                .getNodeTemplatePropertyLeafValue(cvfcTemplate, "nfc_naming_code"));
-                        cvnfcCustomization.setVfModuleCustomization(vfModuleCustomization);
+                        cvnfcCustomization.setNfcFunction(getLeafPropertyValue(cvfcEntity, "nfc_function"));
+                        cvnfcCustomization.setNfcNamingCode(getLeafPropertyValue(cvfcEntity, "nfc_naming_code"));
 
+                        cvnfcCustomization.setVfModuleCustomization(vfModuleCustomization);
 
                         // *****************************************************************************************************************************************
                         // * Extract Fabric Configuration
                         // *****************************************************************************************************************************************
 
-                        List<NodeTemplate> fabricConfigList = toscaResourceStructure.getSdcCsarHelper()
-                                .getNodeTemplateBySdcType(vfTemplate, SdcTypes.CONFIGURATION);
+                        List<IEntityDetails> fabricEntityList =
+                                getEntityDetails(toscaResourceStructure, EntityQuery.newBuilder(SdcTypes.CONFIGURATION),
+                                        TopologyTemplateQuery.newBuilder(SdcTypes.VF), false);
 
-                        for (NodeTemplate fabricTemplate : fabricConfigList) {
+                        for (IEntityDetails fabricEntity : fabricEntityList) {
 
-                            ConfigurationResource fabricConfig = null;
+                            Map<String, RequirementAssignment> requirements = fabricEntity.getRequirements();
 
-                            ConfigurationResource existingConfig =
-                                    findExistingConfiguration(existingCvnfcConfigurationCustom,
-                                            fabricTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID));
+                            for (RequirementAssignment requirement : requirements.values()) {
 
-                            if (existingConfig == null) {
+                                if (requirement.getNodeTemplateName().equals(cvfcEntity.getName())) {
 
-                                fabricConfig = createFabricConfiguration(fabricTemplate, toscaResourceStructure);
+                                    ConfigurationResource fabricConfig = null;
 
-                            } else {
-                                fabricConfig = existingConfig;
-                            }
+                                    ConfigurationResource existingConfig = findExistingConfiguration(
+                                            existingCvnfcConfigurationCustom,
+                                            fabricEntity.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_UUID));
+
+                                    if (existingConfig == null) {
 
-                            CvnfcConfigurationCustomization cvnfcConfigurationCustomization =
-                                    createCvnfcConfigurationCustomization(fabricTemplate, toscaResourceStructure,
-                                            vnfResource, vfModuleCustomization, cvnfcCustomization, fabricConfig,
-                                            vfTemplate, vfModuleMemberName);
+                                        fabricConfig = createFabricConfiguration(fabricEntity, toscaResourceStructure);
 
-                            cvnfcConfigurationCustomizations.add(cvnfcConfigurationCustomization);
+                                    } else {
+                                        fabricConfig = existingConfig;
+                                    }
 
-                            existingCvnfcConfigurationCustom.add(cvnfcConfigurationCustomization);
+                                    CvnfcConfigurationCustomization cvnfcConfigurationCustomization =
+                                            createCvnfcConfigurationCustomization(fabricEntity, toscaResourceStructure,
+                                                    vnfResource, vfModuleCustomization, cvnfcCustomization,
+                                                    fabricConfig, vfModuleMemberName);
+
+                                    cvnfcConfigurationCustomizations.add(cvnfcConfigurationCustomization);
+
+                                    existingCvnfcConfigurationCustom.add(cvnfcConfigurationCustomization);
+
+                                }
+                            }
 
                         }
                         cvnfcCustomization.setCvnfcConfigurationCustomization(cvnfcConfigurationCustomizations);
@@ -2112,12 +2213,12 @@ public class ToscaResourceInstaller {
         return vfModuleCustomization;
     }
 
-    protected CvnfcConfigurationCustomization createCvnfcConfigurationCustomization(NodeTemplate fabricTemplate,
+    protected CvnfcConfigurationCustomization createCvnfcConfigurationCustomization(IEntityDetails fabricEntity,
             ToscaResourceStructure toscaResourceStruct, VnfResourceCustomization vnfResource,
             VfModuleCustomization vfModuleCustomization, CvnfcCustomization cvnfcCustomization,
-            ConfigurationResource configResource, NodeTemplate vfTemplate, String vfModuleMemberName) {
+            ConfigurationResource configResource, String vfModuleMemberName) {
 
-        Metadata fabricMetadata = fabricTemplate.getMetaData();
+        Metadata fabricMetadata = fabricEntity.getMetadata();
 
         CvnfcConfigurationCustomization cvnfcConfigurationCustomization = new CvnfcConfigurationCustomization();
 
@@ -2127,34 +2228,33 @@ public class ToscaResourceInstaller {
 
         cvnfcConfigurationCustomization
                 .setModelCustomizationUUID(fabricMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID));
-        cvnfcConfigurationCustomization.setModelInstanceName(fabricTemplate.getName());
+        cvnfcConfigurationCustomization.setModelInstanceName(fabricEntity.getName());
+
+        List<IEntityDetails> policyList =
+                getEntityDetails(toscaResourceStruct, EntityQuery.newBuilder("org.openecomp.policies.External"),
+                        TopologyTemplateQuery.newBuilder(SdcTypes.VF), true);
 
-        List<Policy> policyList = toscaResourceStruct.getSdcCsarHelper()
-                .getPoliciesOfOriginOfNodeTemplateByToscaPolicyType(vfTemplate, "org.openecomp.policies.External");
 
         if (policyList != null) {
-            for (Policy policy : policyList) {
+            for (IEntityDetails policyEntity : policyList) {
 
-                for (String policyCvfcTarget : policy.getTargets()) {
+                for (String policyCvfcTarget : policyEntity.getTargets()) {
 
                     if (policyCvfcTarget.equalsIgnoreCase(vfModuleMemberName)) {
 
-                        Map<String, Object> propMap = policy.getPolicyProperties();
+                        String policyType = getLeafPropertyValue(policyEntity, "type");
 
-                        if (propMap.get("type").toString().equalsIgnoreCase("Fabric Policy")) {
-                            cvnfcConfigurationCustomization.setPolicyName(propMap.get("name").toString());
+                        if (policyType != null && policyType.equalsIgnoreCase("Fabric Policy")) {
+                            cvnfcConfigurationCustomization.setPolicyName(getLeafPropertyValue(policyEntity, "name"));
                         }
                     }
                 }
             }
         }
 
-        cvnfcConfigurationCustomization.setConfigurationFunction(
-                toscaResourceStruct.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(fabricTemplate, "function"));
-        cvnfcConfigurationCustomization.setConfigurationRole(
-                toscaResourceStruct.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(fabricTemplate, "role"));
-        cvnfcConfigurationCustomization.setConfigurationType(
-                toscaResourceStruct.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(fabricTemplate, "type"));
+        cvnfcConfigurationCustomization.setConfigurationFunction(getLeafPropertyValue(fabricEntity, "function"));
+        cvnfcConfigurationCustomization.setConfigurationRole(getLeafPropertyValue(fabricEntity, "role"));
+        cvnfcConfigurationCustomization.setConfigurationType(getLeafPropertyValue(fabricEntity, "type"));
 
         return cvnfcConfigurationCustomization;
     }
@@ -2210,7 +2310,7 @@ public class ToscaResourceInstaller {
         return vfModule;
     }
 
-    protected VfModuleCustomization createVfModuleCustomization(Group group,
+    protected VfModuleCustomization createVfModuleCustomization(IEntityDetails vfModuleEntityDetails,
             ToscaResourceStructure toscaResourceStructure, VfModule vfModule, IVfModuleData vfModuleData) {
         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
 
@@ -2218,62 +2318,64 @@ public class ToscaResourceInstaller {
 
         vfModuleCustomization.setVfModule(vfModule);
 
-        String initialCount = toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group,
-                SdcPropertyNames.PROPERTY_NAME_INITIALCOUNT);
+        String initialCount = getLeafPropertyValue(vfModuleEntityDetails, SdcPropertyNames.PROPERTY_NAME_INITIALCOUNT);
+
+
         if (initialCount != null && initialCount.length() > 0) {
             vfModuleCustomization.setInitialCount(Integer.valueOf(initialCount));
         }
 
-        vfModuleCustomization.setInitialCount(Integer.valueOf(toscaResourceStructure.getSdcCsarHelper()
-                .getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_INITIALCOUNT)));
+        String availabilityZoneCount =
+                getLeafPropertyValue(vfModuleEntityDetails, SdcPropertyNames.PROPERTY_NAME_AVAILABILITYZONECOUNT);
 
-        String availabilityZoneCount = toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group,
-                SdcPropertyNames.PROPERTY_NAME_AVAILABILITYZONECOUNT);
         if (availabilityZoneCount != null && availabilityZoneCount.length() > 0) {
             vfModuleCustomization.setAvailabilityZoneCount(Integer.valueOf(availabilityZoneCount));
         }
 
-        vfModuleCustomization.setLabel(toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group,
-                SdcPropertyNames.PROPERTY_NAME_VFMODULELABEL));
+        vfModuleCustomization
+                .setLabel(getLeafPropertyValue(vfModuleEntityDetails, SdcPropertyNames.PROPERTY_NAME_VFMODULELABEL));
+
+        String maxInstances =
+                getLeafPropertyValue(vfModuleEntityDetails, SdcPropertyNames.PROPERTY_NAME_MAXVFMODULEINSTANCES);
 
-        String maxInstances = toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group,
-                SdcPropertyNames.PROPERTY_NAME_MAXVFMODULEINSTANCES);
         if (maxInstances != null && maxInstances.length() > 0) {
             vfModuleCustomization.setMaxInstances(Integer.valueOf(maxInstances));
         }
 
-        String minInstances = toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group,
-                SdcPropertyNames.PROPERTY_NAME_MINVFMODULEINSTANCES);
+        String minInstances =
+                getLeafPropertyValue(vfModuleEntityDetails, SdcPropertyNames.PROPERTY_NAME_MINVFMODULEINSTANCES);
+
         if (minInstances != null && minInstances.length() > 0) {
             vfModuleCustomization.setMinInstances(Integer.valueOf(minInstances));
         }
         return vfModuleCustomization;
     }
 
-    protected VfModule createVfModule(Group group, ToscaResourceStructure toscaResourceStructure,
+    protected VfModule createVfModule(IEntityDetails groupEntityDetails, ToscaResourceStructure toscaResourceStructure,
             IVfModuleData vfModuleData, Metadata vfMetadata) {
         VfModule vfModule = new VfModule();
         String vfModuleModelUUID = vfModuleData.getVfModuleModelUUID();
 
         if (vfModuleModelUUID == null) {
-            vfModuleModelUUID = testNull(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata,
-                    SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELUUID));
+
+            vfModuleModelUUID = testNull(
+                    groupEntityDetails.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELUUID));
+
         } else if (vfModuleModelUUID.indexOf('.') > -1) {
             vfModuleModelUUID = vfModuleModelUUID.substring(0, vfModuleModelUUID.indexOf('.'));
         }
 
-        vfModule.setModelInvariantUUID(testNull(toscaResourceStructure.getSdcCsarHelper()
-                .getMetadataPropertyValue(vfMetadata, SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELINVARIANTUUID)));
-        vfModule.setModelName(testNull(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata,
-                SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELNAME)));
+        vfModule.setModelInvariantUUID(
+                groupEntityDetails.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELINVARIANTUUID));
+        vfModule.setModelName(
+                groupEntityDetails.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELNAME));
         vfModule.setModelUUID(vfModuleModelUUID);
-        vfModule.setModelVersion(testNull(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata,
-                SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELVERSION)));
-        vfModule.setDescription(testNull(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata,
-                SdcPropertyNames.PROPERTY_NAME_DESCRIPTION)));
+        vfModule.setModelVersion(
+                groupEntityDetails.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELVERSION));
+        vfModule.setDescription(groupEntityDetails.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION));
+
+        String vfModuleType = getLeafPropertyValue(groupEntityDetails, SdcPropertyNames.PROPERTY_NAME_VFMODULETYPE);
 
-        String vfModuleType = toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group,
-                SdcPropertyNames.PROPERTY_NAME_VFMODULETYPE);
         if (vfModuleType != null && "Base".equalsIgnoreCase(vfModuleType)) {
             vfModule.setIsBase(true);
         } else {
@@ -2378,19 +2480,20 @@ public class ToscaResourceInstaller {
         }
     }
 
-    protected VnfResourceCustomization createVnfResource(NodeTemplate vfNodeTemplate,
+    protected VnfResourceCustomization createVnfResource(IEntityDetails entityDetails,
             ToscaResourceStructure toscaResourceStructure, Service service) throws ArtifactInstallerException {
         VnfResourceCustomization vnfResourceCustomization = null;
         if (vnfResourceCustomization == null) {
+
             VnfResource vnfResource = findExistingVnfResource(service,
-                    vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID));
+                    entityDetails.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_UUID));
 
             if (vnfResource == null) {
-                vnfResource = createVnfResource(vfNodeTemplate);
+                vnfResource = createVnfResource(entityDetails);
             }
 
             vnfResourceCustomization =
-                    createVnfResourceCustomization(vfNodeTemplate, toscaResourceStructure, vnfResource);
+                    createVnfResourceCustomization(entityDetails, toscaResourceStructure, vnfResource);
             vnfResourceCustomization.setVnfResources(vnfResource);
             vnfResourceCustomization.setService(service);
 
@@ -2417,61 +2520,56 @@ public class ToscaResourceInstaller {
         return vnfResource;
     }
 
-    protected VnfResourceCustomization createVnfResourceCustomization(NodeTemplate vfNodeTemplate,
+    protected VnfResourceCustomization createVnfResourceCustomization(IEntityDetails entityDetails,
             ToscaResourceStructure toscaResourceStructure, VnfResource vnfResource) {
         VnfResourceCustomization vnfResourceCustomization = new VnfResourceCustomization();
         vnfResourceCustomization.setModelCustomizationUUID(
-                testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID)));
-        vnfResourceCustomization.setModelInstanceName(vfNodeTemplate.getName());
-
-        vnfResourceCustomization.setNfFunction(testNull(toscaResourceStructure.getSdcCsarHelper()
-                .getNodeTemplatePropertyLeafValue(vfNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFFUNCTION)));
-        vnfResourceCustomization.setNfNamingCode(testNull(toscaResourceStructure.getSdcCsarHelper()
-                .getNodeTemplatePropertyLeafValue(vfNodeTemplate, "nf_naming_code")));
-        vnfResourceCustomization.setNfRole(testNull(toscaResourceStructure.getSdcCsarHelper()
-                .getNodeTemplatePropertyLeafValue(vfNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFROLE)));
-        vnfResourceCustomization.setNfType(testNull(toscaResourceStructure.getSdcCsarHelper()
-                .getNodeTemplatePropertyLeafValue(vfNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFTYPE)));
+                entityDetails.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID));
 
-        vnfResourceCustomization.setMultiStageDesign(toscaResourceStructure.getSdcCsarHelper()
-                .getNodeTemplatePropertyLeafValue(vfNodeTemplate, MULTI_STAGE_DESIGN));
+        vnfResourceCustomization.setModelInstanceName(entityDetails.getName());
+        vnfResourceCustomization
+                .setNfFunction(getLeafPropertyValue(entityDetails, SdcPropertyNames.PROPERTY_NAME_NFFUNCTION));
+        vnfResourceCustomization.setNfNamingCode(getLeafPropertyValue(entityDetails, "nf_naming_code"));
+        vnfResourceCustomization.setNfRole(getLeafPropertyValue(entityDetails, SdcPropertyNames.PROPERTY_NAME_NFROLE));
+        vnfResourceCustomization.setNfType(getLeafPropertyValue(entityDetails, SdcPropertyNames.PROPERTY_NAME_NFTYPE));
 
-        vnfResourceCustomization.setBlueprintName(testNull(toscaResourceStructure.getSdcCsarHelper()
-                .getNodeTemplatePropertyLeafValue(vfNodeTemplate, SDNC_MODEL_NAME)));
+        vnfResourceCustomization.setMultiStageDesign(getLeafPropertyValue(entityDetails, MULTI_STAGE_DESIGN));
+        vnfResourceCustomization.setBlueprintName(getLeafPropertyValue(entityDetails, SDNC_MODEL_NAME));
+        vnfResourceCustomization.setBlueprintVersion(getLeafPropertyValue(entityDetails, SDNC_MODEL_VERSION));
 
-        vnfResourceCustomization.setBlueprintVersion(testNull(toscaResourceStructure.getSdcCsarHelper()
-                .getNodeTemplatePropertyLeafValue(vfNodeTemplate, SDNC_MODEL_VERSION)));
+        String skipPostInstConfText = getLeafPropertyValue(entityDetails, SKIP_POST_INST_CONF);
 
-        String skipPostInstConfText = toscaResourceStructure.getSdcCsarHelper()
-                .getNodeTemplatePropertyLeafValue(vfNodeTemplate, SKIP_POST_INST_CONF);
         if (skipPostInstConfText != null) {
-            vnfResourceCustomization.setSkipPostInstConf(Boolean.parseBoolean(skipPostInstConfText));
+            vnfResourceCustomization.setSkipPostInstConf(
+                    Boolean.parseBoolean(getLeafPropertyValue(entityDetails, SKIP_POST_INST_CONF)));
         }
 
+
         vnfResourceCustomization.setVnfResources(vnfResource);
         vnfResourceCustomization.setAvailabilityZoneMaxCount(Integer.getInteger(
-                vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_AVAILABILITYZONECOUNT)));
+                entityDetails.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_AVAILABILITYZONECOUNT)));
+
+        entityDetails.getCapabilities().get(SCALABLE);
+
 
-        CapabilityAssignments vnfCustomizationCapability =
-                toscaResourceStructure.getSdcCsarHelper().getCapabilitiesOf(vfNodeTemplate);
+        if (entityDetails.getCapabilities() != null) {
 
-        if (vnfCustomizationCapability != null) {
-            CapabilityAssignment capAssign = vnfCustomizationCapability.getCapabilityByName(SCALABLE);
+            CapabilityAssignment capAssign = entityDetails.getCapabilities().get(SCALABLE);
 
             if (capAssign != null) {
-                vnfResourceCustomization.setMinInstances(Integer.getInteger(toscaResourceStructure.getSdcCsarHelper()
-                        .getCapabilityPropertyLeafValue(capAssign, SdcPropertyNames.PROPERTY_NAME_MININSTANCES)));
-                vnfResourceCustomization.setMaxInstances(Integer.getInteger(toscaResourceStructure.getSdcCsarHelper()
-                        .getCapabilityPropertyLeafValue(capAssign, SdcPropertyNames.PROPERTY_NAME_MAXINSTANCES)));
+                vnfResourceCustomization.setMinInstances(Integer
+                        .getInteger(getLeafPropertyValue(entityDetails, SdcPropertyNames.PROPERTY_NAME_MININSTANCES)));
+                vnfResourceCustomization.setMaxInstances(Integer
+                        .getInteger(getLeafPropertyValue(entityDetails, SdcPropertyNames.PROPERTY_NAME_MAXINSTANCES)));
             }
 
         }
 
         if (vnfResourceCustomization.getMinInstances() == null && vnfResourceCustomization.getMaxInstances() == null) {
-            vnfResourceCustomization.setMinInstances(Integer.getInteger(toscaResourceStructure.getSdcCsarHelper()
-                    .getNodeTemplatePropertyLeafValue(vfNodeTemplate, SdcPropertyNames.PROPERTY_NAME_MININSTANCES)));
-            vnfResourceCustomization.setMaxInstances(Integer.getInteger(toscaResourceStructure.getSdcCsarHelper()
-                    .getNodeTemplatePropertyLeafValue(vfNodeTemplate, SdcPropertyNames.PROPERTY_NAME_MAXINSTANCES)));
+            vnfResourceCustomization.setMinInstances(Integer
+                    .getInteger(getLeafPropertyValue(entityDetails, SdcPropertyNames.PROPERTY_NAME_MININSTANCES)));
+            vnfResourceCustomization.setMaxInstances(Integer
+                    .getInteger(getLeafPropertyValue(entityDetails, SdcPropertyNames.PROPERTY_NAME_MAXINSTANCES)));
         }
 
         toscaResourceStructure.setCatalogVnfResourceCustomization(vnfResourceCustomization);
@@ -2479,25 +2577,25 @@ public class ToscaResourceInstaller {
         return vnfResourceCustomization;
     }
 
-    protected VnfResource createVnfResource(NodeTemplate vfNodeTemplate) {
+    protected VnfResource createVnfResource(IEntityDetails entityDetails) {
         VnfResource vnfResource = new VnfResource();
         vnfResource.setModelInvariantUUID(
-                testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID)));
-        vnfResource.setModelName(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_NAME)));
-        vnfResource.setModelUUID(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID)));
+                testNull(entityDetails.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID)));
+        vnfResource.setModelName(testNull(entityDetails.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_NAME)));
+        vnfResource.setModelUUID(testNull(entityDetails.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_UUID)));
 
         vnfResource.setModelVersion(
-                testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_VERSION)));
+                testNull(entityDetails.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VERSION)));
         vnfResource.setDescription(
-                testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION)));
+                testNull(entityDetails.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION)));
         vnfResource.setOrchestrationMode(HEAT);
-        vnfResource.setToscaNodeType(testNull(vfNodeTemplate.getType()));
+        vnfResource.setToscaNodeType(testNull(entityDetails.getToscaType()));
         vnfResource.setAicVersionMax(
-                testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_MAXINSTANCES)));
+                testNull(entityDetails.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_MAXINSTANCES)));
         vnfResource.setAicVersionMin(
-                testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_MININSTANCES)));
-        vnfResource.setCategory(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CATEGORY));
-        vnfResource.setSubCategory(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_SUBCATEGORY));
+                testNull(entityDetails.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_MININSTANCES)));
+        vnfResource.setCategory(entityDetails.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_CATEGORY));
+        vnfResource.setSubCategory(entityDetails.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_SUBCATEGORY));
 
         return vnfResource;
     }
@@ -2672,25 +2770,13 @@ public class ToscaResourceInstaller {
                 + vfModuleStructure.getVfModuleMetadata().getVfModuleModelName();
     }
 
-    protected List<IEntityDetails> getEntityDetails(ToscaResourceStructure toscaResourceStruct, SdcTypes entityType,
-            SdcTypes topologyTemplate) {
+    protected List<IEntityDetails> getEntityDetails(ToscaResourceStructure toscaResourceStruct,
+            EntityQueryBuilder entityType, TopologyTemplateQueryBuilder topologyTemplateBuilder, boolean nestedSearch) {
 
-        EntityQuery entityQuery = EntityQuery.newBuilder(entityType).build();
-        TopologyTemplateQuery topologyTemplateQuery = TopologyTemplateQuery.newBuilder(topologyTemplate).build();
+        EntityQuery entityQuery = entityType.build();
+        TopologyTemplateQuery topologyTemplateQuery = topologyTemplateBuilder.build();
         List<IEntityDetails> entityDetails =
-                toscaResourceStruct.getSdcCsarHelper().getEntity(entityQuery, topologyTemplateQuery, false);
-
-        return entityDetails;
-
-    }
-
-    protected List<IEntityDetails> getEntityDetails(ToscaResourceStructure toscaResourceStruct, String entityType,
-            SdcTypes topologyTemplate) {
-
-        EntityQuery entityQuery = EntityQuery.newBuilder(entityType).build();
-        TopologyTemplateQuery topologyTemplateQuery = TopologyTemplateQuery.newBuilder(topologyTemplate).build();
-        List<IEntityDetails> entityDetails =
-                toscaResourceStruct.getSdcCsarHelper().getEntity(entityQuery, topologyTemplateQuery, true);
+                toscaResourceStruct.getSdcCsarHelper().getEntity(entityQuery, topologyTemplateQuery, nestedSearch);
 
         return entityDetails;
 
@@ -2728,8 +2814,10 @@ public class ToscaResourceInstaller {
         if (!services.isEmpty()) {
             // service exist in db
             Service existingService = services.get(0);
-            List<VnfResourceCustomization> vnfCustomizations = existingService.getVnfCustomizations();
-            vnfCustomizations.forEach(e -> service.getVnfCustomizations().add(e));
+            List<VnfResourceCustomization> existingVnfCustomizations = existingService.getVnfCustomizations();
+            if (existingService != null) {
+                service.getVnfCustomizations().addAll(existingVnfCustomizations);
+            }
         }
         service.getVnfCustomizations().add(vnfResourceCustomization);
     }