package com.joe.facelets.table; import java.util.ArrayList; import java.util.List; import javax.faces.model.DataModel; import org.apache.commons.lang.StringUtils; import com.icesoft.faces.context.effects.Effect; public abstract class TableSource { protected boolean sortDecending = false; protected String sortKey = null; protected boolean oldDecending; protected String oldKey; protected Effect tableChangeEffect; protected List<Column> columns = new ArrayList<Column>(); protected int rowsPerPage = 13; public TableSource(List<Column> columns) { this.columns = columns; } private void triggerEffect() { if (tableChangeEffect != null) { tableChangeEffect.setFired(false); } } public void clearFilters() { for (Column c : columns) { if (c.getFilter() != null) { c.getFilter().clear(); } } } public boolean hasFilterChanged() { for (Column c : columns) { if (c.getFilter() != null) { if (c.getFilter().hasChanged()) { triggerEffect(); return true; } } } return false; } public void deselectAll() { setAllSelected(false); } public void setAllSelected(boolean selected) { for (Row r : getFilteredRows()) { r.setSelected(selected); } } public boolean isAllSelected() { for (Row r : getFilteredRows()) { if (!r.isSelected()) return false; } return true; } public boolean hasSortChanged() { if (!(sortKey == null || (oldKey == sortKey && oldDecending == sortDecending))) { triggerEffect(); return true; } return false; } public abstract DataModel getDataModel(); public abstract List<Row> getFilteredRows(); public abstract List<Row> getRows(); public List<Column> getColumns() { return columns; } public String getColumnClasses() { final List<String> result = new ArrayList<String>(); for (final Column c : columns) { result.add(c.getCellStyleClass()); } return StringUtils.join(result, ", "); } public void setColumns(List<Column> columns) { this.columns = columns; } public Effect getTableChangeEffect() { return tableChangeEffect; } public void setTableChangeEffect(Effect tableChangeEffect) { this.tableChangeEffect = tableChangeEffect; } public boolean isSortAscending() { return sortDecending; } public void setSortAscending(boolean sortAscending) { this.sortDecending = sortAscending; } public String getSortKey() { return sortKey; } public void setSortKey(String sortKey) { this.sortKey = sortKey; } public int getRowsPerPage() { return rowsPerPage; } public void setRowsPerPage(int rowsPerPage) { this.rowsPerPage = rowsPerPage; } }