import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.tuple.ImmutablePair;
        }
 
     public List<NodeTemplate> getNodeTemplateBySdcType(NodeTemplate parentNodeTemplate, SdcTypes sdcType) {
-        if (parentNodeTemplate == null) {
+       return getNodeTemplateBySdcType(parentNodeTemplate, sdcType, false); 
+    }
+    
+    private List<NodeTemplate> getNodeTemplateBySdcType(NodeTemplate parentNodeTemplate, SdcTypes sdcType, boolean isVNF)  {
+       
+       if (parentNodeTemplate == null) {
             log.error("getNodeTemplateBySdcType - nodeTemplate is null or empty");
             return new ArrayList<>();
         }
 
         if (substitutionMappings != null) {
             List<NodeTemplate> nodeTemplates = substitutionMappings.getNodeTemplates();
-            if (nodeTemplates != null && nodeTemplates.size() > 0)
-                return nodeTemplates.stream().filter(x -> (x.getMetaData() != null && sdcType.toString().equals(x.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_TYPE)))).collect(Collectors.toList());
-            else
+            if (nodeTemplates != null && nodeTemplates.size() > 0) {
+               if (sdcType.equals(SdcTypes.VFC) && isVNF)  {
+                       return nodeTemplates.stream()
+                               .filter(x -> (x.getMetaData() != null &&
+                                       sdcType.toString().equals(x.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_TYPE))) &&  (x.getType().endsWith("VnfConfiguration")))
+                               .collect(Collectors.toList());
+               }
+               else {
+                    return nodeTemplates.stream()
+                               .filter(x -> (x.getMetaData() != null &&
+                                       sdcType.toString().equals(x.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_TYPE))) &&  !(x.getType().endsWith("VnfConfiguration")))
+                               .collect(Collectors.toList());
+               }
+            }
+            else {
                 log.debug("getNodeTemplateBySdcType - SubstitutionMappings' node Templates not exist");
+            }
         } else
             log.debug("getNodeTemplateBySdcType - SubstitutionMappings not exist");
 
 
         return filterMap;
     }
+    
+       public NodeTemplate getVnfConfig(String vfCustomizationUuid) {
+               
+               if (GeneralUtility.isEmptyString(vfCustomizationUuid)) {
+            log.error("getVnfConfig - vfCustomizationId - is null or empty");
+            return null;
+        }
+
+        List<NodeTemplate> serviceVfList = getServiceVfList();
+        NodeTemplate vfInstance = getNodeTemplateByCustomizationUuid(serviceVfList, vfCustomizationUuid);
+        NodeTemplate vnfConfig = getNodeTemplateBySdcType(vfInstance, SdcTypes.VFC, true).stream().findAny().orElse(null);
+               return vnfConfig;
+       }
 
     /************************************* helper functions ***********************************/
     private Map<String, String> filterProperties(Object property, String path, FilterType filterType, String pattern, Map<String, String> filterMap) {
         TopologyTemplate topologyTemplate = toscaTemplate.getTopologyTemplate();
         return getNodeTemplateBySdcType(topologyTemplate, sdcType);
     }
+ 
 
     /************************************* helper functions ***********************************/
     private List<NodeTemplate> getNodeTemplateBySdcType(TopologyTemplate topologyTemplate, SdcTypes sdcType) {
         return null;
     }
 
+       
+
     
     
 }
 
     static ISdcCsarHelper fdntCsarHelper;
     static ISdcCsarHelper complexCps;
     static ISdcCsarHelper fdntCsarHelperWithInputs;
+    static ISdcCsarHelper nfodCsarHlper;
     static Map<String, HashMap<String, List<String>>> fdntCsarHelper_Data;
     
     @BeforeClass
         rainyCsarHelperSingleVf = getCsarHelper("csars/service-ServiceFdnt-csar.csar");
         complexCps = getCsarHelper("csars/service-consolidated-props-csar.csar");
                fdntCsarHelperWithInputs = getCsarHelper("csars/service-ServiceFdnt-with-get-input.csar");
-
+               nfodCsarHlper =  getCsarHelper("csars/service-NfodService-csar.csar");
         fdntCsarHelper_Data = new HashMap<String, HashMap<String, List<String>>>(){
                {
                        HashMap<String, List<String>> FDNT ;
 
            
 
 
+    
+    @Test
+    public void testGetVnfConfig() {
+       NodeTemplate vnfConfig = nfodCsarHlper.getVnfConfig("9bb2ef82-f8f6-4391-bc71-db063f15bf57");
+       assertNotNull(vnfConfig);
+       assertEquals("vnfConfiguration", vnfConfig.getMetaData().getValue("name"));
+    }
+    
+    @Test
+    public void testGetVnfConfigByNonFoundVNF() {
+       NodeTemplate vnfConfig = complexCps.getVnfConfig("f999e2ca-72c0-42d3-9b11-13f2122fb8ef");
+       assertNull(vnfConfig);
+    }
+    
+    @Test
+    public void testGetVnfConfigByDummyUUID() {
+       NodeTemplate vnfConfig = nfodCsarHlper.getVnfConfig("XXX");
+       assertNull(vnfConfig);
+    }
+    
+    @Test
+    public void testGetVnfConfigByNullUUID() {
+       NodeTemplate vnfConfig = nfodCsarHlper.getVnfConfig(null);
+       assertNull(vnfConfig);
+    }
+    
+    @Test
+    public void testGetVfcTypWithoutVnf() {
+       List<NodeTemplate> vfcList = nfodCsarHlper.getVfcListByVf("9bb2ef82-f8f6-4391-bc71-db063f15bf57");
+       assertNotNull(vfcList);
+       assertEquals(2, vfcList.size());
+    }
+    
 }