import java.util.Map;
 
 import org.apache.commons.lang3.tuple.Pair;
+import org.openecomp.sdc.tosca.parser.impl.SdcTypes;
 import org.openecomp.sdc.toscaparser.api.Group;
 import org.openecomp.sdc.toscaparser.api.NodeTemplate;
 import org.openecomp.sdc.toscaparser.api.elements.Metadata;
         * @return customization UUID of a node template.
         */
        public String getNodeTemplateCustomizationUuid(NodeTemplate nt);
+
+       /**
+        * Get all node templates by sdcType for parent Node Template.
+        *
+        * @param parentNodeTemplate - parent node template
+        * @param sdcType - the SDC type of the node.
+        * @return node templates of this SDC type.
+        */
+       List<NodeTemplate> getNodeTemplateBySdcType(NodeTemplate parentNodeTemplate, SdcTypes sdcType);
+
+       /**
+        * Get all node templates by sdcType for this CSAR service.
+        *
+        * @param sdcType - the SDC type of the node.
+        * @return service node templates of this SDC type.
+        */
+       List<NodeTemplate> getServiceNodeTemplateBySdcType(SdcTypes sdcType);
 }
 
     @Override
     //Sunny flow - covered with UT
     public List<NodeTemplate> getServiceVlList() {
-        List<NodeTemplate> serviceVlList = getNodeTemplateBySdcType(toscaTemplate.getTopologyTemplate(), Types.TYPE_VL);
+        List<NodeTemplate> serviceVlList = getNodeTemplateBySdcType(toscaTemplate.getTopologyTemplate(), SdcTypes.VL);
         return serviceVlList;
     }
 
     @Override
     //Sunny flow - covered with UT
     public List<NodeTemplate> getServiceVfList() {
-        List<NodeTemplate> serviceVfList = getNodeTemplateBySdcType(toscaTemplate.getTopologyTemplate(), Types.TYPE_VF);
+        List<NodeTemplate> serviceVfList = getNodeTemplateBySdcType(toscaTemplate.getTopologyTemplate(), SdcTypes.VF);
         return serviceVfList;
     }
 
 
         List<NodeTemplate> serviceVfList = getServiceVfList();
         NodeTemplate vfInstance = getNodeTemplateByCustomizationUuid(serviceVfList, vfCustomizationId);
-        return getNodeTemplateBySdcType(vfInstance, Types.TYPE_VFC);
+        return getNodeTemplateBySdcType(vfInstance, SdcTypes.VFC);
     }
 
     @Override
             log.debug("getCpListByVf vf list is null");
             return cpList;
         }
-        cpList = getNodeTemplateBySdcType(vfInstance, Types.TYPE_CP);
+        cpList = getNodeTemplateBySdcType(vfInstance, SdcTypes.CP);
         if (cpList == null || cpList.size() == 0)
             log.debug("getCpListByVf cps not exist for vfCustomizationId {}", vfCustomizationId);
         return cpList;
                return res;
        }
 
