@Override
  protected boolean createKeys(List<Object> toPopulate) {
    Object[] children = utils.getChildren(category);
    Arrays.sort(
        children,
        new Comparator() {

          public int compare(Object o1, Object o2) {
            String s1;
            String s2;
            if (o1 == FiltersExplorer.QUERIES || o2 == FiltersExplorer.QUERIES) {
              return o1 == FiltersExplorer.QUERIES ? 1 : -1;
            } else if (o1 instanceof Category && o2 instanceof Category) {
              s1 = ((Category) o1).getName();
              s2 = ((Category) o2).getName();
              return s1.compareTo(s2);
            } else if (o1 instanceof FilterBuilder && o2 instanceof FilterBuilder) {
              s1 = ((FilterBuilder) o1).getName();
              s2 = ((FilterBuilder) o2).getName();
              return s1.compareTo(s2);
            } else if (o1 instanceof Query && o2 instanceof Query) {
              s1 = ((Query) o1).getName();
              s2 = ((Query) o2).getName();
              return s1.compareTo(s2);
            } else if (o1 instanceof Category) {
              return -1;
            }
            return 1;
          }
        });
    toPopulate.addAll(Arrays.asList(children));
    return true;
  }
 public CategoryNode(FiltersExplorer.Utils utils, Category category) {
   super(
       utils.isLeaf(category)
           ? Children.LEAF
           : Children.create(new CategoryChildFactory(utils, category), true));
   this.category = category;
   if (category != null) {
     setName(category.getName());
   } else {
     setName(NbBundle.getMessage(CategoryNode.class, "RootNode.name"));
   }
 }