import java.util.*;
 import java.util.Map.Entry;
-import java.util.regex.Pattern;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
 import org.openecomp.sdc.toscaparser.api.elements.Metadata;
 import org.openecomp.sdc.toscaparser.api.elements.NodeType;
 import org.openecomp.sdc.toscaparser.api.functions.Function;
-import org.openecomp.sdc.toscaparser.api.functions.GetInput;
 import org.openecomp.sdc.toscaparser.api.parameters.Input;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
                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")))
+                                       sdcType.toString().equals(x.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_TYPE))) &&  isVNFType(x))
                                .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")))
+                                       sdcType.toString().equals(x.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_TYPE))) &&  !isVNFType(x))
                                .collect(Collectors.toList());
                }
             }
         return false;
     }
 
+    @Override
+    public List<NodeTemplate> getNodeTemplateChildren(NodeTemplate nodeTemplate) {
+        if (nodeTemplate == null) {
+            log.error("getNodeTemplateChildren - nodeTemplate - is null");
+            return new ArrayList<>();
+        }
+
+        SubstitutionMappings substitutionMappings = nodeTemplate.getSubMappingToscaTemplate();
+        if (substitutionMappings != null) {
+            List<NodeTemplate> nodeTemplates = substitutionMappings.getNodeTemplates();
+            if (nodeTemplates != null && nodeTemplates.size() > 0) {
+
+                return nodeTemplates.stream()
+                        .filter(x -> !isVNFType(x))
+                        .collect(Collectors.toList());
+            }
+            else {
+                log.debug("getNodeTemplateChildren - SubstitutionMappings' node Templates not exist");
+            }
+        } else
+            log.debug("getNodeTemplateChildren - SubstitutionMappings not exist");
+
+        return new ArrayList<>();
+    }
+
     /************************************* helper functions ***********************************/
+    private boolean isVNFType(NodeTemplate nt) {
+        return nt.getType().endsWith("VnfConfiguration");
+    }
+
     private Map<String, String> filterProperties(Object property, String path, FilterType filterType, String pattern, Map<String, String> filterMap) {
 
         if (property instanceof Map) {
 
 
 
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 
        public void testNestedVfcByExistCvfc() {
                List<NodeTemplate> vfcList = nestedVfcCsarHlper.getVfcListByVf("71389f8b-8671-4a43-a991-59fb621d3615");
                assertNotNull(vfcList);
-               assertEquals(1, vfcList.size());
-               assertEquals("VF_VNF", vfcList.get(0).getName());
+               assertEquals(vfcList.size(), 2);
+               assertEquals("VFC1 DUMMY", vfcList.get(0).getName());
+               assertEquals("VF_VNF", vfcList.get(1).getName());
        }
 
        @Test
        @Test
        public void testHasTopologyByCVFC() {
                List<NodeTemplate> vfcList = nestedVfcCsarHlper.getVfcListByVf("71389f8b-8671-4a43-a991-59fb621d3615");
-               boolean hasTopology = nestedVfcCsarHlper.hasTopology(vfcList.get(0));
+               boolean hasTopology = nestedVfcCsarHlper.hasTopology(vfcList.get(1));
                assertEquals(true, hasTopology);
        }
 
        }
        //endregion
 
+       //region getNodeTemplateChildren
+       @Test
+       public void testGetNodeTemplatesListOfNodeTemplateByVF() {
+               List<NodeTemplate> vfList = fdntCsarHelper.getServiceVfList();
+               List<NodeTemplate> children = fdntCsarHelper.getNodeTemplateChildren(vfList.get(0));
+               assertNotNull(children);
+               assertEquals(3, children.size());
+
+               children.sort(Comparator.comparing(NodeTemplate::getName));
+
+               assertEquals("DNT_FW_RSG_SI_1", children.get(1).getName());
+               assertEquals("VFC", children.get(1).getMetaData().getValue("type"));
+               assertEquals("DNT_PORT", children.get(2).getName());
+               assertEquals("CP", children.get(2).getMetaData().getValue("type"));
+       }
+
+       @Test
+       public void testGetNodeTemplatesListOfNodeTemplateByVFC() {
+               List<NodeTemplate> vfList = nestedVfcCsarHlper.getServiceVfList();
+               List<NodeTemplate> vfChildren = nestedVfcCsarHlper.getNodeTemplateChildren(vfList.get(0));
+               assertNotNull(vfChildren);
+               assertEquals(vfChildren.size(), 2);
+               vfChildren.sort(Comparator.comparing(NodeTemplate::getName));
+               assertEquals("VFC1 DUMMY", vfChildren.get(0).getName());
+               assertEquals("VF_VNF", vfChildren.get(1).getName());
+               assertEquals("CVFC", vfChildren.get(1).getMetaData().getValue("type"));
+
+
+               List<NodeTemplate> vfcChildren = nestedVfcCsarHlper.getNodeTemplateChildren(vfChildren.get(1));
+               assertNotNull(vfcChildren);
+               assertEquals(vfcChildren.size(), 3);
+               vfcChildren.sort(Comparator.comparing(NodeTemplate::getName));
+               assertEquals("Test NIC 02_wan_port", vfcChildren.get(0).getName());
+               assertEquals("Test NIC_wan_port", vfcChildren.get(1).getName());
+               assertEquals("VF", vfcChildren.get(2).getName());
+       }
+
+       @Test
+       public void testGetNodeTemplatesListOfNodeTemplateByNull() {
+               List<NodeTemplate> children = fdntCsarHelper.getNodeTemplateChildren(null);
+               assertNotNull(children);
+               assertEquals(0, children.size());
+       }
+       //endregion
 }