@Override
  protected void encodeMarkup(FacesContext context, AbstractMenu abstractMenu) throws IOException {
    ResponseWriter writer = context.getResponseWriter();
    PanelMenu menu = (PanelMenu) abstractMenu;
    String clientId = menu.getClientId(context);
    String style = menu.getStyle();
    String styleClass = menu.getStyleClass();
    styleClass =
        styleClass == null
            ? PanelMenu.CONTAINER_CLASS
            : PanelMenu.CONTAINER_CLASS + " " + styleClass;

    writer.startElement("div", menu);
    writer.writeAttribute("id", clientId, "id");
    writer.writeAttribute("class", styleClass, "styleClass");
    if (style != null) {
      writer.writeAttribute("style", style, "style");
    }
    writer.writeAttribute("role", "menu", null);

    if (menu.getElementsCount() > 0) {
      List<MenuElement> elements = menu.getElements();

      for (MenuElement element : elements) {
        if (element.isRendered() && element instanceof Submenu) {
          encodeRootSubmenu(context, menu, (Submenu) element);
        }
      }
    }

    writer.endElement("div");
  }