protected List<VmTemplate> filterNotBaseTemplates(List<VmTemplate> templates) {
    List<VmTemplate> baseTemplates = new ArrayList<VmTemplate>();
    for (VmTemplate template : templates) {
      if (template.getId().equals(template.getBaseTemplateId())) {
        baseTemplates.add(template);
        baseTemplateToSubTemplates.put(template.getId(), new ArrayList<VmTemplate>());
      }
    }

    for (VmTemplate template : templates) {
      Guid baseTemplateId = template.getBaseTemplateId();
      if (baseTemplateToSubTemplates.containsKey(baseTemplateId)) {
        baseTemplateToSubTemplates.get(baseTemplateId).add(template);
      }
    }

    for (List<VmTemplate> subversions : baseTemplateToSubTemplates.values()) {
      Collections.sort(
          subversions,
          new Comparator<VmTemplate>() {
            @Override
            public int compare(VmTemplate o1, VmTemplate o2) {
              return o2.getTemplateVersionNumber() - o1.getTemplateVersionNumber();
            }
          });
    }

    for (List<VmTemplate> subversions : baseTemplateToSubTemplates.values()) {
      subversions.add(0, createLatestTemplate(subversions.get(0)));
    }

    return baseTemplates;
  }
 @Override
 protected MapSqlParameterSource createFullParametersMapper(VmTemplate template) {
   return createBaseParametersMapper(template)
       .addValue("child_count", template.getChildCount())
       .addValue("name", template.getName())
       .addValue("status", template.getStatus())
       .addValue("is_disabled", template.isDisabled())
       .addValue("template_type", template.getTemplateType().name())
       .addValue("base_template_id", template.getBaseTemplateId())
       .addValue("template_version_name", template.getTemplateVersionName());
 }