/** * Helper to get the table model. * * @return the table model. */ private FilterableBeanBoundDataModel getFilterableTableModel() { return (FilterableBeanBoundDataModel) table.getTableModel(); }
/** * @return a String representation of this component, for debugging purposes. */ @Override public String toString() { TableModel model = getTableModel(); return toString(model.getClass().getSimpleName() + ", " + model.getRowCount() + " rows", -1, -1); }
/** * Retrieves the renderer class for a given row. * * @return the renderer class for a given row (if it's an expanded row), otherwise null. */ private Class<? extends WComponent> getRowRendererClass() { RowIdWrapper wrapper = getCurrentRowIdWrapper(); if (wrapper != null) { return table.getTableModel().getRendererClass(wrapper.getRowIndex()); } return null; }
/** * @param currentPage the currentPage to set. Zero based. */ public void setCurrentPage(final int currentPage) { if (currentPage < 0) { throw new IllegalArgumentException("Page number must be greater than or equal to zero."); } WTableComponentModel model = getOrCreateComponentModel(); model.currentPage = Math.min(model.getMaxPage(), currentPage); // Notify the table model that the page has changed TableModel dataModel = getTableModel(); if (dataModel instanceof ScrollableTableModel) { if (!isPaginated()) { throw new IllegalStateException( "Table with no pagination tried to set the current page on a ScrollableTableModel."); } int startIndex = getCurrentPage() * getRowsPerPage(); int endIndex = Math.min(startIndex + getRowsPerPage(), dataModel.getRowCount()) - 1; ((ScrollableTableModel) dataModel).setCurrentRows(startIndex, endIndex); } }
/** * Indicates whether the table supports sorting. * * @return true if the table and model both support sorting, false otherwise. */ public boolean isSortable() { // First check global override which turns sorting off if (getSortMode() == SortMode.NONE) { return false; } // Otherwise, the table is sortable if at least one column is sortable. TableModel dataModel = getTableModel(); final int columnCount = getColumnCount(); for (int i = 0; i < columnCount; i++) { if (dataModel.isSortable(i)) { return true; } } return false; }
/** * {@inheritDoc} */ @Override public Object getBean(final BeanProviderBound beanProviderBound) { TableModel dataModel = table.getTableModel(); int rowCount = dataModel.getRowCount(); if (rowCount == 0) { return Collections.emptyList(); } int startIndex = 0; int endIndex = rowCount - 1; if (PaginationMode.DYNAMIC == table.getPaginationMode() && table.isPaginated()) { int rowsPerPage = table.getRowsPerPage(); int currentPage = table.getCurrentPage(); // Only render the rows on the current page // If total row count has changed, calc the new last page startIndex = Math. min(currentPage * rowsPerPage, rowCount - (rowCount % rowsPerPage)); endIndex = Math.min(startIndex + rowsPerPage, rowCount) - 1; } if (endIndex < startIndex) { // No data return Collections.EMPTY_LIST; } return table.getRowIds(startIndex, endIndex, false); } }
/** * Provides data to a component rendering a column. * * @param beanProviderBound the component rendering the column. * @return a bean value for component that is rendering the specified row/column */ @Override public Object getBean(final BeanProviderBound beanProviderBound) { UIContext uic = UIContextHolder.getCurrent(); // Make sure we have the correct uic while (uic instanceof SubUIContext && !((SubUIContext) uic).isInContext( (WComponent) beanProviderBound)) { uic = ((SubUIContext) uic).getParentContext(); } if (!(uic instanceof SubUIContext)) { LOG.error("Unable to handle UIContext type: " + uic.getClass().getName()); return null; } RowIdWrapper wrapper = rowRenderer.getCurrentRowIdWrapper(); List<Integer> rowIndex = wrapper.getRowIndex(); // ColunIndex -1 means we have a row renderer return rowRenderer.table.getTableModel().getValueAt(rowIndex, columnIndex); }
/** * Helper method to add the columns to the table. * * @param table the table to configure */ public static void configTable(final WTable table) { TableBeanModel<?, ?> beanModel = (TableBeanModel<?, ?>) table.getTableModel(); for (TableColumn<?, ?> col : beanModel.getColumns()) { // Create column WTableColumn tblCol = new WTableColumn(col.getColumnLabel(), col.getRenderer()); table.addColumn(tblCol); } }
Set<Object> newExpansions; TableModel model = getTableModel();
/** * Sort the table data by the specified column. * * @param sortCol the column to sort * @param sortAsc true if sort ascending, otherwise sort descending */ public void sort(final int sortCol, final boolean sortAsc) { int[] rowIndexMappings = getTableModel().sort(sortCol, sortAsc); getOrCreateComponentModel().rowIndexMapping = rowIndexMappings; setSort(sortCol, sortAsc); if (rowIndexMappings == null) { // There's no way to correlate the previously selected row indices // with the new order of rows, so we need to clear out the selection. setSelectedRows(null); setExpandedRows(null); } }
if (getTableModel().getRowCount() == 0) { newSelections = new HashSet<>(); selectedRows = new String[0];
TableModel model = getTableModel();
TableModel model = getTableModel();
/** * Updates the bean using the table data model's {@link TableModel#setValueAt(Object, List, int)} method. This * method only updates the data for the currently set row ids. */ private void updateBeanValueForRenderedRows() { WTableRowRenderer rowRenderer = (WTableRowRenderer) repeater.getRepeatedComponent(); TableModel model = getTableModel(); int index = 0; List<RowIdWrapper> wrappers = repeater.getBeanList(); int columnCount = getColumnCount(); for (RowIdWrapper wrapper : wrappers) { UIContext rowContext = repeater.getRowContext(wrapper, index++); List<Integer> rowIndex = wrapper.getRowIndex(); Class<? extends WComponent> expandRenderer = model.getRendererClass(rowIndex); if (expandRenderer == null) { // Process Columns for (int col = 0; col < columnCount; col++) { // Check if this cell is editable if (model.isCellEditable(rowIndex, col)) { updateBeanValueForColumnInRow(rowRenderer, rowContext, rowIndex, col, model); } } } else if (model.isCellEditable(rowIndex, -1)) { // Check if this expanded row is editable updateBeanValueForRowRenderer(rowRenderer, rowContext, expandRenderer); } } }
super.preparePaintComponent(request); TableModel model = rowRenderer.table.getTableModel(); RowIdWrapper wrapper = rowRenderer.getCurrentRowIdWrapper(); List<Integer> rowIndex = wrapper.getRowIndex();
/** * Paints the column headings for the given table. * * @param table the table to paint the headings for. * @param renderContext the RenderContext to paint to. */ private void paintColumnHeadings(final WTable table, final WebXmlRenderContext renderContext) { XmlStringBuilder xml = renderContext.getWriter(); int[] columnOrder = table.getColumnOrder(); TableModel model = table.getTableModel(); final int columnCount = columnOrder == null ? table.getColumnCount() : columnOrder.length; xml.appendTagOpen("ui:thead"); xml.appendOptionalAttribute("hidden", !table.isShowColumnHeaders(), "true"); xml.appendClose(); for (int i = 0; i < columnCount; i++) { int colIndex = columnOrder == null ? i : columnOrder[i]; WTableColumn col = table.getColumn(colIndex); if (col.isVisible()) { boolean sortable = model.isSortable(colIndex); paintColumnHeading(col, sortable, renderContext); } } xml.appendEndTag("ui:thead"); }
/** * Paints the rows of the table. * * @param table the table to paint the rows for. * @param renderContext the RenderContext to paint to. */ private void paintRows(final WTable table, final WebXmlRenderContext renderContext) { XmlStringBuilder xml = renderContext.getWriter(); TableModel model = table.getTableModel(); xml.appendTagOpen("ui:tbody"); xml.appendAttribute("id", table.getId() + ".body"); xml.appendClose(); if (model.getRowCount() == 0) { xml.appendTag("ui:nodata"); xml.appendEscaped(table.getNoDataMessage()); xml.appendEndTag("ui:nodata"); } else { // If has at least one visible col, paint the rows. final int columnCount = table.getColumnCount(); for (int i = 0; i < columnCount; i++) { if (table.getColumn(i).isVisible()) { doPaintRows(table, renderContext); break; } } } xml.appendEndTag("ui:tbody"); }
XmlStringBuilder xml = renderContext.getWriter(); WTable table = renderer.getTable(); TableModel dataModel = table.getTableModel();
TableModel dataModel = table.getTableModel();
TableModel model = table.getTableModel();