public Collection getChildContainerNodes(Integer parentNode) {
    ArrayList ret = new ArrayList();
    cacheLeafs = new ArrayList();

    List children = null;
    try {
      children =
          (ROOT.equals(parentNode))
              ? controller.findRootCategories()
              : controller.findActiveByParent(parentNode);
    } catch (SystemException e) {
      logger.warn("Error getting Category Children", e);
    }

    for (Iterator i = children.iterator(); i.hasNext(); ) {
      CategoryVO vo = (CategoryVO) i.next();

      List grandkids = getGrandKids(vo.getId());

      BaseNode node = new CategoryNodeImpl();
      node.setId(vo.getId());
      node.setTitle(vo.getName());
      node.setContainer(true);
      node.setChildren(!grandkids.isEmpty());
      ret.add(node);
    }

    return ret;
  }
 public CategoryNodeSupplier() {
   BaseNode rootNode = new ContentNodeImpl();
   rootNode.setChildren(true);
   rootNode.setId(ROOT); // There is no BASE category so make it up
   rootNode.setTitle("Categories");
   rootNode.setContainer(true);
   setRootNode(rootNode);
 }