private static void createTree() {
    List<Menu> menuList = new MenuDAOImpl().getAllMenus();

    Map<Menu, MenuItem> menuToMenuItemMap = new HashMap<Menu, MenuItem>();

    for (Menu menu : menuList) {
      MenuItem menuItem = new MenuItem();
      menuItem.setMenu(menu);
      menuToMenuItemMap.put(menu, menuItem);
    }

    MenuItem rootWrapper = new MenuItem();

    for (Menu menu : menuList) {
      if (menu.getParent() == null) {
        rootWrapper.getChildMenus().add(menuToMenuItemMap.get(menu));
      } else {
        menuToMenuItemMap.get(menu.getParent()).getChildMenus().add(menuToMenuItemMap.get(menu));
      }
    }

    sortChildren(rootWrapper);

    root = rootWrapper.getChildMenus();
  }
  private static void addChildMenuItems(
      StringBuffer html, List<MenuItem> menuTree, String contextPath, boolean topLevel) {

    int topLevelCount = 0;
    for (MenuItem menuItem : menuTree) {
      Menu menu = menuItem.getMenu();

      if (topLevel) {
        if (topLevelCount == 0) {
          html.append("\t<li id=\"nav-first\" >\n");
        } else if (topLevelCount == menuTree.size() - 1) {
          html.append("\t<li id=\"nav-last\" >\n");
        } else {
          html.append("\t<li>\n");
        }

        topLevelCount++;
      } else {
        html.append("\t<li>\n");
      }

      html.append("\t\t<a ");
      html.append("id=\"");
      html.append(menu.getElementId());
      html.append("\" ");

      if (!GenericValidator.isBlankOrNull(menu.getLocalizedTooltip())) {
        html.append(" title=\"");
        html.append(menu.getLocalizedTooltip());
        html.append("\" ");
      }

      if (menu.isOpenInNewWindow()) {
        html.append(" target=\"_blank\" ");
      }

      if (GenericValidator.isBlankOrNull(menu.getActionURL())
          && GenericValidator.isBlankOrNull(menu.getClickAction())) {
        html.append(" class=\"no-link\" >");
      } else {
        html.append(" href=\"");
        html.append(contextPath);
        html.append(menu.getActionURL());
        html.append("\" >");
      }

      html.append(menu.getLocalizedTitle());
      html.append("</a>\n");

      if (!menuItem.getChildMenus().isEmpty()) {
        html.append("<ul>\n");
        addChildMenuItems(html, menuItem.getChildMenus(), contextPath, false);
        html.append("</ul>\n");
      }

      html.append("\t</li>\n");
    }
  }
  private static void sortChildren(MenuItem menuItem) {
    menuItem.sortChildren();

    for (MenuItem child : menuItem.getChildMenus()) {
      sortChildren(child);
    }
  }