/** * 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); } }