package org.ovirt.engine.ui.common.widget.table.header; import java.util.ArrayList; import org.ovirt.engine.ui.common.widget.table.cell.CheckboxCell; import org.ovirt.engine.ui.uicommonweb.models.ListModel; import com.google.gwt.user.cellview.client.Header; import com.google.gwt.view.client.SelectionModel; /** * AbstractSelectAllCheckBoxHeader. Does not support tooltips. */ public abstract class AbstractSelectAllCheckBoxHeader<T> extends Header<Boolean> { public AbstractSelectAllCheckBoxHeader() { super(new CheckboxCell(true, true)); setUpdater(value -> selectionChanged(value)); } protected abstract void selectionChanged(Boolean value); public void handleSelection(Boolean value, ListModel listModel, SelectionModel selectionModel) { if (!listModel.getItems().iterator().hasNext()) { return; } ArrayList<T> selectedItems = new ArrayList<>(); for (T entity : (Iterable<T>) listModel.getItems()) { if (value) { selectedItems.add(entity); } selectionModel.setSelected(entity, value); } listModel.setSelectedItems(selectedItems); } public boolean getCheckValue(Iterable<T> items, SelectionModel selectionModel) { if (!items.iterator().hasNext()) { return false; } boolean allSelected = true; for (T entity : items) { if (!selectionModel.isSelected(entity)) { return false; } } return true; } }