/**
   * Pass in an element, and this will update its parents' check states
   *
   * @param element the SelectableElement which will have its parents' check state updated
   */
  private void setSelectedTypeForParent(SelectableElement element) {
    SelectableElement parent = element.getParent();
    if (parent != null) {

      if (SelectableElement.doAllChildrenHaveSelectedType(parent, SelectedType.UNSELECTED)) {
        parent.setSelectedType(SelectedType.UNSELECTED);
      } else if (SelectableElement.doAllChildrenHaveSelectedType(parent, SelectedType.SELECTED)) {
        parent.setSelectedType(SelectedType.SELECTED);
      } else {
        parent.setSelectedType(SelectedType.LEAVE);
      }

      setSelectedTypeForParent(parent);
    }
  }