-    /************************************* helper functions ***********************************/
-    private List<NodeTemplate> getNodeTemplateBySdcType(NodeTemplate nodeTemplate, String sdcType) {
-        if (nodeTemplate == null) {
+    public List<NodeTemplate> getNodeTemplateBySdcType(NodeTemplate parentNodeTemplate, SdcTypes sdcType) {
+        if (parentNodeTemplate == null) {
             log.error("getNodeTemplateBySdcType - nodeTemplate is null or empty");
             return new ArrayList<>();
         }
 
-        if (GeneralUtility.isEmptyString(sdcType)) {
+        if (sdcType == null) {
             log.error("getNodeTemplateBySdcType - sdcType is null or empty");
             return new ArrayList<>();
         }
 
-        SubstitutionMappings substitutionMappings = nodeTemplate.getSubMappingToscaTemplate();
+        SubstitutionMappings substitutionMappings = parentNodeTemplate.getSubMappingToscaTemplate();
 
         if (substitutionMappings != null) {
             List<NodeTemplate> nodeTemplates = substitutionMappings.getNodeTemplates();
             if (nodeTemplates != null && nodeTemplates.size() > 0)
-                return nodeTemplates.stream().filter(x -> (x.getMetaData() != null && sdcType.equals(x.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_TYPE)))).collect(Collectors.toList());
+                return nodeTemplates.stream().filter(x -> (x.getMetaData() != null && sdcType.toString().equals(x.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_TYPE)))).collect(Collectors.toList());
             else
                 log.debug("getNodeTemplateBySdcType - SubstitutionMappings' node Templates not exist");
         } else
         return new ArrayList<>();
     }
 
-    private List<NodeTemplate> getNodeTemplateBySdcType(TopologyTemplate topologyTemplate, String sdcType) {
-        if (GeneralUtility.isEmptyString(sdcType)) {
+    public List<NodeTemplate> getServiceNodeTemplateBySdcType(SdcTypes sdcType) {
+        if (sdcType == null) {
+            log.error("getServiceNodeTemplateBySdcType - sdcType is null or empty");
+            return new ArrayList<>();
+        }
+
+        TopologyTemplate topologyTemplate = toscaTemplate.getTopologyTemplate();
+        return getNodeTemplateBySdcType(topologyTemplate, sdcType);
+    }
+
+    /************************************* helper functions ***********************************/
+    private List<NodeTemplate> getNodeTemplateBySdcType(TopologyTemplate topologyTemplate, SdcTypes sdcType) {
+        if (sdcType == null) {
             log.error("getNodeTemplateBySdcType - sdcType is null or empty");
             return new ArrayList<>();
         }
         List<NodeTemplate> nodeTemplates = topologyTemplate.getNodeTemplates();
 
         if (nodeTemplates != null && nodeTemplates.size() > 0)
-            return nodeTemplates.stream().filter(x -> (x.getMetaData() != null && sdcType.equals(x.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_TYPE)))).collect(Collectors.toList());
+            return nodeTemplates.stream().filter(x -> (x.getMetaData() != null && sdcType.toString().equals(x.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_TYPE)))).collect(Collectors.toList());
 
         log.debug("getNodeTemplateBySdcType - topologyTemplate's nodeTemplates not exist");
         return new ArrayList<>();
 
 
 import org.apache.commons.lang3.tuple.Pair;
 import org.openecomp.sdc.tosca.parser.exceptions.SdcToscaParserException;
+import org.openecomp.sdc.tosca.parser.impl.SdcTypes;
 import org.openecomp.sdc.toscaparser.api.Group;
 import org.openecomp.sdc.toscaparser.api.NodeTemplate;
 import org.testng.annotations.Test;
        }
        //endregion
 
+       //region getServiceNodeTemplateBySdcType
+       @Test
+       public void testServiceNodeTemplateBySdcType() {
+               List<NodeTemplate> serviceVfList = fdntCsarHelper.getServiceNodeTemplateBySdcType(SdcTypes.VF);
+               assertNotNull(serviceVfList);
+               assertEquals(2, serviceVfList.size());
+               assertEquals(serviceVfList.get(0).getName(), "FDNT 1");
+       }
+
+       @Test
+       public void testServiceNodeTemplateByNullSdcType() {
+               List<NodeTemplate> serviceVfList = fdntCsarHelper.getServiceNodeTemplateBySdcType(null);
+               assertNotNull(serviceVfList);
+               assertEquals(serviceVfList.size(), 0);
+       }
+       //endregion
+
+       //region getNodeTemplateBySdcType
+       @Test
+       public void testNodeTemplateBySdcType() {
+               List<NodeTemplate> vfList = fdntCsarHelper.getServiceVfList();
+               List<NodeTemplate> vfcList = fdntCsarHelper.getNodeTemplateBySdcType(vfList.get(0), SdcTypes.VFC);
+               assertNotNull(vfcList);
+               assertEquals(2, vfcList.size());
+               assertEquals("DNT_FW_RSG_SI_1", vfcList.get(0).getName());
+       }
+
+       @Test
+       public void testNodeTemplateByNullSdcType() {
+               List<NodeTemplate> vfList = fdntCsarHelper.getServiceVfList();
+               List<NodeTemplate> vfcList = fdntCsarHelper.getNodeTemplateBySdcType(vfList.get(0), null);
+               assertNotNull(vfcList);
+               assertEquals(0, vfcList.size());
+       }
+
+       @Test
+       public void testNodeTemplateBySdcTypeNullNT() {
+               List<NodeTemplate> vfcList = fdntCsarHelper.getNodeTemplateBySdcType(null, SdcTypes.VFC);
+               assertNotNull(vfcList);
+               assertEquals(0, vfcList.size());
+       }
+       //endregion
 }