private void collapseOtherTopGroups() {
    UIComponent topGroup = getTopGroup();
    for (UIComponent child : getPanelMenu().getChildren()) {
      if (!(child instanceof AbstractPanelMenuGroup)) {
        continue;
      }

      AbstractPanelMenuGroup group = (AbstractPanelMenuGroup) child;

      if (group == topGroup) {
        continue;
      }

      group.setSubmittedExpanded(null);
      group.setExpanded(false);
    }
  }
  public void validate(FacesContext context) {
    if (context == null) {
      throw new NullPointerException();
    }

    // Submitted value == null means "the component was not submitted at all".
    Boolean expanded = getSubmittedExpanded();
    if (expanded == null) {
      return;
    }

    Boolean previous = (Boolean) getValue();
    setExpanded(expanded);
    setSubmittedExpanded(null);

    if (previous != null && !previous.equals(expanded)) {
      if (expanded && getMode() == PanelMenuMode.server && getPanelMenu().isExpandSingle()) {
        collapseOtherTopGroups();
      }

      queueEvent(new PanelToggleEvent(this, previous));
    }
  }